Docker Compose 文件文档v3

Compose版本与Docker版本兼容表

Compose文件版本Docker 版本
3.819.03.0+
3.718.06.0+
3.618.02.0+
3.517.12.0+
3.417.09.0+
3.317.06.0+
3.217.04.0+
3.11.13.1+
3.01.13.0+
2.417.12.0+
2.317.06.0+
2.21.13.0+
2.11.12.0+
2.01.10.0+
1.01.9.1.+

docker-compose.yml 文件结构示例

version: "3.8"
services:

  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
networks:
  frontend:
  backend:

volumes:
  db-data:

Service 配置

YAML文件配置了三个节点,services,networks和volumes。默认的文件地址是./docker-compose.yml

配置文件的后缀可以是 .yml,也可以是 .yaml,两者都支持。

build

构建配置选项,指定构建目录。

version: "3.8"
services:
  webapp:
    build: ./dir

可以指定Dockerfile文件名,还可以带参数。

version: "3.8"
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1

构建的时候也可以指定镜像

build: ./dir
image: webapp:tag

CONTEXT

指定构建目录或仓库url

build:
  context: ./dir

DOCKERFILE

指定新的Dockerfile文件

build:
  context: .
  dockerfile: Dockerfile-alternate

ARGS

添加构建过程需要用到的环境变量参数

首先在Dockerfile中添加参数

ARG buildno
ARG gitcommithash
RUN echo "Build number: $buildno"
RUN echo "Based on commit: $gitcommithash"

然后在docker-compose.yml文件服务中添加参数,映射具体的参数值

build:
  context: .
  args:
    buildno: 1
    gitcommithash: cdc3b19
build:
  context: .
  args:
    - buildno=1
    - gitcommithash=cdc3b19

YAML 布尔值 ("true", "false", "yes", "no", "on", "off") 必须使用引号,当作字符串来进行传输.

CACHE_FROM

version 3.2 版本后添加

使用缓存的镜像列表

build:
  context: .
  cache_from:
    - alpine:latest
    - corp/web_app:3.14

LABELS

version 3.3 版本添加

使用Docker labels为生成的镜像添加元数据,可以使用数组或是字典。

build:
  context: .
  labels:
    com.example.description: "Accounting webapp"
    com.example.department: "Finance"
    com.example.label-with-empty-value: ""
build:
  context: .
  labels:
    - "com.example.description=Accounting webapp"
    - "com.example.department=Finance"
    - "com.example.label-with-empty-value"

NETWORK

version 3.4 版本添加

为构建时期的RUN指定设置网络连接。

build:
  context: .
  network: host
build:
  context: .
  network: custom_network_1

Use none to disable networking during build:

build:
  context: .
  network: none

SHM_SIZE

version 3.5 版本添加

设置构建容器/dev/shm分区的大小,可以使用字节整形值或字符串值设置大小。

build:
  context: .
  shm_size: '2gb'
build:
  context: .
  shm_size: 10000000

TARGET

version 3.4 版本添加

如果Dockerfile中有多个构建阶段,可使用TARGET来指定具体阶段。

build:
  context: .
  target: prod

cap_add, cap_drop

添加或删除容器功能。

cap_add:
  - ALL
cap_drop:
  - NET_ADMIN
  - SYS_ADMIN

cgroup_parent

为容器指定任意父容器组。

cgroup_parent: m-executor-abcd

command

覆盖默认命令

command: bundle exec thin -p 3000

可以是个列表,类似dockerfile文件中的CMD

command: ["bundle", "exec", "thin", "-p", "3000"]