Docker compose file 中文参考文档
如何写docker-compose.yml,Docker compose file 参考文档 | Deepzz's Blog https://deepzz.com/post/docker-compose-file.html官方英文文档 Compose file reference - Docker https://docs.docker.com/compose/compose-f
如何写docker-compose.yml,Docker compose file 参考文档 | Deepzz's Blog https://deepzz.com/post/docker-compose-file.html
官方英文文档 Compose file reference - Docker https://docs.docker.com/compose/compose-file/
Docker compose file 参考文档
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。
Service 配置参考
此部分包含服务定义支持的所有配置选项的列表。
build
在构建时应用的配置选项。
build
可以指定为包含构建上下文路径,也可以根据上下文选择 dockerfile 和 args 指定的路径对象。
如果指定image
字段来build
,则Compose
使用image
中指定的webapp
和tag
(可选)命名构建的image
:
这里从./dir
构建了一个镜像名为webapp
,并打上标记为tag
的镜像。
context
它的值可以是Dockerfile
的路径,或者是指向git
仓库的url。
当提供的值是相对路径时,它被解释Compose文件位置的相对路径。 目录里的信息会被当做构建内容 发送到Docker守护进程。
Compose将使用生成的名字build
和tag
它,然后使用该image
。
dockerfile
备用Dockerfile。
撰写将使用一个备用文件来构建。 还必须指定构建路径。
args
添加构建参数,它们是只有在构建过程中才可访问的环境变量。
首先,在Dockerfile中指定参数:
然后,指定build
字段下的参数args
。您可以mapping或list:
指定build参数时,可以忽略该值,在这种情况下,构建时其值为运行Compose的环境中的值。
cap_add, cap_drop
添加或删除容器功能。 有关完整列表,请参阅man 7功能。
command
覆盖默认命令
该命令也可以是一个list,在方式类似于dockerfile:
cgroup_parent
为容器指定可选的父cgroup。
container_name
指定自定义容器名称,而不是生成的默认名称。
由于Docker容器名称必须是唯一的,因此如果您指定了自定义名称,则无法将服务扩展到1个容器之外。 尝试这样做会导致错误。
devices
设备映射列表。 使用与--device
docker client create选项相同的格式。
depends_on
Express之间的依赖关系,有两个效果:
docker-compose up
将按照依赖顺序启动服务。 在下面的示例中,db和redis将在web之前启动。docker-compose up SERVICE
将自动包含SERVICE的依赖关系。 在以下示例中,docker-compose up web也将创建并启动db和redis。
列子:
dns
自定义DNS服务器。可以是单个值或列表。
dns_search
自定义DNS搜索域。可以是单个值或列表。
tmpfs
在容器中安装临时文件系统。可以是单个值或列表。
entrypoint
覆盖默认的entrypoint
。
entrypoint也可以是一个列表,存在方式类似于dockerfile:
env_file
从文件添加环境变量。可以是单个值或列表。
如果已使用docker-compose -f FILE
指定了一个Compose文件,则env_file
中的路径相对于该文件所在的目录。
在环境中指定的环境变量会覆盖这些值。
Compose期望env文件中的每一行都处于VAR = VAL
格式。 以#开头的行(即注释)将被忽略,空行也是如此。
environment
添加环境变量。您可以使用数组或字典。 任意布尔值:true,false,yes no,需要用引号括起来,以确保它们不会被YML解析器转换为True或False。
只有一个键的环境变量被解析为它在Compose正在运行的机器上的值,这对于secret或host-specific values是有帮助的。
expose
公开端口,而不将其发布到主机 - 它们只能访问链接服务。只能指定内部端口。
extends
在当前文件或另一个文件中扩展另一个服务,可选地覆盖配置。
您可以将extends
与其他配置字段一起使用。 extends
值必须是使用必需的server
和可选file
字段定义的字典。
server
正在扩展的服务的名称,例如web
或数据库。 该文件是定义该服务的Compose配置文件的位置。
如果省略file
Compose在当前文件中查找服务配置。 file
值可以是绝对路径或相对路径。 如果指定相对路径,则Compose将其视为相对于当前文件的位置。
您可以扩展本身扩展其他服务。 您可以无限期地延长。 Compose不支持循环引用,如果遇到一个,docker-compose会返回一个错误。
有关扩展的更多信息,请参阅扩展文档。
external_links
链接到在docker-compose.yml
外部启动的容器,甚至在Compose之外,特别是对于提供共享或公共服务的容器。 external_links
在指定容器名称和链接别名(CONTAINER:ALIAS
)时遵循类似于links
的语义。
extra_hosts
添加主机名映射。使用与docker client --add-host
参数相同的值。
具有ip地址和主机名的条目将在此服务的容器中的/etc/hosts
中创建,例如:
group_add
指定容器中的用户将成为其成员的其他组(按名称或号码)。 组必须存在于要添加的容器和主机系统中。 这是有用的一个例子是当多个容器(作为不同的用户运行)需要在主机系统上读取或写入相同的文件。 该文件可以由所有容器共享的组拥有,并在group_add
中指定。 有关更多详细信息,请参阅Docker文档。
在创建的容器中运行id
将显示用户属于mail
组,如果未使用group_add
,则不会是这种情况。
image
指定要从中启动容器的映像。可以是存储库/标记或部分图像ID。
如果image不存在,Compose会尝试拉取它,除非你也指定了build,在这种情况下,它使用指定的选项构建它,并用指定的标签标记它。
isolation
labels
使用Docker labels向容器添加元数据。 您可以使用list或mapping。
建议您使用reverse-DNS符号来防止您的标签与其他软件使用的标签冲突。
links
链接到另一个服务中的容器。请指定服务名称和链接别名(SERVICE:ALIAS
),或仅指定服务名称。
如果未指定别名,则可以在与别名相同的主机名或服务名称处访问链接服务的容器。
链接也以与depends_on相同的方式表示服务之间的依赖关系,因此它们确定服务启动的顺序。
logging
记录服务的配置。
driver
名称指定了服务容器的日志驱动程序,,如docker运行的--log-driver
选项(documented here)。
默认值为json-file。
使用options
键为记录驱动程序指定日志记录选项,例如docker run
的--log-opt
选项。
日志记录选项是key-value
对。 syslog
选项的示例:
log_driver
指定日志驱动程序。默认值为json-file
。
log_opt
将记录选项指定为key-value
对。 syslog
选项的示例:
net
网络模式。 使用与docker client --net
参数相同的值。 container:...
形式可以接受服务名称,而不是容器名称或ID。
network_mode
网络模式。 使用与docker client --net
参数相同的值,以及特殊表单 service:[service name]
。
networks
要加入的网络, 引用top-level networks key 下的条目。
aliases
网络上此服务的别名(备用主机名)。同一网络上的其他容器可以使用服务名称或此别名连接到服务的容器之一。
由于aliases
是网络范围的,所以相同的服务可以在不同的网络上具有不同的别名。
一般格式如下所示。
在下面的示例中,提供了三个服务(web
,worker
和db
),以及两个网络(new
和legacy
)。 db
服务在new
网络上的主机名db
或database
,legacy
网络中的db
或mysql
是可达的。
ipv4_address, ipv6_address
在加入网络时为此服务的容器指定静态IP地址。
顶级网络部分中的相应网络配置必须具有包含每个静态地址的子网和网关配置的ipam块。 如果需要IPv6寻址,则com.docker.network.enable_ipv6驱动程序选项必须设置为true。
link_local_ips
指定link-local IPs。 link-local IPs是属于众所周知的子网并且完全由运营商管理的特殊IP,通常取决于它们被部署的架构。 因此,它们不由docker(IPAM driver)管理。
用法示例:
pid
将PID模式设置为主机PID模式。 这将打开容器和主机操作系统之间的PID地址空间的共享。 使用此标志启动的容器将能够访问和操作裸机机器命名空间中的其他容器,反之亦然。
ports
公开端口。 指定两个端口(HOST:CONTAINER
),或只指定容器端口(将选择随机主机端口)。
security_opt
覆盖每个容器的默认标签方案。
stop_signal
设置停止容器的备用信号。 默认情况下停止使用SIGTERM
。 使用stop_signal
设置备用信号将导致停止发送该信号。
ulimits
覆盖容器的默认ulimits。 您可以将单个限制指定为整数或soft/hard限制作为映射。
volumes, volume_driver
装载路径或命名卷(可选)指定主机上的路径(HOST:CONTAINER
)或访问模式(HOST:CONTAINER:ro
)。 对于版本2文件,命名卷需要使用top-level volumes key`指定。 当使用版本1时,Docker Engine将自动创建命名卷(如果不存在)。
您可以在主机上安装相对路径,相对于正在使用的Compose配置文件的目录将相对路径。 相对路径应始终以.
要么..
。
如果不使用主机路径,则可以指定volume_driver
。
请注意,对于版本2文件,此驱动程序将不适用于named volumes(在使用declaring the volume时,应使用driver
选项)。 对于版本1,named volumes和container volumes都将使用指定的驱动程序。
有关更多信息,请参阅https://docs.docker.com/engine/userguide/dockervolumes/和Volume Plugins
volumes_from
从另一个服务或容器装入所有卷,可选择指定只读访问(ro
)或读写(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运行对应。
Volume configuration reference
虽然可以作为服务声明的一部分来即时声明卷,但是此部分允许您创建可以跨多个服务重用的命名卷(不依赖volumes_from
),并且可以使用docker命令行轻松检索和检查 或API。 有关更多信息,请参阅docker volume子命令文档。
driver
指定应为此卷使用哪个卷驱动程序。 默认为local
。 如果驱动程序不可用,Docker Engine将返回错误。
driver_opts
将选项列表指定为要传递给此卷的驱动程序的key-value pairs。 这些选项是驱动程序相关的 - 请参阅驱动程序文档以获取更多信息。 可选的。
external
如果设置为true
,则指定该卷已在Compose外部创建。 docker-compose up
不会尝试创建它,并且如果它不存在将会引发一个错误。
external
不能与其他卷配置键(driver
,driver_opts
)一起使用。
在下面的示例中,不是尝试创建名为[projectname] _data
的卷,Compose将查找现有的卷,简单地称为数据,并将其挂载到db服务的容器中。
您还可以指定卷的名称与用于在Compose文件中引用它的名称:
labels
使用Docker labels向容器添加元数据。 您可以使用数组或字典。
建议您使用反向DNS符号来防止您的标签与其他软件使用的标签冲突。
Network configuration reference
顶层网络键允许您指定要创建的网络。 有关Compose使用Docker网络功能的完整说明,请参阅Networking guide。
driver
指定应为此网络使用哪个驱动程序。
默认驱动程序取决于您使用的Docker引擎是如何配置的,但在大多数情况下,它将是单个主机上的bridge
和Swarm上的overlay
。
如果驱动程序不可用,Docker Engine将返回错误。
driver_opts
指定选项列表作为要传递给此网络驱动程序的键值对。 这些选项是driver-dependent - consult的驱动程序文档的更多信息。 可选的。
enable_ipv6
在此网络上启用IPv6网络。
ipam
指定自定义IPAM配置。 这是一个具有多个属性的对象,每个属性都是可选的:
- driver:自定义IPAM驱动程序,而不是默认值。
- config:具有零个或多个配置块的列表,每个配置块包含以下任意键:
subnet
: 表示网段的CIDR格式的子网ip_range
: 从中分配容器IPs的IP范围gateway
: 主子网的IPv4或IPv6网关* aux地址:网络驱动程序使用的辅助IPv4或IPv6地址,作为从主机名到IP地址的映射
A full example:
internal
默认情况下,Docker还将桥接网络连接到它以提供外部连接。 如果要创建外部隔离的覆盖网络,您可以将此选项设置为true。
labels
使用Docker标签向容器添加元数据。 您可以使用数组或字典。
建议您使用反向DNS符号来防止您的标签与其他软件使用的标签冲突。
external
如果设置为true,则指定此网络已在Compose之外创建。 docker-compose up
不会尝试创建它,并且如果它不存在将会引发一个错误。
外部不能与其他网络配置键(driver
,driver_opts
,group_add
,ipam
,internal
)一起使用。
在下面的示例中,proxy
是到外部世界的网关。 而不是尝试创建一个名为[projectname] _outside
的网络,Compose将查找一个现有的网络,简单地调用外outside
并连接outside
服务的容器。
您还可以单独指定网络的名称,与用于在Compose文件中引用它的名称:
Versioning
目前有三个版本的Compose文件格式:
- 版本1,传统格式。 这是通过省略YAML根目录下的版本键来指定的。
- 版本2,推荐格式。 这是使用版本:’2’条目在YAML的根目录指定。
- 版本2.1,升级超过版本2,利用了Docker Engine的最新特性。 使用版本:“2.1”条目指定YAML根目录。
要将项目从版本1移动到2,请参阅升级部分。
根据您使用的版本,有几点不同:
- 结构和允许的配置键
- 必须运行的最低Docker Engine版本
- 撰写关于网络的行为 这些差异如下所述。
Version 1
未声明版本的组合文件被视为“版本1”。 在这些文件中,所有服务都在文档的根目录处声明。
版本1由Compose到1.6.x支持。 它将在未来的Compose版本中被弃用。
版本1文件无法声明命名卷,网络或构建参数。
例:
Version 2
使用版本2语法的撰写文件必须指示文档根目录下的版本号。 所有服务必须在服务键下声明。
Compose 1.6.0+支持版本2文件,并需要版本1.10.0+的Docker引擎。
可以在volumes键下声明命名卷,并且可以在networks关键字下声明网络。
简单示例:
一个更广泛的例子,定义卷和网络:
Version 2.1
升级版本2,引入仅适用于Docker Engine版本1.12.0+的新参数
引入以下附加参数: * link_local_ips * isolation * labels
for volumes and networks
Upgrading
在大多数情况下,从版本1移动到2是一个非常简单的过程:
- 将整个文件缩进一级,并在顶部放置一个
services:
键。 - 添加一个
version: '2'
行在文件的顶部。
如果您使用特定的配置功能,则更复杂: * dockerfile
: This now lives under the build key:
log_driver
,log_opt
: These now live under thelogging
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: "container:[service name]"
, 用network_mode: "service:[service name]"
替换。如果你使用
net: "container:[container name/id]"
, 值可以不变。 -
具有命名卷的卷:这些必须现在必须在Compose文件的顶级卷部分中显式声明。 如果服务装载称为数据的命名卷,则必须在顶层卷部分中声明数据卷。 整个文件可能如下所示:
默认情况下,Compose会创建一个以项目名称为前缀的卷。 如果你想要它只是被称为数据,声明它为外部
Variable substitution
您的配置选项可以包含环境变量。 Compose使用运行docker-compose的shell环境中的变量值。 例如,假设shell包含EXTERNAL_PORT = 8000
,并且您提供此配置:
当使用此配置运行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处理的环境变量。
如果您忘记并使用单个美元符号($
),Compose将该值解释为环境变量并将警告您:
未设置VAR_NOT_INTERPOLATED_BY_COMPOSE。 替换空字符串。
参考地址: [1]https://docs.docker.com/compose/compose-file
本文链接:https://deepzz.com/post/docker-compose-file.html,参与评论 »
--EOF--
更多推荐
所有评论(0)