在我们启动容器的时候经常要使用docker run 指定很多参数,当我们需要管理很多容器时,使用这样的方式会给我们的运维人员带来很大的负担,docker compose容器编排工具无疑是解决这个一问题的利器。
Docker Compose是用来管理多容器应用的工具,我们可以使用compose file 文件来配置容器的应用和服务,编写好compose file 文件以后,我们只需要使用一条简单的命令就可以创建并启动我们需要的应用。
使用compose一般有三个步骤:
1、编写Dockerfile,定义镜像的构建参数。
2、编写docker-compose.yml文件,定义应用的挂载,环境变量,启动参数等。
3、执行 docker-compose up 命令,自动执行构建镜像并启动容器和应用。
安装Compose
这里只介绍Linux环境下的安装。
执行如下命令:
curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
可以根据的自己的需求安装不同的版本,修改链接中的版本号即可。也可以直接去https://github.com/docker/compose/releases 上下载需要的版本。
对文件添加执行权限:
chmod +x /usr/local/bin/docker-compose
安装完成后,执行compose命令验证是否安装成功:
# docker-compose --version
docker-compose version 1.14.0, build c7bdf9e
Compose file 常用语法介绍
compose使用的是YAML格式的文件,我们可以使用它来定义服务、网络和卷。compose file的固定命名为 docker-compose.yml。
这里只列出常用的信息,具体用法参考:https://docs.docker.com/compose/compose-file/
build: 构建镜像,指定构建的路径,文件,源镜像等信息。
build:
context: . # 指定Dockerfile的构建路径,或者是一个url的git仓库地址
dockerfile: Dockerfile-abcd #可以指定Dockerfile的名称,如果不是默认名称时。
args: #添加构建参数,环境变量参数只能在构建过程中访问,使用时需要先在Dockerfile中定义。
- buildno=1 #yaml语法,‘=’两边不能有空格
- password=secret #也可以使用列表的方式 'password: secret'
command: 用于重新覆盖Dockerfile中的COMMAND命令。
command: COMMAND args
也可以使用列表的形式:
command: ["comand1", "command2"]
devices: 映射宿主机的设备到容器中。
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
depends_on: 执行此模块的行为时,所依赖的其他模块必须已经完成。
services:
web:
build: .
depends_on:
- db
- Redis
redis:
image: redis
db:
image: postgres
dns: 指定dns.
12345 dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
env_file: 从文件中添加环境变量参数。如果您使用docker-compose -f FILE指定了一个Compose文件,则env_file中的路径与文件所在的目录相关。
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
expose:暴露端口而不将它们发布到主机 - 它们只能被链接服务访问。 只能指定内部端口。
expose:
- "3000"
- "8000"
image: 指定要从中启动容器的镜像,可以是存储库/标签或部分映像ID,如果有指定build行为,会自动为新构建的镜像打上此标签和命名(默认的v1 版本中build和image关键字不能同时存在,需要指定v2 或v3版本)。
image: redis
image: Ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd
links: 链接到另一个服务中的容器。 请同时指定服务名称和链接别名(SERVICE:ALIAS),或仅指定服务名称。
logging: 日志服务。支持三种日志驱动,json-file, syslog, none. 默认的为json-file.
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
services:
some-service:
image: some-service
logging:
driver: "json-file"
options:
max-size: "200k" # 日志文件最大不超过200K
max-file: "10" # 日志文件最多不超过10个
network_mode: 指定网络模式。与使用docker 命令的-net参数一样。
network_mode: "bridge"
network_mode: "host"
network_mode: "none"