Compose
的核心,涉及到的指令关键字也比较多。但大家不用担心,这里面大部分指令跟 docker run
相关参数的含义都是类似的。docker-compose.yml
,格式为 YAML 格式。image
指令指定镜像或 build
指令(需要 Dockerfile)等来自动构建生成镜像。build
指令,在 Dockerfile
中设置的选项(例如:CMD
, EXPOSE
, VOLUME
, ENV
等) 将会自动被获取,无需在 docker-compose.yml
中重复设置。build
Dockerfile
所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose
将会利用它自动构建这个镜像,然后使用这个镜像。context
指令指定 Dockerfile
所在文件夹的路径。dockerfile
指令指定 Dockerfile
文件名。arg
指令指定构建镜像时的变量。cache_from
指定构建镜像的缓存cap_add, cap_drop
command
configs
cgroup_parent
cgroup
组,意味着将继承该组的资源限制。cgroups_1
。container_name
项目名称_服务名称_序号
这样的格式。注意: 指定容器名称后,该服务将无法进行扩展(scale),因为 Docker 不允许多个容器具有相同的名称。
deploy
devices
depends_on
redis
db
再启动 web
注意:web
服务不会等待redis
db
「完全启动」之后才启动。
dns
DNS
服务器。可以是一个值,也可以是一个列表。dns_search
DNS
搜索域。可以是一个值,也可以是一个列表。tmpfs
env_file
docker-compose -f FILE
方式来指定 Compose 模板文件,则 env_file
中变量的路径会基于模板文件路径。environment
指令冲突,则按照惯例,以后者为准。#
开头的注释行。environment
expose
external_links
注意:不建议使用该指令。
docker-compose.yml
外部的容器,甚至并非 Compose
管理的外部容器。extra_hosts
--add-host
参数,指定额外的 host 名称映射信息。/etc/hosts
文件中添加如下两条条目。healthcheck
image
Compose
将会尝试拉取这个镜像。labels
links
注意:不推荐使用该指令。
logging
options
配置日志驱动的相关参数。network_mode
docker run
的 --network
参数一样的值。networks
pid
ports
(HOST:CONTAINER)
格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。HOST:CONTAINER
格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为 YAML
会自动解析 xx:yy
这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。secrets
mysql
服务密码。security_opt
stop_signal
sysctls
ulimits
volumes
HOST:CONTAINER
)或者数据卷名称(VOLUME:CONTAINER
),并且可以设置访问模式 (HOST:CONTAINER:ro
)。domainname, entrypoint, hostname, ipc, mac_address, privileged, read_only, shm_size, restart, stdin_open, tty, user, working_dir
等指令,基本跟 docker run
中对应参数的功能一致。always
或者 unless-stopped
。.env
文件中的变量。${MONGO_VERSION}
的值,并写入执行的指令中。MONGO_VERSION=3.2 docker-compose up
则会启动一个 mongo:3.2
镜像的容器;如果执行 MONGO_VERSION=2.8 docker-compose up
则会启动一个 mongo:2.8
镜像的容器。.env
文件,执行 docker-compose
命令时将从该文件中读取变量。.env
文件并写入以下内容。docker-compose up
则会启动一个 mongo:3.6
镜像的容器。