指令
一、version
version
指定本 yml
依从的 compose
哪个版本制定的。
二、services
services
容器
三、build
build
指定为构建镜像上下文路径
语法
services:
serviceName1:
build:
context: .
dockerfile: Dockerfile // 基于当前目录下的 Dockerfile 构建镜像
四、cap_add,cap_drop
cap_add,cap_drop
添加或删除容器拥有的宿主机的内核功能。
五、cgroup_parent
cgroup_parent
为容器指定父 cgroup
组,意味着将继承该组的资源限制。
六、ports
ports
相当于 docker run -p
中的 -p
语法
services:
serviceName1:
ports:
- 8080:80 // 将容器的 80 端口转发映射到宿主机的 8080 端口, 同 docker run -p 8080:80
七、command
command
覆盖容器启动的默认命令。
语法
services:
serviceName1:
image: xxx:Tag
command: xxxx xxx
八、container_name
container_name
指定自定义容器名称,而不是生成的默认名称。
语法
services:
serviceName1:
image: [镜像名称:Tag]
container_name: xxx
九、depends_on
depends_on
设置依赖关系。
十、deploy
deploy
指定与服务的部署和运行有关的配置。只在 swarm 模式下才会有用。
十一、devices
devices
指定设备映射列表。
十二、dns
dns
自定义 DNS
服务器,可以是单个值或列表的多个值。
十三、dns_search
dns_search
自定义 DNS
搜索域。可以是单个值或列表。
十四、entrypoint
entrypoint
覆盖容器默认的 entrypoint
。
十五、env_file
env_file
从文件添加环境变量。可以是单个值或列表的多个值。
十六、environment
environment
添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML
解析器不会将其转换为 True
或 False
。
语法
services:
serviceName1:
image: [镜像名称:Tag]
container_name: xxx
environment:
- xxx1=yyy1
- xxx2=yyy2
十七、expose
expose
暴露端口,但不映射到宿主机,只被连接的服务访问。
十八、extra_hosts
extra_hosts
添加主机名映射。类似 docker client --add-host
。
十九、healthcheck
healthcheck
用于检测 docker
服务是否健康运行。
语法
services:
serviceName1:
image: 镜像名称:[Tag]
container_name: xxx
healthcheck:
test: ["CMD","curl","-f","http://localhost"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
二十、image
image
指定容器运行的镜像。
语法
services:
serviceName1:
image: [镜像名称:Tag]
container_name: xxx
二十一、logging
logging
服务的日志记录配置。
二十二、network_mode
network_mode
设置网络模式。
二十三、restart
restart
二十四、secrets
secrets
存储敏感数据
二十五、security_opt
security_opt
修改容器默认的 schema
标签。
二十六、stop_grace_period
stop_grace_period
指定在容器无法处理 SIGTERM
(或者任何 stop_signal
的信号),等待多久后发送 SIGKILL
信号关闭容器。
二十七、stop_signal
stop_signal
设置停止容器的替代信号。默认情况下使用 SIGTERM
。
二十八、sysctls
sysctls
设置容器中的内核参数,可以使用数组或字典格式。
二十九、tmpfs
tmpfs
在容器内安装一个临时文件系统。可以是单个值或列表的多个值。
三十、ulimits
ulimits
覆盖容器默认的 ulimit
。
三十一、volumes
volumes
将主机的数据卷或者文件挂载到容器里。
语法
services:
serviceName1:
volumes:
- ~/docker/xx1:/zz1 // 将容器 zz1 目录挂载到宿主机 ~/docker/xx1 ,相当于 docker run -v ~/docker/xx1:/zz1
- ~/docker/xx2:/zz2 // 将容器 zz2 目录挂载到宿主机 ~/docker/xx2 ,相当于 docker run -v ~/docker/xx2:/zz2
services:
serviceName1:
……
serviceName2:
……
volumes:
……
三十二、networks
networks
语法
services:
serviceName1:
ports:
- xxxx:yyyy
networks:
- xxxx1 // 指定容器网络为 xxxx , 相当于 docker run --network xxxx
- xxxx2
networks:
xxxx1:
driver: bridge / default // 创建自定义网络 xxxx , 并指定网络模式为 bridge , 相当于 docker network create -d bridge xxxx
xxxx2:
ipam:
driver: bridge / default
config:
- subnet: 127.28.0.0/16
三十二、depends_on
depends_on
用来定义容器启动顺序
语法: 若 服务B
依赖于 服务A
, 那么 服务 A
必须先于 服务B
启动成功, 语法如下
services:
serviceA:
image: imageA:Tag
serviceB:
image: imageB:Tag
depends_on:
- serviceA // serviceA 启动成功后,启动B , 不管 serviceA 服务是否有效
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000"]
interval: 30s
timeout: 3s
retries: 3
serviceC:
image: imageC:Tag,
depends_on:
serviceB:
condition: service_healthy // 当 serviceB 服务处于 healthy 时, 才可以启动 serviceC