非常教程

Docker 17参考手册

撰写 | Compose

版本2 | Version 2 (Compose)

参考和指导

这些主题描述 Compose 文件格式的第2版。

Compose 和 Docker 兼容性矩阵

有几种版本的 Compose 文件格式 - 1,2,2.x 和3.x 下面的表格是一个快速的样子。有关每个版本包含的内容以及如何升级的完整详细信息,请参阅关于版本和升级

此表显示哪些 Compose 文件版本支持特定的 Docker 版本。

Compose file format

Docker Engine release

3.3

17.06.0+

3.2

17.04.0+

3.1

1.13.1+

3.0

1.13.0+

2.3

17.06.0+

2.2

1.13.0+

2.1

1.12.0+

2.0

1.10.0+

1.0

1.9.1.+

除了表格中显示的 Compose 文件格式版本外,Compose 本身也处于发布日程安排中,如 Compose 发行版中所示,但文件格式版本不一定随每个发行版而增加。例如,Compose 文件格式3.0首先在 Compose 版本1.10.0中引入,并在随后的版本中逐步版本化。

服务配置参考

Compose 文件是一个定义服务,网络和卷的 YAML 文件。Compose 文件的默认路径是./docker-compose.yml

提示:您可以对此文件使用.yml.yaml扩展名。他们都工作。

容器定义包含到每个容器启动用于该服务,很像传递命令行参数来将被应用的配置docker run。同样,网络和卷的定义类似于docker network createdocker volume create

正如docker run在 Dockerfile 指定选项(例如,CMDEXPOSEVOLUMEENV)是默认的-你不需要再次指定它们docker-compose.yml

您可以使用类 Bash ${VARIABLE}语法在配置值中使用环境变量- 有关完整详细信息,请参阅变量替换。

本节包含版本2中服务定义所支持的所有配置选项的列表。

blkio_config

用于为此服务设置块 IO 限制的一组配置选项。

version: '2.2'
services:
  foo:
    image: busybox
    blkio_config:
      weight: 300
      weight_device:
        - path: /dev/sda
          weight: 400
      device_read_bps:
        - path: /dev/sdb
          rate: '12mb'
      device_read_iops:
        - path: /dev/sdb
          rate: 120
      device_write_bps:
        - path: /dev/sdb
          rate: '1024k'
      device_write_iops:
        - path: /dev/sdb
          rate: 30

device_read_bps, device_write_bps

为给定设备上的读/写操作设置每秒字节数限制。列表中的每个项目必须有两个键:

  • path,为受影响的设备定义符号路径
  • rate,可以是表示字节数的整数值,也可以是表示字节值的字符串。

device_read_iops, device_write_iops

为给定设备上的读/写操作设置每秒操作的限制。列表中的每个项目必须有两个键:

  • path,为受影响的设备定义符号路径
  • rate作为表示每秒允许的操作次数的整数值。

weight

修改分配给该服务的带宽相对于其他服务的比例。采用10到1000之间的整数值,其中500是默认值。

weight_device

微调设备的带宽分配。列表中的每个项目必须有两个键:

  • path,为受影响的设备定义符号路径
  • weight,一个10到1000之间的整数值

build

在构建时应用的配置选项。

build 可以指定为包含构建上下文的路径的字符串,也可以指定具有在上下文中指定的路径的对象,也可以指定 dockerfile 和 args。

build: ./dir

build:
  context: ./dir
  dockerfile: Dockerfile-alternate
  args:
    buildno: 1

如果指定image以及build,然后撰写的名称与内置的图像webapp和可选的tag规定image

build: ./dir
image: webapp:tag

这将产生一个名为webapp和标记的图像,由此tag构建而成./dir

context

版本2文件格式和在版本1中,只需使用 build。

可以是包含 Dockerfile 的目录的路径,也可以是到 git 存储库的 URL。

当提供的值是相对路径时,它被解释为相对于撰写文件的位置。这个目录也是发送到 Docker 守护进程的构建上下文。

撰写将使用生成的名称进行构建和标记,然后使用该图像。

build:
  context: ./dir

dockerfile

备用 Dockerfile。

撰写将使用替代文件来构建。还必须指定构建路径。

build:
  context: .
  dockerfile: Dockerfile-alternate

args

版本2文件格式。

添加构建参数,这些参数是仅在构建过程中可访问的环境变量。

首先,在 Dockerfile 中指定参数:

ARG buildno
ARG password

RUN echo "Build number: $buildno"
RUN script-requiring-password.sh "$password"

然后指定build键下的参数。您可以传递映射或列表:

build:
  context: .
  args:
    buildno: 1
    password: secret

build:
  context: .
  args:
    - buildno=1
    - password=secret

指定构建参数时可以省略该值,在这种情况下,构建时的值是 Compose 运行环境中的值。

args:
  - buildno
  - password

:YAML 布尔值(truefalseyesnoonoff)必须用引号括起来,这样分析器会将它们解释为字符串。

labels

添加了2.1版文件格式

使用 Docker 标签将元数据添加到生成的图像。您可以使用数组或字典。

建议您使用反向 DNS 标记来防止您的标签与其他软件使用的标签冲突。

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

在2.2版文件格式中添加

设置网络容器将RUN在构建期间连接到指令。

build:
  context: .
  network: host


build:
  context: .
  network: custom_network_1

target

在2.3版本文件格式中添加

根据定义的内部构建指定的舞台Dockerfile。有关详细信息,请参阅多阶段构建文档。

  build:
    context: .
    target: prod

cap_add, cap_drop

添加或删除容器功能。请参阅man 7 capabilities完整列表。

cap_add:
  - ALL

cap_drop:
  - NET_ADMIN
  - SYS_ADMIN

command

覆盖默认命令。

command: bundle exec thin -p 3000

该命令也可以是一个列表,方式类似于 dockerfile:

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

cgroup_parent

为容器指定一个可选的父 cgroup。

cgroup_parent: m-executor-abcd

container_name

指定一个自定义容器名称,而不是生成的默认名称。

container_name: my-web-container

由于 Docker 容器名称必须是唯一的,因此如果您指定了自定义名称,则无法将服务扩展到1个容器之外。试图这样做会导致错误。

devices

设备映射列表。使用与--device Docker 客户端创建选项相同的格式。

devices:
  - "/dev/ttyUSB0:/dev/ttyUSB0"

depends_on

版本2文件格式。

服务之间的快速依赖关系,这有两个影响:

  • docker-compose up将以依赖性顺序启动服务。在下面的例子中,db并且redis会在之前启动web
  • docker-compose up SERVICE将自动包含SERVICE依赖关系。在下面的例子中,docker-compose up web也会创建并启动dbredis

简单的例子:

version: '2'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

注意:在开始之前,depends_on不会等待dbredis“准备好” web- 直到它们开始。如果您需要等待服务准备就绪,请参阅控制启动顺序以了解有关此问题的更多信息以及解决此问题的策略。添加了2.1版文件格式。

运行状况检查表明,您希望依赖性在启动之前等待另一个容器“健康”(即其健康检查广告成功状态)。

例:

version: '2.1'
services:
  web:
    build: .
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
  redis:
    image: redis
  db:
    image: redis
    healthcheck:
      test: "exit 0"

在上面的例子中,Compose 将redis在开始之前等待服务启动(传统行为)和db服务健康web

有关补充信息,请参阅 healthcheck 部分。

dns

自定义 DNS 服务器。可以是单个值或列表。

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

dns_opt

要添加到容器的 resolv.conf 文件的自定义DNS选项列表。

dns_opt:
  - use-vc
  - no-tld-query

dns_search

自定义DNS搜索域。可以是单个值或列表。

dns_search: example.com
dns_search:
  - dc1.example.com
  - dc2.example.com

tmpfs

在容器内安装临时文件系统。可以是单个值或列表。

tmpfs: /run
tmpfs:
  - /run
  - /tmp

entrypoint

覆盖默认入口点。

entrypoint: /code/entrypoint.sh
入口点也可以是一个列表,类似于dockerfile:

entrypoint:
    - php
    - -d
    - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
    - -d
    - memory_limit=-1
    - vendor/bin/phpunit

注意:设置入口点将覆盖使用ENTRYPOINT Dockerfile指令在服务图像上设置的任何默认入口点,并清除图像上的任何默认命令 - 这意味着如果Dockerfile中有CMD指令,它将被忽略。

env_file

Add environment variables from a file. Can be a single value or a list.

如果已使用 docker-compose -f FILE 指定了 Compose 文件,则 env_file 中的路径相对于该文件所在的目录

在环境部分中声明的环境变量会覆盖这些值 - 即使这些值为空或未定义,这也适用。

env_file: .env

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

Compose 期望 env 文件中的每一行都是 VAR = VAL 格式。以#开头的行(即注释)将被忽略,空行也将被忽略。

# Set Rails/Rack environment
RACK_ENV=development

注意:如果您的服务指定了构建选项,则在构建期间,环境文件中定义的变量将不会自动显示。使用 build 的 args 子选项来定义构建时环境变量。

VAL 的值按原样使用,不进行修改。例如,如果值由引号括起(通常是 shell 变量的情况),则引号将包含在传递给 Compose 的值中。

请记住,列表中文件的顺序对于确定分配给多次显示的变量的值非常重要。列表中的文件从上到下进行处理。对于文件 a.env 中指定的相同变量,并在文件 b.env 中指定了不同的值,如果 b.env 列在下面(后面),则 b.env 中的值表示。例如,在 docker_compose.yml 中给出以下声明:

services:
  some-service:
    env_file:
      - a.env
      - b.env

以下文件:

# a.env
VAR=1

# b.env
VAR=hello

$VAR will be hello.

环境

添加环境变量。您可以使用数组或字典。任何布尔值; true,false,yes no,都需要用引号括起来,以确保YML 解析器不会将它们转换为 True 或 False 。

仅具有键的环境变量将解析为计算机正在运行的计算机上的值,这对于特定于机密或特定于主机的值很有用。

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET

注意:如果您的服务指定了构建选项,则在构建期间,环境中定义的变量将不会自动显示。使用 build 的args 子选项来定义构建时环境变量。

显示

显示端口而不将它们发布到主机 - 它们只能被链接服务访问。只能指定内部端口。

expose:
 - "3000"
 - "8000"

扩展

在当前文件或其他文件中扩展另一个服务,可选地覆盖配置。

您可以将任何服务上的扩展与其他配置键一起使用。 extends 值必须是使用所需服务和可选文件键定义的字典。

extends:
  file: common.yml
  service: webapp

service 是要扩展的服务的名称,例如Web或数据库。该文件是定义该服务的Compose配置文件的位置

如果你省略 file Compose 在当前文件中查找服务配置。file 值可以是绝对路径或相对路径。如果指定相对路径,Compose 会将其视为相对于当前文件的位置。

可以扩展自己扩展另一个服务。你可以无限期地延长。 Compose不支持循环引用,如果遇到,则docker-compose会返回错误。

更多关于 extends,详见扩展的文件。

外部链接

链接到此 docker-compose.yml 之外或甚至在 Compose 之外的容器,尤其是对于提供共享或公共服务的容器。在指定容器名称和链接别名(CONTAINER:ALIAS)时,external_links 遵循类似于链接的语义。

external_links:
 - redis_1
 - project_db_1:mysql
 - project_db_1:postgresql

注意:对于版本2文件格式,外部创建的容器必须至少连接到与链接到它们的服务相同的网络之一。

额外主机

添加主机名映射。使用与 docker client --add-host 参数相同的值。

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

将在此服务的容器内的 / etc / hosts 中创建具有 ip 地址和主机名的条目,例如:

162.242.195.82  somehost
50.31.209.229   otherhost

组添加

指定容器内的用户将成为其成员的其他组(按名称或编号)。组必须存在于要添加的容器和主机系统中。一个有用的例子是当多个容器(作为不同用户运行)需要在主机系统上读取或写入相同文件时。该文件可由所有容器共享的组拥有,并在 group_add 中指定。有关更多详细信息,请参阅 Docker 文档。

完整的例子:

version: '2'
services:
  myservice:
    image: alpine
    group_add:
      - mail

在创建的容器中运行 id 将显示用户属于邮件组,如果未使用 group_add,则不会出现这种情况。

“健康”检查

Version 2.1 file format and up.

配置运行的检查以确定此服务的容器是否“健康”。有关 healthchecks 如何工作的详细信息,请参阅HEALTHCHECK Dockerfile 指令的文档。

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 1m30s
  timeout: 10s
  retries: 3
  start_period: 40s

interval, timeoutstart_period 指定为持续时间,

test 必须是字符串或列表。如果是列表,则第一项必须是 NONE,CMD 或 CMD-SHELL 。如果它是一个字符串,它相当于指定 CMD-SHELL 后跟该字符串。

# Hit the local web app
test: ["CMD", "curl", "-f", "http://localhost"]

# As above, but wrapped in /bin/sh. Both forms below are equivalent.
test: ["CMD-SHELL", "curl -f http://localhost && echo 'cool, it works'"]
test: curl -f https://localhost && echo 'cool, it works'

要禁用图像设置的任何默认运行状况检查,可以使用 disable:true。这相当于指定 test:[“NONE”]。

healthcheck:
  disable: true

注意:start_period 选项是更新的功能,仅适用于2.3文件格式。

图像

指定图像以从中启动容器。可以是存储库/标记或部分图像 ID 。

image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd

如果图像不存在,Compose 尝试拉取它,除非您还指定了构建,在这种情况下,它使用指定的选项构建它并使用指定的标记对其进行标记。

init

在2.2版文件格式中添加。

在容器内运行 init,转发信号并重新获取进程。设置布尔值以使用默认 init,或指定自定义路径的路径。

version: '2.2'
services:
  web:
    image: alpine:latest
    init: true


version: '2.2'
services:
  web:
    image: alpine:latest
    init: /usr/libexec/docker-init

独立

在2.1版本格式中添加

指定容器的隔离技术。在 Linux 上,唯一受支持的值是 default 。在 Windows 上,可接受的值是default,process 和 hyperv。有关详细信息,请参阅 Docker Engine 文档。

标签

使用 Docker 标签向容器添加元数据。您可以使用数组或字典。

建议您使用反向 DNS 表示法来防止标签与其他软件使用的标签冲突。

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

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

链接

链接到另一个服务中的容器。指定服务名称和链接别名(“SERVICE:ALIAS”),或仅指定服务名称。

web:
  links:
   - "db"
   - "db:database"
   - "redis"

链接服务的容器可以在与别名相同的主机名上访问,如果未指定别名,则可以访问服务名称。

链接还以与 depends_on 相同的方式表示服务之间的依赖关系,因此它们确定服务启动的顺序。

注意:如果同时定义链接和网络,则它们之间具有链接的服务必须共享至少一个共同的网络才能进行通信。我们建议使用网络。

记录

记录服务的配置。

logging:
  driver: syslog
  options:
    syslog-address: "tcp://192.168.0.42:123"

driver 程序名称指定服务容器的日志记录驱动程序,与 docker run 的--log-driver 选项一样(此处记录)。

默认值为json-file。

driver: "json-file"
driver: "syslog"
driver: "none"

注意:只有json文件和日志驱动程序驱动程序才能直接从 docker-compose up 和 docker-compose日志中获取日志。使用任何其他驱动程序将不会打印任何日志。

使用 options 键为日志记录驱动程序指定日志记录选项,与docker run 的--log-opt 选项一样。

记录选项是键值对。 syslog 选项的一个示例:

driver: "syslog"
options:
  syslog-address: "tcp://192.168.0.42:123"

网络模型

版本2文件格式及以上。替换版本1网络选项。

网络模式。使用与 docker client --net 参数相同的值,以及特殊表单服务:[service name]。

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

网络

版本2文件格式及以上。替换版本1网络选项。

要加入的网络,引用顶级网络密钥下的条目。

services:
  some-service:
    networks:
     - some-network
     - other-network

别名

网络上此服务的别名(备用主机名)。同一网络上的其他容器可以使用服务名称或此别名连接到其中一个服务的容器

由于 aliases 是网络范围的,因此相同的服务可以在不同的网络上具有不同的别名。

注意:网络范围的别名可以由多个容器共享,甚至可以由多个服务共享。如果是,则无法保证名称将解析为哪个容器。

一般格式如下所示。

services:
  some-service:
    networks:
      some-network:
        aliases:
         - alias1
         - alias3
      other-network:
        aliases:
         - alias2

在下面的示例中,提供了三个服务(web,worker 和 db),以及两个网络(new 和 legacy)。可以在新网络上的主机名 db 或 database 以及旧网络上的 db 或 mysql 中访问 db 服务。

version: '2'

services:
  web:
    build: ./web
    networks:
      - new

  worker:
    build: ./worker
    networks:
      - legacy

  db:
    image: mysql
    networks:
      new:
        aliases:
          - database
      legacy:
        aliases:
          - mysql

networks:
  new:
  legacy:

ipv4_address, ipv6_address

在加入网络时为此服务指定容器的静态IP地址。

顶级网络部分中的相应网络配置必须具有包含子网和网关配置的 ipam 块,覆盖每个静态地址。如果需要IPv6 寻址,则必须设置 enable_ipv6 选项。

实例:

version: '2.1'

services:
  app:
    image: busybox
    command: ifconfig
    networks:
      app_net:
        ipv4_address: 172.16.238.10
        ipv6_address: 2001:3984:3989::10

networks:
  app_net:
    driver: bridge
    enable_ipv6: true
    ipam:
      driver: default
      config:
      - subnet: 172.16.238.0/24
        gateway: 172.16.238.1
      - subnet: 2001:3984:3989::/64
        gateway: 2001:3984:3989::1

link_local_ips

在2.1版文件格式中添加。

指定链接本地IP列表。链路本地 IP 是属于众所周知的子网的特殊 IP,由运营商完全管理,通常取决于部署它们的架构。因此它们不受 docker(IPAM驱动程序)管理。

示例网页:

version: '2.1'
services:
  app:
    image: busybox
    command: top
    networks:
      app_net:
        link_local_ips:
          - 57.123.22.11
          - 57.123.22.13
networks:
  app_net:
    driver: bridge

pid

pid: "host"
pid: "container:custom_container_1"
pid: "service:foobar"

如果设置为以下形式之一:container:<container_name>,service:<service_name>,则服务将共享指定容器或服务的 PID 地址空间。

如果设置为 “host”,则服务的 PID 模式将是主机 PID 模式。这打开了容器和主机操作系统之间的 PID 地址空间共享。使用此标志启动的容器将能够访问和操作裸机计算机命名空间中的其他容器,反之亦然。

注意:service:和container:forms需要2.1或更高版本

pids_limit

在2.1版本格式中添加

调整容器的 PID 限制。设置为 -1 表示无限制的 PID。

pids_limit: 10

ports

暴露端口。指定两个端口(HOST:CONTAINER),或仅指定容器端口(将选择随机主机端口)。

注意:在使用 HOST:CONTAINER 格式映射端口时,使用低于 60 的容器端口时可能会遇到错误的结果,因为 YAML 将以 xx:yy 格式解析数字为 sexagesimal(基数为60)。因此,我们建议始终将端口映射明确指定为字符串。

ports:
 - "3000"
 - "3000-3005"
 - "8000:8000"
 - "9090-9091:8080-8081"
 - "49100:22"
 - "127.0.0.1:8001:8001"
 - "127.0.0.1:5000-5010:5000-5010"
 - "6060:6060/udp"

security_opt

覆盖每个容器的默认标签方案。

security_opt:
  - label:user:USER
  - label:role:ROLE

stop_grace_period

指定在发送 SIGKILL 之前,如果它未处理 SIGTERM(或使用 stop_signal 指定了任何停止信号),则尝试停止容器时要等待多长时间。指定为持续时间。

stop_grace_period: 1s
stop_grace_period: 1m30s

默认情况下,在发送 SIGKILL 之前,stop 会等待10秒钟以使容器退出。

停止信号

设置替代信号以停止容器。默认情况下,stop 使用 SIGTERM。使用 stop_signal 设置替代信号将导致停止发送该信号。

stop_signal: SIGUSR1

storage_opt

在2.1版文件格式中添加

为此服务设置存储驱动程序选项。

storage_opt:
  size: '1G'

sysctls

在版本2.1格式中添加

要在容器中设置的内核参数。您可以使用数组或字典。

sysctls:
  net.core.somaxconn: 1024
  net.ipv4.tcp_syncookies: 0

sysctls:
  - net.core.somaxconn=1024
  - net.ipv4.tcp_syncookies=0

ulimits

覆盖容器的默认 ulimits 。您可以将单个限制指定为整数,也可以将软/硬限制指定为映射。

ulimits:
  nproc: 65535
  nofile:
    soft: 20000
    hard: 40000

userns_mode

在版本2.1的格式中添加

userns_mode: "host"

如果 Docker 守护程序配置了用户名称空间,则禁用此服务的用户名称空间。有关更多信息,请参阅dockerd 。

volumes, volume_driver

装载路径或命名卷,可选择指定主机上的路径(HOST:CONTAINER)或访问模式(HOST:CONTAINER:ro)。对于版本2文件,需要使用顶级卷键指定命名卷。

您可以在主机上安装相对路径,该路径将相对于正在使用的Compose配置文件的目录进行扩展。相对路径应始终以. 或者 ... 开始。

volumes:
  # Just specify a path and let the Engine create a volume
  - /var/lib/mysql

  # Specify an absolute path mapping
  - /opt/data:/var/lib/mysql

  # Path on the host, relative to the Compose file
  - ./cache:/tmp/cache

  # User-relative path
  - ~/configs:/etc/configs/:ro

  # Named volume
  - datavolume:/var/lib/mysql

如果不使用主机路径,则可以指定 volume_driver 。

volume_driver: mydriver

有几点需要注意,具体取决于您使用的 Compose 文件版本:

您可以在版本2文件中使用 volume_driver,但它仅适用于匿名卷(在映像中指定的卷,或在没有显式命名卷或主机路径的volumes下指定)。要为命名卷配置驱动程序,请使用顶级 volumes 选项中条目下的驱动程序密钥。

对于版本1文件,命名卷和容器卷都使用指定的驱动程序。根据上面对匿名卷的引用,这在版本2中发生了变化。

如果您还指定了 volume_driver,则不会进行路径扩展。例如,如果指定 ./foo:/data 的映射,则 ./foo 部分将直接传递给卷驱动程序而不进行扩展。

有关更多信息,请参阅 Docker 卷和卷插件

volumes_from

从另一个服务或容器挂载所有卷,可选择指定只读访问(ro)或读写(rw)。如果未指定访问级别,则将使用读写。

volumes_from:
 - service_name
 - service_name:ro
 - container:container_name
 - container:container_name:rw

Notes

  • The container:...格式仅支持版本2文件格式。 在版本1中,您可以使用容器名称而不将其标记为:

- `service_name`
- `service_name:ro`
- `container_name`
- `container_name:rw`

重启

no 是默认的重启策略,在任何情况下都不会重启容器。指定 always 时,容器始终重新启动。如果退出代码指示出现故障错误,则 on-failure 策略将重新启动容器。

  - restart: no
  - restart: always
  - restart: on-failure

cpu_count,

cpu_percent,

cpu_shares,

cpu_quota,

cpus,

cpuset,

domainname,

hostname,

ipc,

mac_address,

mem_limit,

memswap_limit,

mem_swappiness,

mem_reservation,

oom_score_adj,

privileged,

read_only,

shm_size,

stdin_open,

tty,

user,

working_dir

每个都是单个值,类似于 docker run 对应物。

注意:2.2版中添加了以下选项: cpu_count, cpu_percent, cpus.

cpu_count: 2
cpu_percent: 50
cpus: 0.5
cpu_shares: 73
cpu_quota: 50000
cpuset: 0,1

user: postgresql
working_dir: /code

domainname: foo.com
hostname: foo
ipc: host
mac_address: 02:42:ac:11:65:43

mem_limit: 1000000000
memswap_limit: 2000000000
mem_reservation: 512m
privileged: true

oom_score_adj: 500

read_only: true
shm_size: 64M
stdin_open: true
tty: true

指定持续时间

某些配置选项(例如healthcheck的intervaltimeout 子选项将持续时间作为字符串接受,其格式如下所示

2.5s
10s
1m30s
2h32m
5h34m56s

支持的单元是e us, ms, s, mh.

指定字节值

某些配置选项(例如 blkio_config 的 device_read_bps 子选项)接受字节值作为字符串,格式如下所示:

2b
1024kb
2048k
300m
1gb

支持的单位是 b,k,m 和 g,以及它们的替代符号 kb,mb 和 gb。请注意,目前不支持十进制值。

卷配置参考

虽然可以动态声明卷作为服务声明的一部分,但本部分允许您创建可以跨多个服务重用的命名卷(不依赖于volumes_from),并且可以使用 docker 命令行轻松检索和检查或 API 。有关更多信息,请参阅 docker volume 子命令文档。

以下是双服务设置的示例,其中数据库的数据目录与另一个服务作为卷共享,以便可以定期备份:

version: "2.2"

services:
  db:
    image: db
    volumes:
      - data-volume:/var/lib/db
  backup:
    image: backup-service
    volumes:
      - data-volume:/var/lib/backup/data

volumes:
  data-volume:

顶级 volumes 键下的条目可以为空,在这种情况下,它将使用引擎配置的默认驱动程序(在大多数情况下,这是 local 驱动程序)。 (可选)您可以使用以下键进行配置:

驱动

指定应为此卷使用哪个卷驱动程序。默认为Docker Engine配置使用的任何驱动程序,在大多数情况下是 local 。如果驱动程序不可用,则当 docker-compose 尝试创建卷时,Engine 将返回错误。

 driver: foobar

driver_opts

将选项列表指定为键值对,以传递给此卷的驱动程序。这些选项取决于驱动程序 - 请参阅驱动程序的文档以获取更多信息。可选的。

 driver_opts:
   foo: "bar"
   baz: 1

外部

如果设置为 true,则指定已在 Compose 之外创建此卷。 docker-compose up 不会尝试创建它,如果它不存在则会引发错误。

external 不能与其他卷配置键(driver,driver_opts)一起使用。

在下面的示例中,Compose 不会尝试创建名为 [projectname] _data 的卷,而是查找仅称为 data 的现有卷,并将其挂载到 db 服务的容器中。

version: '2'

services:
  db:
    image: postgres
    volumes:
      - data:/var/lib/postgresql/data

volumes:
  data:
    external: true

您还可以在 Compose 文件中与用于引用它的名称分别指定卷的名称:

volumes:
  data:
    external:
      name: actual-name-of-volume

注意:在较新版本的 Compose 中,不推荐使用 external.name 属性,而只是使用 name 属性。

标签

在2.1版文件格式中添加。

使用 Docker 标签向容器添加元数据。您可以使用数组或字典。

建议您使用反向DNS表示法来防止标签与其他软件使用的标签冲突。

labels:
  com.example.description: "Database volume"
  com.example.department: "IT/Ops"
  com.example.label-with-empty-value: ""

labels:
  - "com.example.description=Database volume"
  - "com.example.department=IT/Ops"
  - "com.example.label-with-empty-value"

命名

在2.1版本格式中添加,

为此卷设置自定义名称。

version: '2.1'
volumes:
  data:
    name: my-app-data

它还可以与 external 属性结合使用:

version: '2.1'
volumes:
  data:
    external: true
    name: my-app-data

网络配置参考

顶级网络密钥允许您指定要创建的网络。有关 Compose 使用 Docker 网络功能的完整说明,请参阅网络指南。

驱动

指定应该为此网络使用哪个驱动程序。

默认驱动程序取决于您正在使用的 Docker Engine 的配置方式,但在大多数情况下,它将在单个主机上 birdge 并 overlay 在Swarm上。

如果驱动程序不可用,Docker Engine 将返回错误。

driver: overlay

driver_opts

将选项列表指定为键值对,以传递给此网络的驱动程序。这些选项取决于驱动程序 - 请参阅驱动程序的文档以获取更多信息。可选的。

  driver_opts:
    foo: "bar"
    baz: 1

enable_ipv6

在2.1版文件格式中添加。

在此网络上启用 IPv6 网络。

ipam

指定自定义 IPAM 配置。这是一个具有多个属性的对象,每个属性都是可选的:

driver:自定义 IPAM 驱动程序,而不是默认值。

config:包含零个或多个配置块的列表,每个配置块包含以下任意一个键:

subnet:CIDR 格式的子网,代表网段

ip_range:分配容器IP的IP范围

gateway:主子网的 IPv4 或 IPv6 网关

aux_addresses:网络驱动程序使用的辅助 IPv4 或 IPv6 地址,作为从主机名到IP的映射

options:特定于驱动程序的选项作为键值映射。

完整的例子:

ipam:
  driver: default
  config:
    - subnet: 172.28.0.0/16
      ip_range: 172.28.5.0/24
      gateway: 172.28.5.254
      aux_addresses:
        host1: 172.28.1.5
        host2: 172.28.1.6
        host3: 172.28.1.7
  options:
    foo: bar
    baz: "0"

内部

默认情况下,Docker 还将桥接网络连接到它以提供外部连接。如果要创建外部隔离的覆盖网络,可以将此选项设置为 true 。

标签

在版本2.1的格式中添加

使用 Docker 标签向容器添加元数据。您可以使用数组或字典。

建议您使用反向DNS表示法来防止标签与其他软件使用的标签冲突。

labels:
  com.example.description: "Financial transaction network"
  com.example.department: "Finance"
  com.example.label-with-empty-value: ""

labels:
  - "com.example.description=Financial transaction network"
  - "com.example.department=Finance"
  - "com.example.label-with-empty-value"

外部

如果设置为 true,则指定已在 Compose 之外创建此网络。 docker-compose up 不会尝试创建它,如果它不存在则会引发错误。

external 不能与其他网络配置键(driver,driver_opts,group_add,ipam,internal)一起使用。

在下面的示例中,proxy 是通往外部世界的网关。而不是尝试创建一个名为 [projectname] _outside 的网络,Compose 将寻找一个简单地在外面调用的现有网络,并将代理服务的容器连接到它。

version: '2'

services:
  proxy:
    build: ./proxy
    networks:
      - outside
      - default
  app:
    build: ./app
    networks:
      - default

networks:
  outside:
    external: true

您还可以在 Compose 文件中与用于引用它的名称分开指定网络名称:

networks:
  outside:
    external:
      name: actual-name-of-network

变量替换

您的配置选项可以包含环境变量。 Compose 使用运行 docker-compose 的 shell 环境中的变量值。例如,假设 shell 包含 POSTGRES_VERSION = 9.3并且您提供此配置:

db:
  image: "postgres:${POSTGRES_VERSION}"

当您使用此配置运行 docker-compose 时,Compose 会在 shell 中查找 POSTGRES_VERSION 环境变量并将其值替换为。对于此示例,Compose 会在运行配置之前将映像解析为 postgres:9.3。

如果未设置环境变量,请使用空字符串 Compose 替换。在上面的示例中,如果未设置POSTGRES_VERSION,则 image 选项的值为 postgres:。

您可以使用 .env 文件为环境变量设置默认值,Compose 将自动查找该文件。在 shell 环境中设置的值将覆盖 .env 文件中设置的值。

同时支持$VARIABLE${VARIABLE}语法。此外,使用2.1文件格式时,可以使用典型的 shell 语法提供内联默认值:

  • ${VARIABLE:-default} 如果在环境中未设置 VARIABLE 或为空,则将评估为default。
  • ${VARIABLE-default} 只有在环境中未设置 VARIABLE 时才会评估为default。

不支持其他扩展 shell 样式功能,例如 $ {VARIABLE / foo / bar} 。

当配置需要文字美元符号时,您可以使用 $$(双美元符号)。这也可以防止 Compose 插值,因此 $$ 允许您引用不希望由 Compose 处理的环境变量。

web:
  build: .
  command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"

如果您忘记并使用单个美元符号($),Compose 会将该值解释为环境变量,并会警告您:

The VAR_NOT_INTERPOLATED_BY_COMPOSE is not set. Substituting an empty string.

撰写文档

  • User guide
  • Installing Compose
  • Compose file versions and upgrading
  • Get started with Django
  • Get started with Rails
  • Get started with WordPress
  • Command line reference

fig, composition, compose version 3, docker

撰写 | Compose相关

1.关于版本和升级 | About versions and upgrading (Compose)
2.ASP.NET Core + SQL Server on Linux (Compose)
3.CLI环境变量 | CLI environment variables (Compose)
4.命令行完成 | Command-line completion (Compose)
5.组成 | Compose
6.组合命令行参考 | Compose command-line reference
7.控制启动顺序 | Control startup order (Compose)
8.Django and PostgreSQL (Compose)
9.Docker堆栈和分布式应用程序包 | Docker stacks and distributed application bundles (Compose)
10.docker-compose构建 | docker-compose build
11.docker-compose 束 | docker-compose bundle
12.docker-compose配置 | docker-compose config
13.docker-compose创建 | docker-compose create
14.docker-compose down
15.docker-compose事件 | docker-compose events
16.docker-compose exec
17.docker-compose助手 | docker-compose help
18.docker-compose图像 | docker-compose images
19.docker-compose kill
20.docker-compose logs
21.docker-compose暂停 | docker-compose pause
22.docker-compose port
23.docker-compose ps
24.docker-compose pull
25.docker-compose push
26.docker-compose重启 | docker-compose restart
27.docker-compose rm
28.docker-compose运行 | docker-compose run
29.docker-compose 规模 | docker-compose scale
30.docker-compose开始 | docker-compose start
31.docker-compose结束 | docker-compose stop
32.docker-compose顶部 | docker-compose top
33.docker-compose 取消暂停 | docker-compose unpause
34.docker-compose up
35.环境文件 | Environment file (Compose)
36.Compose中的环境变量 | Environment variables in Compose
37.Compose中的扩展服务 | Extend services in Compose
38.常见问题 | Frequently asked questions (Compose)
39.开始 | Getting started (Compose)
40.安装Compose | Install Compose
41.链接环境变量(不建议使用) | Link environment variables (deprecated) (Compose)
42.Compose网络 | Networking in Compose
43.Docker Compose总览 | Overview of Docker Compose
44. docker-compose CLI总览 | Overview of docker-compose CLI
45.快速开始:Compose和WordPress | Quickstart: Compose and WordPress
46.Rails and PostgreSQL (Compose)
47.Compose的简单应用 | Sample apps with Compose
48.Compose在产品中的使用 | Using Compose in production
49.Using Compose with Swarm
50.版本1 | Version 1 (Compose)
51.版本3 | Version 3 (Compose)
Docker 17

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

主页 https://docker.com/
源码 https://github.com/docker/docker
版本 17
发布版本 17.06