Compose 文件是一个YAML文件,用于定义services、netword和volumes。
Compose 文件的默认路径为./docker-compose.yml(后缀为.yml和.yaml都可以)。

一个service配置将会运用到容器的启动中,很像将命令行参数通报给docker run。
同样,network和volume定义类似于docker network create和docker volume create。
与Docker运行一样,默认情形下尊重Dockerfile中指定的选项(例如CMD,EXPOSE,VOLUME,ENV) - 你不须要在docker-compose.yml中再次指定它们。

你可以在配置中利用具有类似Bash的${VARIABLE}语法利用环境变量 - 有关详细信息,请参阅Variable substitution。

composeymlphp若何写dockercomposeyml一文教你学会 Angular

01 Service 配置参考

把稳:有多个版本的Compose文件格式 - 版本1(旧版格式,不支持卷或网络)和版本2以及2.1(最新的)。
有关更多信息,请参阅版[Versioning]部分。

此部分包含做事定义支持的所有配置选项的列表。

1.1 build

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

build可以指定为包含构建高下文路径,也可以根据高下文选择 dockerfile 和 args 指定的路径工具。

build: ./dir

build:

context: ./dir

dockerfile: Dockerfile-alternate

args:

buildno: 1

如果指定image字段来build,则Compose利用image中指定的webapp和tag(可选)命名构建的image:

build: ./dirimage: webapp:tag

这里从./dir构建了一个镜像名为webapp,并打上标记为tag的镜像。

把稳:在版本1文件格式中,build有两种不同的方法:

只许可字符串形式(build:.) - 而不是工具形式。
不许可与image一起build。
考试测验这样做会导致缺点。

(1)context

版本2及以上利用,版本1只利用build。

它的值可以是Dockerfile的路径,或者是指向git仓库的url。

当供应的值是相对路径时,它被阐明Compose文件位置的相对路径。
目录里的信息会被当做构建内容 发送到Docker守护进程。

Compose将利用天生的名字build和tag它,然后利用该image。

build:

context: ./dir

(2)dockerfile

备用Dockerfile。

撰写将利用一个备用文件来构建。
还必须指定构建路径。

build:

context: .

dockerfile: Dockerfile-alternate

把稳:在版本1文件格式中,dockerfile有两种不同的方法:

它与build同级涌现,而不是子选项:

build: . dockerfile: Dockerfile-alternate不许可与image一起利用dockerfile。
考试测验这样做会导致缺点。

(3)args

支持版本2及以上

添加构建参数,它们是只有在构建过程中才可访问的环境变量。

首先,在Dockerfile中指定参数:

ARG buildno

ARG password

RUN echo \"大众Build number: $buildno\公众

RUN script-requiring-password.sh \"大众$password\"大众

然后,指定build字段下的参数args。
您可以mapping或list:

build:

context: .

args:

buildno: 1

password: secret

build:

context: .

args:

- buildno=1

- password=secret

指定build参数时,可以忽略该值,在这种情形下,构建时其值为运行Compose的环境中的值。

args: - buildno - password

把稳:YAML布尔值(true,false,yes,no,on,off)必须用引号引起来,以便解析器将其阐明为字符串。

1.2 cap_add, cap_drop

添加或删除容器功能。
有关完全列表,请参阅man 7功能。

cap_add:

- ALL

cap_drop:

- NET_ADMIN

- SYS_ADMIN

1.3 command

覆盖默认命令

command: bundle exec thin -p 3000

该命令也可以是一个list,在办法类似于dockerfile:

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

1.4 cgroup_parent

为容器指定可选的父cgroup。

cgroup_parent: m-executor-abcd

1.5 container_name

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

container_name: my-web-container

由于Docker容器名称必须是唯一的,因此如果您指定了自定义名称,则无法将做事扩展到1个容器之外。
考试测验这样做会导致缺点。

1.6 devices

设备映射列表。
利用与--device docker client create选项相同的格式。

devices: - \"大众/dev/ttyUSB0:/dev/ttyUSB0\公众

1.7 depends_on

Express之间的依赖关系,有两个效果:

docker-compose up 将按照依赖顺序启动做事。
不才面的示例中,db和redis将在web之前启动。
docker-compose up SERVICE 将自动包含SERVICE的依赖关系。
在以下示例中,docker-compose up web也将创建并启动db和redis。

列子:

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

把稳:在启动web之前,depends_on不会等待db和redis“就绪”,直到它们被启动。
如果您须要等待做事准备就绪,请参阅掌握启动顺序理解有关此问题的更多信息以及办理问题的策略。

1.8 dns

自定义DNS做事器。
可以是单个值或列表。

dns: 8.8.8.8

dns:

- 8.8.8.8

- 9.9.9.9

1.9 dns_search

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

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

1.10 tmpfs

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

tmpfs: /run

tmpfs:

- /run

- /tmp

1.11 entrypoint

覆盖默认的entrypoint。

entrypoint: /code/entrypoint.sh

entrypoint也可以是一个列表,存在办法类似于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

1.12 env_file

从文件添加环境变量。
可以是单个值或列表。

如果已利用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 environmentRACK_ENV=development

把稳:如果您的service指定了build选项,则在build过程中将不会自动显示环境文件中定义的变量。
利用build的args子选项来定义构建时环境变量。

1.13 environment

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

只有一个键的环境变量被解析为它在Compose正在运行的机器上的值,这对付secret或host-specific values是有帮助的。

environment:

RACK_ENV: development

SHOW: 'true'

SESSION_SECRET:

environment:

- RACK_ENV=development

- SHOW=true

- SESSION_SECRET

把稳:如果您的做事指定了build选项,则在build期间将不会自动显示在环境中定义的变量。
利用build的args子选项来定义构建时环境变量。

1.14 expose

公开端口,而不将其发布到主机 - 它们只能访问链接手事。
只能指定内部端口。

expose: - \"大众3000\"大众 - \"大众8000\"大众

1.15 extends

在当前文件或另一个文件中扩展另一个做事,可选地覆盖配置。

您可以将extends与其他配置字段一起利用。
extends值必须是利用必需的server和可选file字段定义的字典。

extends:

file: common.yml

service: webapp

server正在扩展的做事的名称,例如web或数据库。
该文件是定义该做事的Compose配置文件的位置。

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

您可以扩展本身扩展其他做事。
您可以无限期地延长。
Compose不支持循环引用,如果碰着一个,docker-compose会返回一个缺点。

有关扩展的更多信息,请参阅扩展文档。

1.16 external_links

链接到在docker-compose.yml外部启动的容器,乃至在Compose之外,特殊是对付供应共享或公共做事的容器。
external_links在指定容器名称和链接别名(CONTAINER:ALIAS)时遵照类似于links的语义。

external_links:

- redis_1

- project_db_1:mysql

- project_db_1:postgresql

把稳:如果您利用的是版本2文件格式,则外部创建的容器必须连接到至少一个与链接到它们的做事相同的网络。

1.17 extra_hosts

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

extra_hosts:

- \公众somehost:162.242.195.82\"大众

- \公众otherhost:50.31.209.229\"大众

具有ip地址和主机名的条款将在此做事的容器中的/etc/hosts中创建,例如:

162.242.195.82 somehost50.31.209.229 otherhost

1.18 group_add

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

version: '2'

services:

image: alpine

group_add:

- mail

在创建的容器中运行id将显示用户属于mail组,如果未利用group_add,则不会是这种情形。

1.19 image

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

image: redisimage: ubuntu:14.04image: tutum/influxdbimage: example-registry.com:4000/postgresqlimage: a4bc65fd

如果image不存在,Compose会考试测验拉取它,除非你也指定了build,在这种情形下,它利用指定的选项构建它,并用指定的标签标记它。

把稳:在版本1文件格式中,不许可与image一起利用build。
考试测验这样做会导致缺点。

1.20 isolation

Added in version 2.1 file format. 指定容器的隔离技能。
在Linux上,唯一支持的值为default。
在Windows上,可接管的值为default,process和hyperv。
有关详细信息,请参阅Docker Engine文档。

1.21 labels

利用Docker labels向容器添加元数据。
您可以利用list或mapping。

建议您利用reverse-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\"大众

1.22 links

链接到另一个做事中的容器。
请指定做事名称和链接别名(SERVICE:ALIAS),或仅指定做事名称。

web:

links:

- db

- db:database

- redis

如果未指定别名,则可以在与别名相同的主机名或做事名称处访问链接手事的容器。

链接也以与depends_on相同的办法表示做事之间的依赖关系,因此它们确定做事启动的顺序。

把稳:如果您定义链接和networks,则具有它们之间的链接的做事必须共享至少一个公共网络以便进行

1.23 logging

Version 2 file format and up. In version 1, use log_driver and log_opt.

记录做事的配置。

logging: driver: syslog options: syslog-address: \公众tcp://192.168.0.42:123\"大众

driver名称指定了做事容器的日志驱动程序,,如docker运行的--log-driver选项(documented here)。

默认值为json-file。

driver: \"大众json-file\公众

driver: \公众syslog\公众

driver: \"大众none\公众

把稳:只有json-file和journald驱动程序使日志可以直接从docker-compose up和docker-compose logs获取。
利用任何其他驱动程序将不会打印任何日志。

利用options键为记录驱动程序指定日志记录选项,例如docker run的--log-opt选项。

日志记录选项是key-value对。
syslog选项的示例:

driver: \"大众syslog\"大众options: syslog-address: \"大众tcp://192.168.0.42:123\"大众

1.24 log_driver

Version 1 file format only. In version 2, use logging.

指定日志驱动程序。
默认值为json-file。

log_driver: syslog

1.25 log_opt

Version 1 file format only. In version 2, use logging.

将记录选项指定为key-value对。
syslog选项的示例:

log_opt: syslog-address: \"大众tcp://192.168.0.42:123\公众

1.26 net

Version 1 file format only. In version 2, use network_mode.

网络模式。
利用与docker client --net参数相同的值。
container:...形式可以接管做事名称,而不是容器名称或ID。

net: \"大众bridge\"大众

net: \"大众host\"大众

net: \"大众none\公众

net: \公众container:[service name or container name/id]\"大众

1.27 network_mode

Version 2 file format and up. In version 1, use net.

网络模式。
利用与docker client --net参数相同的值,以及分外表单 service:[service name]。

network_mode: \公众bridge\公众

network_mode: \公众host\"大众

network_mode: \"大众none\公众

network_mode: \"大众service:[service name]\公众

network_mode: \"大众container:[container name/id]\公众

1.28 networks

Version 2 file format and up. In version 1, use net.

要加入的网络, 引用top-level networks key 下的条款。

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

(1)aliases

网络上此做事的别名(备用主机名)。
同一网络上的其他容器可以利用做事名称或此别名连接到做事的容器之一。

由于aliases是网络范围的,以是相同的做事可以在不同的网络上具有不同的别名。

把稳:网络范围的别名可以由多个容器共享,乃至可以由多个做事共享。
如果是,那么该名称将解析为哪个容器不能担保。

一样平常格式如下所示。

services:

some-service:

networks:

some-network:

aliases:

- alias1

- alias3

other-network:

aliases:

- alias2

不才面的示例中,供应了三个做事(web,worker和db),以及两个网络(new和legacy)。
db做事在new网络上的主机名db或database,legacy网络中的db或mysql是可达的。

version: '2'services: web: build: ./web networks: - new worker: build: ./worker networks: - legacy db: image: mysql networks: new: aliases: - database legacy: aliases: - mysqlnetworks: new: legacy:

(2)ipv4_address, ipv6_address

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

顶级网络部分中的相应网络配置必须具有包含每个静态地址的子网和网关配置的ipam块。
如果须要IPv6寻址,则com.docker.network.enable_ipv6驱动程序选项必须设置为true。

version: '2'services: app: image: busybox command: ifconfig networks: app_net: ipv4_address: 172.16.238.10 ipv6_address: 2001:3984:3989::10networks: app_net: driver: bridge driver_opts: com.docker.network.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

(3)link_local_ips

Added in version 2.1 file format.

指定link-local IPs。
link-local IPs是属于众所周知的子网并且完备由运营商管理的分外IP,常日取决于它们被支配的架构。
因此,它们不由docker(IPAM driver)管理。

用法示例:

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

1.29 pid

pid: \"大众host\"大众

将PID模式设置为主机PID模式。
这将打开容器和主机操作系统之间的PID地址空间的共享。
利用此标志启动的容器将能够访问和操作裸机机器命名空间中的其他容器,反之亦然。

1.30 ports

公开端口。
指定两个端口(HOST:CONTAINER),或只指定容器端口(将选择随机主机端口)。

把稳:当映射HOST:CONTAINER格式的端口时,当利用低于60的容器端口时,您可能会碰着缺点的结果,由于YAML将解析格式为xx:yy的数字为六进制(基数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\"大众

1.31 security_opt

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

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

1.32 top_signal

设置停滞容器的备用旗子暗记。
默认情形下停滞利用SIGTERM。
利用stop_signal设置备用旗子暗记将导致停滞发送该旗子暗记。

stop_signal: SIGUSR1

1.33 ulimits

覆盖容器的默认ulimits。
您可以将单个限定指定为整数或soft/hard限定造为映射。

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

1.34 volumes, volume_driver

装载路径或命名卷(可选)指定主机上的路径(HOST:CONTAINER)或访问模式(HOST:CONTAINER:ro)。
对付版本2文件,命名卷须要利用top-level volumes key`指定。
当利用版本1时,Docker Engine将自动创建命名卷(如果不存在)。

您可以在主机上安装相对路径,相对付正在利用的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

请把稳,对付版本2文件,此驱动程序将不适用于named volumes(在利用declaring the volume时,应利用driver选项)。
对付版本1,named volumes和container volumes都将利用指定的驱动程序。

把稳:如果您还指定了volume_driver,则不会实行路径扩展。

有关更多信息,请参阅docs.docker.com/engine/user…和Volume Plugins

1.35 volumes_from

从另一个做事或容器装入所有卷,可选择指定只读访问(ro)或读写(rw)。
如果未指定访问级别,则将利用读写。

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

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

- service_name

- service_name:ro

- container_name

- container_name:rw

cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, oom_score_adj, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir

每个都是一个单一的值,类似于它的docker运行对应。

cpu_shares: 73cpu_quota: 50000cpuset: 0,1user: postgresqlworking_dir: /codedomainname: foo.comhostname: fooipc: hostmac_address: 02:42:ac:11:65:43mem_limit: 1000000000memswap_limit: 2000000000privileged: trueoom_score_adj: 500restart: alwaysread_only: trueshm_size: 64Mstdin_open: truetty: true

把稳:以下选项仅适用于版本2及更高版本: oom_score_adj

02 Volume configuration reference

虽然可以作为做事声明的一部分来即时声明卷,但是此部分许可您创建可以跨多个做事重用的命名卷(不依赖volumes_from),并且可以利用docker命令行轻松检索和检讨 或API。
有关更多信息,请参阅docker volume子命令文档。

2.1 driver

指定应为此卷利用哪个卷驱动程序。
默认为local。
如果驱动程序不可用,Docker Engine将返回缺点。

driver: foobar

2.2 driver_opts

将选项列表指定为要通报给此卷的驱动程序的key-value pairs。
这些选项是驱动程序干系的 - 请参阅驱动程序文档以获取更多信息。
可选的。

driver_opts: foo: \"大众bar\"大众 baz: 1

2.3 external

如果设置为true,则指定该卷已在Compose外部创建。
docker-compose up不会考试测验创建它,并且如果它不存在将会引发一个缺点。

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

不才面的示例中,不是考试测验创建名为[projectname] _data的卷,Compose将查找现有的卷,大略地称为数据,并将其挂载到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

2.4 labels

Added in version 2.1 file format.

利用Docker labels向容器添加元数据。
您可以利用数组或字典。

建议您利用反向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\"大众

03 Network configuration reference

顶层网络键许可您指定要创建的网络。
有关Compose利用Docker网络功能的完全解释,请参阅Networking guide。

3.1 driver

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

默认驱动程序取决于您利用的Docker引擎是如何配置的,但在大多数情形下,它将是单个主机上的bridge和Swarm上的overlay。

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

driver: overlay

3.2 driver_opts

指定选项列表作为要通报给此网络驱动程序的键值对。
这些选项是driver-dependent - consult的驱动程序文档的更多信息。
可选的。

driver_opts: foo: \"大众bar\"大众 baz: 1

3.3 enable_ipv6

Added in version 2.1 file format.

在此网络上启用IPv6网络。

3.4 ipam

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

driver:自定义IPAM驱动程序,而不是默认值。
config:具有零个或多个配置块的列表,每个配置块包含以下任意键:subnet: 表示网段的CIDR格式的子网ip_range: 从等分配容器IPs的IP范围gateway: 主子网的IPv4或IPv6网关aux_addresses:网络驱动程序利用的赞助IPv4或IPv6地址,作为从主机名到IP地址的映射options: 作为键值映射的驱动特定选项。

A full example:

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\"大众

3.5 internal

Version 2 file format and up.

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

3.6 labels

Added in version 2.1 file format.

利用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\"大众

3.7 external

如果设置为true,则指定此网络已在Compose之外创建。
docker-compose up不会考试测验创建它,并且如果它不存在将会引发一个缺点。

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

不才面的示例中,proxy是到外部天下的网关。
而不是考试测验创建一个名为[projectname] _outside的网络,Compose将查找一个现有的网络,大略地调用外outside并连接outside做事的容器。

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-network04 Versioning

目前有三个版本的Compose文件格式:

版本1,传统格式。
这是通过省略YAML根目录下的版本键来指定的。
版本2,推举格式。
这是利用版本:’2’条款在YAML的根目录指定。
版本2.1,升级超过版本2,利用了Docker Engine的最新特性。
利用版本:“2.1”条款指定YAML根目录。

要将项目从版本1移动到2,请参阅升级部分。

把稳:如果您利用多个Compose文件或扩展做事,每个文件必须是相同的版本 - 您不能在单个项目中稠浊版本1和2。

根据您利用的版本,有几点不同:

构造和许可的配置键必须运行的最低Docker Engine版本撰写关于网络的行为 这些差异如下所述。

4.1 Version 1

未声明版本的组合文件被视为“版本1”。
在这些文件中,所有做事都在文档的根目录处声明。

版本1由Compose到1.6.x支持。
它将在未来的Compose版本中被弃用。

版本1文件无法声明命名卷,网络或构建参数。

例:

web:

build: .

ports:

- \公众5000:5000\公众

volumes:

- .:/code

links:

- redis

redis:

image: redis

4.2 Version 2

利用版本2语法的撰写文件必须指示文档根目录下的版本号。
所有做事必须在做事键下声明。

Compose 1.6.0+支持版本2文件,并须要版本1.10.0+的Docker引擎。

可以在volumes键下声明命名卷,并且可以在networks关键字下声明网络。

大略示例:

version: '2'services: web: build: . ports: - \"大众5000:5000\"大众 volumes: - .:/code redis: image: redis

一个更广泛的例子,定义卷和网络:

version: '2'

services:

web:

build: .

ports:

- \公众5000:5000\"大众

volumes:

- .:/code

networks:

- front-tier

- back-tier

redis:

image: redis

volumes:

- redis-data:/var/lib/redis

networks:

- back-tier

volumes:

redis-data:

driver: local

networks:

front-tier:

driver: bridge

back-tier:

driver: bridge

4.3 Version 2.1

升级版本2,引入仅适用于Docker Engine版本1.12.0+的新参数

引入以下附加参数: link_local_ips isolation labels for volumes and networks

4.4 Upgrading

在大多数情形下,从版本1移动到2是一个非常大略的过程:

将全体文件缩进一级,并在顶部放置一个services:键。
添加一个version: '2'行在文件的顶部。

如果您利用特定的配置功能,则更繁芜: dockerfile: This now lives under the build key:

build: context: . dockerfile: Dockerfile-alternatelog_driver, log_opt: These now live under the logging key: logging: driver: syslog options: syslog-address: \"大众tcp://192.168.0.42:123\公众与环境变量的链接:如环境变量引用中所述,由链接创建的环境变量已经由时了一段韶光。
在新的Docker网络系统中,它们已被删除。
您该当直接连接到相应的主机名,或者自己设置干系的环境变量,利用link hostname: ``` web: links:db environment:DB_PORT=tcp://db:5432 ```external_links:Compose在运行版本2项目时利用Docker网络,因此链接的行为略有不同。
特殊地,两个容器必须共同连接到至少一个网络,以便进行通信,纵然明确地链接在一起。
将外部容器连接到运用程序的默认网络,或者将外部容器和做事的容器都连接到外部网络。
net: 这现在由network_mode更换:

net: host -> network_mode: hostnet: bridge -> network_mode: bridgenet: none -> network_mode: none如果你利用 net: \"大众container:[service name]\"大众, 用 network_mode: \"大众service:[service name]\"大众 更换。

net: \"大众container:web\"大众 -> network_mode: \"大众service:web\"大众

如果你利用 net: \公众container:[container name/id]\"大众, 值可以不变。

net: \公众container:cont-name\"大众 -> network_mode: \"大众container:cont-name\"大众net: \公众container:abc12345\"大众 -> network_mode: \公众container:abc12345\公众具有命名卷的卷:这些必须现在必须在Compose文件的顶级卷部分中显式声明。
如果做事装载称为数据的命名卷,则必须在顶层卷部分中声明数据卷。
全体文件可能如下所示:

version: '2'

services:

db:

image: postgres

volumes:

- data:/var/lib/postgresql/data

volumes:

data: {}

默认情形下,Compose会创建一个以项目名称为前缀的卷。
如果你想要它只是被称为数据,声明它为外部

volumes:data:external: true05 Variable substitution

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

web: build: . ports: - \"大众${EXTERNAL_PORT}:5000\"大众

当利用此配置运行docker-compose up时,Compose会在shell中查找EXTERNAL_PORT环境变量并将其值代入。
在本示例中,Compose在创建Web容器之前将端口映射解析为“8000:5000”。

如果未设置环境变量,则Compose将更换为空字符串。
在上面的示例中,如果未设置EXTERNAL_PORT,则端口映射的值为:5000(这当然是无效的端口映射,并且将在考试测验创建容器时导致缺点)。

支持$VARIABLE和${VARIABLE}语法。
此外,当利用2.1文件格式时,可以利用范例的shell语法供应内联默认值: 如果VARIABLE在环境中未设置或为空,${VARIABLE:-default}将评估为默认值。
只有在环境中未设置VARIABLE的情形下,${VARIABLE-default}才会评估为默认值。

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

当您的配置须要一个字母美元符号时,您可以利用$$(双美元符号)。
这也防止了Compose内插值,以是$$许可你引用你不想由Compose处理的环境变量。

web: build: . command: \公众$$VAR_NOT_INTERPOLATED_BY_COMPOSE\公众

如果您忘却并利用单个美元符号($),Compose将该值阐明为环境变量并将警告您:

未设置VAR_NOT_INTERPOLATED_BY_COMPOSE。
更换空字符串。

原文链接:https://juejin.im/post/5d9bff8ae51d4577f3534e98