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。
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: ./dir
image: 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.com
dns_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 environment
RACK_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 somehost
50.31.209.229 otherhost
1.18 group_add
指定容器中的用户将成为其成员的其他组(按称号或号码)。 组有必要存在于要增加的容器和主机体系中。 这是有用的一个比如是当多个容器(作为不同的用户运转)需求在主机体系上读取或写入相同的文件。 该文件能够由一切容器同享的组具有,并在group_add中指定。 有关更多详细信息,请参阅Docker文档。
version: '2'
services:
image: alpine
group_add:
在创立的容器中运转id将显现用户归于mail组,假如未运用group_add,则不会是这种状况。
1.19 image
指定要从中发动容器的映像。能够是存储库/符号或部分图画ID。
image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: 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:
- mysql
networks:
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::10
networks:
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: 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
privileged: true
oom_score_adj: 500
restart: always
read_only: true
shm_size: 64M
stdin_open: true
tty: 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-network
04 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-alternate
- log_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: host
net: bridge -> network_mode: bridge
net: 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: true
05 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