赞
踩
目录
简介
Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。
Docker-Compose将所管理的容器分为三层,分别是工程(project)
,服务(service)
以及容器(container)
。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。
Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
常用命令
常见的命令格式如下
$ docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
常见的选项包括
$ docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
选项包括:
$ docker-compose up
启动所有服务
$ docker-compose up -d
在后台所有启动服务
-f 指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定。
$ docker-compose -f docker-compose.yml up -d
列出项目中目前所有的容器
启动已经存在的服务容器。
- $ docker-compose start [SERVICE...]
- $ docker-compose start
停止正在运行的容器,可以通过docker-compose start 再次启动。
$ docker-compose stop [options] [SERVICE...]
重启项目中的服务。
$ docker-compose restart [options] [SERVICE...]
选项包括:
停止和删除容器、网络、卷、镜像。
$ docker-compose down [options]
选项包括
查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。
$ docker-compose logs [options] [SERVICE...]
构建(重新构建)项目中的服务容器。
$ docker-compose build [options] [--build-arg key=val...] [SERVICE...]
选项包括:
拉取服务依赖的镜像。
$ docker-compose pull [options] [SERVICE...]
选项包括:
删除所有(停止状态的)服务容器。
$ docker-compose rm [options] [SERVICE...]
选项包括:
–f, –force,强制直接删除,包括非停止状态的容器
-v,删除容器所挂载的数据卷
在指定服务上执行一个命令。
$ docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
Compose允许用户通过一个docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose模板文件是一个定义服务、网络和卷的YAML文件。Compose模板文件默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。
Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分。
- version: "2.1"
- services:
- img-name:
- image: xxxx
Compose目前有三个版本分别为Version 1,Version 2,Version 3,Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1将来会被弃用。
- build: ./dir
- ---------------
- build:
- context: ./dir
- dockerfile: Dockerfile
- args:
- buildno: 1
- command: bundle exec thin -p 3000
- ----------------------------------
- command: [bundle,exec,thin,-p,3000]
- dns: 8.8.8.8
- ------------
- dns:
- - 8.8.8.8
- - 9.9.9.9
- dns_search: example.com
- ------------------------
- dns_search:
- - dc1.example.com
- - dc2.example.com
- environment:
- RACK_ENV: development
- SHOW: 'ture'
- -------------------------
- environment:
- - RACK_ENV=development
- - SHOW=ture
- env_file: .env
- ---------------
- env_file:
- - ./common.env
- expose:
- - "3000"
- - "8000"
image: java
- network_mode: "bridge"
- network_mode: "host"
- network_mode: "none"
- network_mode: "service:[service name]"
- network_mode: "container:[container name/id]"
- ports: # 暴露端口信息 - "宿主机端口:容器暴露端口"
- - "8763:8763"
- - "8763:8763"
- links: # 指定服务名称:别名
- - docker-compose-eureka-server:compose-eureka
- volumes:
- - /lib
- - /var
- --no-color 单色输出,不显示其他颜.
- -f, --follow 跟踪日志输出,就是可以实时查看日志
- -t, --timestamps 显示时间戳
- --tail 从日志的结尾显示,--tail=200
docker-compose支持两种方式设置持久化的文件
- servicename:
- image: image-name
- volumes:
- - /path/to/file:/path/to/container/file
这种方式将文件直接挂载到容器中,使用起来比较直观,但是需要管理本地路径。
- servicename:
- image: image-name
- volumes:
- - volume-name:/path/to/container/file
- volumes:
- volume-name: /path/to/local/file
使用docker volume ls
命令可以查看本地挂载的文件。
使用docker volume inspect volume-name
命令可以查看具体的真实地址。
例如:
- version: '2'
- services:
- web:
- build: .
- links:
- - "db:database"
- db:
- image: postgres
- version: '4'
- services:
- # 模拟一个正常的mysql数据库
- mysql8:
- image: mysql:8.0.27
- restart: always
- container_name: mysql
- ports:
- - 3306:3306
- volumes:
- - ./docker/mysql/log:/var/log/mysql
- - ./docker/mysql/data:/var/lib/mysql
- environment:
- - MYSQL_ROOT_PASSWORD=password
- # - MYSQL_ALLOW_EMPTY_PASSWORD=1
- command:
- --max_connections=1000
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --default-authentication-plugin=mysql_native_password
- --lower_case_table_names=1
- networks:
- - nacos-net
-
- nacos:
- image: nacos/nacos-server
- container_name: nacos
- volumes:
- - ./docker/nacos/standalone-logs/:/home/nacos/logs
- #- ./docker/nacos/conf/:/home/nacos/conf
- # env_file:
- # - ./nacos/nacos-standlone-mysql.env #这个文件指定启动模式 只有一行内容:MODE=standalone
- environment:
- - db.url.0=jdbc:mysql://mysql8:3306/jl-config?characterEncoding=utf8&connectTimeout=15000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
- - spring.datasource.platform=mysql
- - db.user=root
- - db.password=password
- - db.driver-class-name=com.mysql.cj.jdbc.Driver
- - MODE=standalone
- ports:
- - "8848:8848"
- - "9848:9848"
- - "9849:9849"
- depends_on:
- - mysql8
- restart: always
- networks:
- - nacos-net
-
- networks:
- nacos-net:
- driver: bridge
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。