版本1 | Version 1 (Compose)
Compose 文件版本1参考
参考和准则
这些主题描述撰写文件格式的版本1。这是最古老的版本。
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.+ |
除了编写表中显示的文件格式版本外,撰写本身也处于发布计划中,如撰写版本,但是文件格式版本并不一定会随每次发行版而增加。例如,撰写文件格式3.0是在撰写1.10.0版,并在随后的版本中逐步进行版本化。
服务配置参考
版本1撰写文件是 YAML 定义文件服务。
撰写文件的默认路径是./docker-compose.yml
。
针尖
::您可以使用.yml
或.yaml
文件的扩展名。他们都能工作。
服务定义包含将应用于为该服务启动的每个容器的配置,这与将命令行参数传递给docker run
。
正如docker run
在 Dockerfile 指定选项(例如,CMD
,EXPOSE
,VOLUME
,ENV
)是默认的尊重-你不需要再次指定它们docker-compose.yml
。
本节包含版本1中的服务定义所支持的所有配置选项的列表。
build
在构建时应用的配置选项。
build
可以指定为包含生成上下文路径的字符串。
build: ./dir
注意
在版本1文件格式中,build
有两种不同的方式:
- 只
build: .
允许字符串 form() - 而不是版本2中允许的对象形式。
- 使用
build
连同image
是不允许的。尝试这样做会导致错误。
dockerfile
候补文件。
Composet 将使用要构建的备用文件。还必须指定生成路径。
build: .
dockerfile: Dockerfile-alternate
注意
在版本1文件格式中,dockerfile
有两种方式与新版本不同:
- 它出现在旁边
build
,而不是作为一个子选项:
- 使用
dockerfile
连同image
是不允许的。尝试这样做会导致错误。
cap_add, cap_drop
添加或删除容器功能。见man 7 capabilities
完整的名单。
cap_add:
- ALL
cap_drop:
- NET_ADMIN
- SYS_ADMIN
注意
:在使用(版本3)Compose 文件的群集模式下部署堆栈时,会忽略这些选项。
命令
重写默认命令。
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个容器。尝试这样做会导致错误。
器件
设备映射列表。使用与--device
Docker 客户端创建选项相同的格式。
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
dns
自定义 DNS 服务器。可以是单个值,也可以是列表。
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
dns_search
自定义 DNS 搜索域。可以是单个值或列表。
dns_search: example.com
dns_search:
- dc1.example.com
- dc2.example.com
入口点
覆盖默认入口点。
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
使用ENTRYPOINT
Dockerfile 指令,设置将覆盖在服务映像上设置的任何默认入口点,并清除映像上的任何默认命令 - 这意味着如果CMD
Dockerfile 中存在指令,它将被忽略。
env_file
从文件中添加环境变量。可以是单个值,也可以是列表。
如果您已经指定了 Compose 文件docker-compose -f FILE
,则路径env_file
相对于该文件所在的目录。
环境中指定的环境变量覆盖这些值。
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
撰写期望 env 文件中的每一行都是VAR=VAL
格式。#
以空行开头的行(即注释)被忽略。
# Set Rails/Rack environment
RACK_ENV=development
注意
:如果您的服务指定了构建选项,则在构建过程中,环境文件中定义的变量将不会自动显示。
该值按VAL
原样使用,根本不作任何修改。例如,如果值被引号包围(如通常是 shell 变量的情况),则引用将包含在传递给
Compose 的值中。
请记住,列表中文件的顺序在确定分配给多次显示的变量的值时非常重要。列表中的文件从上到下进行处理。对于在文件中指定的相同变量a.env
并在文件中分配了不同的值b.env
,如果b.env
在下面列出(在)之后,则来自b.env
stand 的值。例如,在下面的声明中docker_compose.yml
:
services:
some-service:
env_file:
- a.env
- b.env
和下列文件:
# a.env
VAR=1
和
# b.env
VAR=hello
$VAR将是hello
。
环境
添加环境变量。您可以使用数组或字典。任何布尔值; 真,假,需要用引号括起来以确保它们不被 YML 解析器转换为 True 或 False。
只有一个密钥的环境变量会在计算机上运行时解析为它们的值,这对于密钥或主机特定的值可能会有所帮助。
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
注意
:如果您的服务指定了构建选项,environment
则在构建过程中定义的变量将不会自动可见。
expose
公开端口而不将它们发布到主机 - 它们只能被链接服务访问。只能指定内部端口。
expose:
- "3000"
- "8000"
扩展
在当前文件或另一个文件中扩展另一个服务,可以选择覆盖配置。
您可以将extends
任何服务与其他配置密钥一起使用。该extends
值必须是使用必需键service
和可选file
键定义的字典。
extends:
file: common.yml
service: webapp
service
服务的名称被扩展,例如web
或database
。这file
是定义该服务的 Compose 配置文件的位置。
如果省略file
Compose 查找当前文件中的服务配置。该file
值可以是绝对路径或相对路径。如果您指定相对路径,则
Compose 将其视为相对于当前文件的位置。
你可以扩展一个本身扩展另一个的服务。您可以无限延长。撰写不支持循环引用,并docker-compose
在遇到循环时返回错误。
有关更多extends
信息,请参阅扩展文档。
external_links
链接到在此之外docker-compose.yml
甚至在Compose之外的容器,特别是对于提供共享或公共服务的容器。external_links
遵循类似于links
指定容器名称和链接别名(CONTAINER:ALIAS
)的语义。
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
extra_hosts
添加主机名映射。使用与 docker 客户端--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
图像
指定要启动容器的图像。可以是存储库/标记,也可以是部分图像ID。
image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd
如果图像不存在,则组合尝试提取它,除非您还指定了建房,在这种情况下,它使用指定的选项构建它,并使用指定的标记标记它。
注
*在第1版文件格式,使用build
连同image
是不允许的。尝试这样做会导致错误。
标签
将元数据添加到容器中。码头标签可以使用数组或字典。
建议您使用反向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"
链接
链接到其他服务中的容器。要么同时指定服务名称和链接别名%28SERVICE:ALIAS
%29,或者只是服务名称。
web:
links:
- db
- db:database
- redis
链接服务的容器可以在与别名相同的主机名上到达,如果没有指定别名,则可以访问服务名称。
链接还以与服务相同的方式表示服务之间的依赖关系。视情况而定[医]上,所以他们决定了服务启动的顺序。
注
*如果您同时定义了链接和网络,在它们之间具有链接的服务必须至少共享一个共同的网络才能进行通信。
原木[医]司机
第1版文件格式只有。在版本2和更高版本中,使用测井...
指定日志驱动程序。默认情况是json-file
...
log_driver: syslog
原木[医]选择
第1版文件格式只有。在版本2和更高版本中,使用测井...
将日志记录选项指定为键值对。一个例子syslog
备选方案:
log_opt:
syslog-address: "tcp://192.168.0.42:123"
网
第1版文件格式只有。在版本2和更高版本中,使用网络[医]模式和网络...
网络模式。使用与码头客户端相同的值。--net
参数。大container:...
表单可以采用服务名称,而不是容器名称或id。
net: "bridge"
net: "host"
net: "none"
net: "container:[service name or container name/id]"
PID
pid: "host"
将PID模式设置为主机PID模式。这将打开容器与主机操作系统之间的共享PID地址空间。使用此标志启动的容器将能够访问和操作裸金属机器名称空间中的其他容器,反之亦然。
港口
暴露端口。要么指定两个端口%28HOST:CONTAINER
%29,或仅选择容器端口%28a随机主机端口%29。
注
*映射HOST:CONTAINER
格式时,当使用低于60的容器端口时,可能会遇到错误的结果,因为YAML将解析格式中的数字。xx:yy
按百分之二十八基数60%29计算。因此,我们建议始终显式地将端口映射指定为字符串。
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:
- label:user:USER
- label:role:ROLE
停![医]信号
设置另一个停止容器的信号。默认情况下stop
使用SIGTERM。使用stop_signal
会导致stop
而不是发送信号。
stop_signal: SIGUSR1
极限
重写容器的默认uLimits。可以将单个限制指定为整数,也可以将软/硬限制指定为映射。
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
体积、体积[医]司机
挂载路径或命名卷,可选择指定主机上的路径%28HOST:CONTAINER
%29,或访问模式%28HOST:CONTAINER:ro
29%。为第2版文件,则需要使用顶层volumes
键.使用时第1版,如果命名卷不存在,Docker引擎将自动创建它。
您可以在主机上挂载一个相对路径,该路径将相对于正在使用的撰写配置文件的目录展开。相对路径应该总是从.
或..
..
.
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
有几件事要注意,取决于合成文件版本你用的是:
- 为第1版文件,命名卷和容器卷都将使用指定的驱动程序。
- 如果还指定了
volume_driver
。例如,如果指定./foo:/data
,./foo
部分将直接传递到卷驱动器,而不被展开。
见码头容积和卷插件想了解更多信息。
卷[医]从
从其他服务或容器挂载所有卷,可选地指定只读访问%28。ro
%29或读写%28rw
29%。如果未指定访问级别,则将使用读-写。
volumes_from:
- service_name
- service_name:ro
cpu[医]股票,CPU[医]配额,cpuet,域名,主机名,IPC,mac[医]地址,mem[医]限制,记忆交换[医]极限,mem[医]交换,特权,阅读[医]只,重新启动,SHM[医]大小,标准的[医]打开,TTY,用户,工作[医]迪尔
每个值都是一个值,类似于码头运行对口。
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
restart: always
read_only: true
shm_size: 64M
stdin_open: true
tty: true
撰写文件
- 用户指南
- 安装组合
- 编写文件版本和升级
- 从Django开始
- 从Rails开始
- 从WordPress开始
- 命令行引用