Compose File
Version 3
build
1 | build: . |
在当前目录构建镜像,镜像名为webapp:tag
1 | build: |
context
指向了一个包含Dockerfile的目录(可以是相对目录),或者指向一个Git仓库的url。
dockerfile
指定了Alternate Dockerfile
args
首先在Dockerfile中列出参数,如
1 | ARG buildno |
然后在compose文件中对参数进行赋值,如下。同时支持map或者列表格式。
1 | build: |
cache_from
new in v3.2
1 | build: |
labels
new in v3.3,参照Docker Labels
1 | build: |
cap_add,cap_drop
添加和删除权限,所有权限命令man 7 capabilities
,解释en
1 | cap_add: |
在deploying a stack in swarm mode
模式下失效
command
对默认命令进行覆盖重写
1 | command: bundle exec thin -p 3000 |
configs
new in v3.3,在各个服务下面配置configs,然后最后在与service
平级的configs
下指定具体值。
short syntax
1 | version: "3.3" |
仅仅指定config name
,redis
服务可以访问my_config
和my_other_config
,my_config
具体的值保存在./myconfig.txt
中。这些将被挂载到容器内部的/my_config
和/my_other_config
中。
long syntax
1 | version: "3.3" |
source
:Docker中存在的配置名称target
:将要在容器中挂载的目录,默认为/<source>
uid
和gid
:配置文件在容器中的所属用户和所属组别,Linux默认为0(root),Windows不支持。mode
:挂载文件的权限,默认为0444
,因为不可写,所以设置为写权限为无用的,可以设置为执行x权限
cgroup_parent
指定容器的cgroup parent,在deploying a stack in swarm mode with
下无效。Cgroup介绍
1 | cgroup_parent: m-executor-abcd |
container_name
指定容器name,用来代替默认名称
1 | container_name: my-web-container |
credential_spec
new in v3.3,仅在Windows下使用
1 | credential_spec: |
deploy
v3新增功能,用来部署成swarm
模式。被docker-compose up
和docker-compose run
指令忽略。
1 | version: '3' |
mode
global
或者replicated
,默认为replicated
,区别replicated
replicas
如果mode为replicated(默认),则该字段指定在任意时间上应该被运行的容器数目。
placement
同docker启动的constaints参数
1 | version: '3' |
update_config
指定服务如何被更新:
parallelism
指定一次升级的容器数目delay
指定每组容器升级间的间隙时间failure_action
指定更新失败时的动作,continue
orpause
(default)monitor
指定为了监视每个更新任务的失败而持续的监视时间(ns|us|ms|s|m|h
),默认0smax_failure_ratio
指定升级期间所容忍的失败率
1 | version: '3' |
resources
对资源进行管控,v3版本之前是(cpu_shares, cpu_quota, cpuset, mem_limit, memswap_limit, mem_swappiness)
1 | version: '3' |
restart_policy
配置当容器退出时如何重启,会覆盖restart
condition
:none
,on-failure
,any
(default)delay
:重启尝试期间的等待时间,默认0max_attempts
:最多尝试几次,默认为无限重试window
:重启成功的决定时间为,默认为直接决定
1 | version: "3" |
labels
为服务设置labels,而非任何服务内的容器
1 | version: "3" |
Not supported for docker stack deploy
以下在deploy时,不生效
build
cgroup_parent
container_name
devices
dns
dns_search
tmpfs
external_links
links
network_mode
security_opt
stop_signal
sysctls
userns_mode
devices
设备映射
1 | devices: |
depends_on
容器启动时根据依赖关系进行顺序启动,如下,首先启动redis和db,再启动web.
同时若docker-compose up web
,则redis和db也会被启动
只是保证启动顺序,而非保证在redis和db启动完成时web才启动.若需严格控制,则用另外一个方法Controlling startup order in Compose | Docker Documentation
1 | version: '3' |
dns
1 | dns: 8.8.8.8 |
dns_search
自定义dns搜索域
1 | dns_search: example.com |
tmpfs
在容器内挂载临时文件系统
1 | tmpfs: /run |
entrypoint
重写默认的entrypoint
,不仅覆盖dockerfile中的ENTRYPOINT
,也使CMD
失效
1 | entrypoint: /code/entrypoint.sh |
env_file
从文件中添加环境变量,该文件的目录为相对于docker-compose.yml
的位置.这个环境变量会被environment
中的值所覆盖.
1 | env_file: .env |
文件如下,右值若有引号,则引号会被加入到环境变量中去.若不同文件中含有相同的环境变量,则根据文件列表的从上到下,下面的会覆盖上面的.
1 | # Set Rails/Rack environment |
environment
true, false, yes no
类的boolean值需要加引号,其他不加
1 | environment: |
expose
开放端口,但是不对宿主机可见.仅仅对link过的容器可见.
1 | expose: |
external_links
与Compose外的容器进行连接,可以为各个容器提供公共服务.
1 | external_links: |
extra_hosts
添加主机名映射,类似于--add-host
1 | extra_hosts: |
在容器中的/etc/hosts
中会产生如下内容
1 | 162.242.195.82 somehost |
healthcheck
new in v2.1 运行一个检查,来判断该容器是否健康
1 | healthcheck: |
test写法,如果是列表,则第一项只能为NONE
,CMD
,CMD-SHELL
,如果在字符串,则默认CMD-SHELL
执行
1 | # Hit the local web app |
若要禁用Dockerfile中设置的健康检查,则可行的2种格式如下:
1 | healthcheck: |
image
指定容器的运行镜像,格式为respository/tag
或者为部分IMAGE ID
1 | image: redis |
如果image不存在,若没有build,则会自动pull镜像,若有build,则会去build镜像.
isolation
指定容器的隔离技术,Linux下唯一支持的值为defalut
,Windows下支持default
,process
,hyperv
.
labels
指定容器的标签
1 | labels: |
links
指定了服务名称,或者服务名称:别名.这样容器中就可以通过别名来访问其他容器了.
1 | web: |
logging
设置容器的log配置
1 | logging: |
driver
:指定了日志设备,包括json-file
(default),syslog
,none
1 | options: |
network_mode: “bridge”
1 | network_mode: "host" |
networks
1 | services: |
aliases
主机名的别名,网络内的容器既可以通过服务名访问,也可以通过别名访问.一个服务可以有很多别名.
1 | services: |
1 | version: '2' |
driver
:单主机为bridge
,swarm为overlay
bridge
Introductionoverlay
Introduction
driver_opts
enable_ipv6
ipam
driver
:自定义IPAM驱动config
:0个或更多的配置块subnet
internal
labels
external
ipv4_address,ipv6_address
指定容器的静态ip地址
1 | version: '2.1' |
pid
1 | pid: "host" |
使得PID模式为主机PID模式,使得容器和操作系统之间通过PID 地址空间进行共享.
ports
1 | ports: |
long syntax 是v3.2新增的
target
:容器内端口published
:主机端口protocol
:tcp
orudp
mode
:host
oringress
secrets
1 | version: "3.1" |
secrets文件将被挂载到容器中的/run/secrets/<secret_name>
.other_secrets指的是通过其他方式定义的secrets,比如docker secrets create.
1 | version: "3.1" |
security_opt
1 | security_opt: |
stop_grace_period
1 | stop_grace_period: 1s |
默认10s
stop_signal
默认为SIGTERM
1 | stop_signal: SIGUSR1 |
sysctls
容器内的内核参数
1 | sysctls: |
ulimits
覆盖容器内默认的ulimits
1 | ulimits: |
userns_mode
1 | userns_mode: "host" |
volumes
1 | volumes: |
1 | version: "3" |
driver
driver-opts
external
:设置为true
,则标志该卷已经在Compose外创建,docker-compose
不会创建之,若不存在,则会报错.labels
long syntax in v3.2
1 | volumes: |
restart
1 | restart: "no" |
domainname, hostname, ipc, mac_address, privileged, read_only, shm_size, stdin_open, tty, user, working_dir
1 | user: postgresql |