1、.yml模板文件
默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。
version: '2' services: web: image: dockercloud/hello-world ports: - 8080 networks: - front-tier - back-tier redis: image: redis links: - web networks: - back-tier lb: image: dockercloud/haproxy ports: - 80:80 links: - web networks: - front-tier - back-tier volumes: - /var/run/docker.sock:/var/run/docker.sock networks: front-tier: driver: bridge back-tier: driver: bridge
注意:每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile文件)等来自动构建生成镜像。另外Dockerfile文件中设置的选项(如,CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中重复设置。
2、build
指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。Docker Compose 将会利用它自动构建这个镜像,然后使用这个镜像。如下,
version: '3'
services:
webapp:
build: ./dir
可使用 context 指令指定 Dockerfile 所在文件夹的路径。
使用 dockerfile 指令指定 Dockerfile 文件名。
使用 arg 指令指定构建镜像时的变量。如下,
version: '3' services: webapp: build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1
使用 cache_from 指定构建镜像的缓存,如下,
build:
context: .
cache_from:
- alpine:latest
- corp/web_app:3.14
3、cap_add、cap_drop
添加或删除容器拥有的宿主机的内核功能。
cap_add:
- ALL # 开启全部权限
cap_drop:
- SYS_PTRACE # 关闭 ptrace权限
4、cgroup_parent
为容器指定父 cgroup 组,代表将继承该组的资源限制。
例如, cgroup 组名称为 cgroups_cjavapy
cgroup_parent: m-executor-cjavapy
5、command
覆盖容器启动的默认命令。
例如,
command: ["bundle", "exec", "thin", "-p", "3000"]
6、container_name
指定自定义容器名称,而不是生成的默认名称。
container_name: cjavapy-container
7、depends_on
设置依赖关系,以依赖性顺序启动服务。
例如,
version: "3.7"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
先启动 db 和 redis ,然后才启动 web
8、devices
指定设备映射关系。
例如,
devices: - "/dev/ttyUSB1:/dev/ttyUSB0"
9、dns
自定义 DNS 服务器,可以是单个值或列表的多个值,如下,
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
10、dns_search
定义 DNS 搜索域。可以是单个值或列表,如下,
dns_search: example.com
dns_search:
- dc1.example.com
- dc2.example.com
11、entrypoint
覆盖容器默认的 entrypoint。
例如,
entrypoint: /tmp/entrypoint.sh
或者
entrypoint:
- python
- -d
- -d
- memory_limit=-1
12、env_file
从文件添加环境变量。可以是单个值或列表的多个值。
例如,
env_file: .env
或者
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
13、environment
添加环境变量。可使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True
或 False
。
例如,
environment:
MY_ENV: development
SHOW: 'true'
14、expose
暴露端口,但不映射到宿主机,只被连接的服务访问,仅可以指定内部端口为参数,
例如,
expose:
- "3000"
- "8000"
15、extra_hosts
添加主机名映射。相当于 docker client --add-host
。
例如,
extra_hosts:
- "myhost:192.168.31.14"
- "webhost:170.31.12.33"
注意:设置会在服务容器内部中的 /etc/hosts 创建一个具有 ip 地址和主机名的映射关系
16、image
指定容器运行的镜像。可用格式如下,
image: redis
image: ubuntu:14.04
image: cjavapy/nginx
image: example-registry.com:4000/postgresql
image: acsb44fd # 镜像id
17、logging
服务的日志记录配置。driver指定服务容器的日志记录驱动程序,默认值为json-file
。有以下三个选项:
driver: "json-file"
driver: "syslog"
driver: "none"
仅在使用json-file
时,可用以下参数,限制日志得数量和大小:
logging:
driver: json-file
options:
max-size: "200k" # 单个文件大小为200k
max-file: "10" # 最多10个文件
当达到文件限制上限,会自动删除旧的文件
使用syslog
,可用syslog-address
指定日志接收地址:
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.31.23:123"
18、network_mode
设置网络模式。
例如,
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
19、volumes
将宿主机的数据卷或文件挂载到容器里。
例如,
version: "3.7"
services:
db:
image: postgres:latest
volumes:
- "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
- "/localhost/data:/var/lib/postgresql/data"
20、tmpfs
挂载一个 tmpfs 文件系统到容器。
例如,
tmpfs: /run tmpfs: - /run - /tmp
21、env_file
从文件中获取环境变量,可以为单独的文件路径或列表。如果通过 docker-compose -f FILE
方式来指定 Compose 模板文件,则 env_file 中变量的路径会基于模板文件路径。
如果有变量名称与 environment 指令冲突,会以environment设置的为准。
例如,
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
22、healthcheck
通过命令检查容器是否健康运行。
例如,
healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 1m30s timeout: 10s retries: 3
23、labels
为容器添加 Docker 元数据(metadata)信息。
例如,
labels: com.cjavapy.description: "webapp" com.cjavapy.department: "dev" com.cjavapy.release: "rc4"
24、ports
暴露端口信息。
使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅指定容器的端口(宿主将会随机选择端口)。
例如,
ports:
- "5000"
- "8080:8080"
- "28744:22"
- "127.0.0.1:8081:8081"
25、secrets
存储敏感数据,例如, mysql 数据的密码。
例如,
version: "3.1" services: mysql: image: mysql environment: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password secrets: - db_root_password - my_other_secret secrets: my_secret: file: ./my_secret.txt my_other_secret: external: true
26、stop_signal
设置另一个信号来停止容器。在默认情况下使用的是 SIGTERM
停止容器。
例如,
stop_signal: SIGUSR1
27、sysctls
配置容器内核参数。
sysctls: net.core.somaxconn: 1024 net.ipv4.tcp_syncookies: 0 sysctls: - net.core.somaxconn=1024 - net.ipv4.tcp_syncookies=0
28、ulimits
指定容器的 ulimits 限制值。
指定最大进程数为 65535,指定文件句柄数为 20000(软限制,应用可修改,不能超过硬限制) 和 40000(系统硬限制,只能 root 用户提高)。
例如,
ulimits: nproc: 65535 nofile: soft: 20000 hard: 40000