非常教程

Docker 17参考手册

撰写 | Compose

关于版本和升级 | About versions and upgrading (Compose)

Compose文件是一个定义Docker应用程序的服务,网络和卷的YAML文件。

现在在这些参考文献中描述了撰写文件格式,这些文件格式针对每个版本。

参考文件

在这个版本中改变了什么

版本3(最新,推荐)

版本3更新

版本2

版本2更新

版本1

版本1更新

下面的主题解释了版本之间的差异,Docker Engine兼容性以及如何升级。

兼容性矩阵

有几种版本的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文件格式3.0首先在Compose版本1.10.0中引入,并在随后的版本中逐步版本化。

在Docker和Compose兼容性上寻找更多细节?我们建议尽可能保持最新的版本。但是,如果您使用的是较旧版本的Docker,并且想要确定哪个Compose版本兼容,请参阅撰写发行说明。每套发行说明都详细介绍了哪些版本的Docker Engine受支持,以及兼容的Compose文件格式版本。(另见#3404号讨论。)

有关版本和如何升级的详细信息,请参阅版本控制和升级。

版本

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

  • 版本1,传统格式。这是通过省略versionYAML根部的一个键来指定的。
  • 版本2.x. 这是通过YAML根部的一个version: '2'或者version: '2.1'等等条目指定的。
  • 版本3.x是最新和推荐的版本,旨在在Compose和Docker Engine的swarm模式之间交叉兼容。这是通过YAML根部的一个version: '3'或者version: '3.1'等等条目指定的。

兼容性矩阵显示映射到Docker Engine发行版的Compose文件版本。

要将项目移到更高版本,请参阅升级部分。

注意:如果您使用多个Compose文件或扩展服务,则每个文件的版本必须相同 - 例如,不能在单个项目中混合使用版本1和版本2。

根据您使用的版本,有几件事情会有所不同:

  • 结构和允许的配置键
  • 您必须运行的最低Docker引擎版本
  • 撰写关于网络的行为

下面将解释这些差异。

版本1

撰写不声明版本的文件被认为是“版本1”。在这些文件中,所有服务都是在文档的根部声明的。

版本1是支持撰写高达1.6.x版。它将在未来的Compose版本中被弃用。

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

使用版本1时,Compose不利用网络:每个容器都放置在默认bridge网络上,并且可以通过其IP地址上的每个其他容器进行访问。您将需要使用链接来启用容器之间的发现。

例:

web:
  build: .
  ports:
   - "5000:5000"
  volumes:
   - .:/code
  links:
   - redis
redis:
  image: redis

版本2

使用版本2语法撰写文件必须在文档的根目录中指明版本号。所有服务必须在services密钥下声明。

版本2文件由Compose 1.6.0+支持,并且需要版本为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

添加了其他几个选项来支持联网,例如:

  • aliases
  • depends_on选项可用于代替链接以指示服务和启动顺序之间的依赖关系。版本:'2'服务:web:build:。depends_on: - db - redis redis:image:redis db:image:postgres
  • ipv4_address, ipv6_address

版本2中也添加了变量替换。

版本2.1

引入仅在Docker引擎版本1.12.0以上提供的新参数的版本2的升级。Compose 1.9.0+支持版本2.1文件。

引入以下附加参数:

  • link_local_ips
  • isolation
  • labels 对于卷和网络
  • name 为卷
  • userns_mode
  • healthcheck
  • sysctls
  • pids_limit

版本2.2

2.1版本的升级引入了仅在Docker Engine版本1.13.0+中可用的新参数。Compose 1.13.0+支持版本2.2文件。该版本还允许您指定服务配置中的默认缩放编号。

引入以下附加参数:

  • init
  • scale

版本2.3

2.2版的升级引入了仅在Docker Engine版本17.06.0以上版本中提供的新参数。Compose 1.16.0+支持版本2.3文件。

引入以下附加参数:

  • target 用于构建配置
  • start_period 对于 healthchecks

版本3

为了在Compose和Docker Engine的swarm模式之间交叉兼容,版本3删除了几个选项并添加了更多选项。

  • 删除:volume_drivervolumes_fromcpu_sharescpu_quotacpusetmem_limitmemswap_limitextendsgroup_add。请参阅升级指南以了解如何迁移这些指南。(有关更多信息extends,请参阅扩展服务。)
  • 补充:部署

版本3.3

引入仅适用于Docker Engine 17.06.0及更高版本的新参数的版本3的升级。

引入以下附加参数:

  • 建立 labels
  • credential_spec
  • configs
  • 部署 endpoint_mode

升级

版本2.x到3.x

在版本2.x和3.x之间,撰写文件的结构是相同的,但是几个选项已被删除:

  • volume_driver:不是在服务上设置卷驱动,而是使用顶层volumes选项定义卷并在那里指定驱动。版本:“3”服务:db:image:postgres卷: - data:/ var / lib / postgresql / data卷:data:驱动程序:mydriver
  • volumes_from:要在服务之间共享卷,请使用顶级volumes选项对其进行定义,并从使用服务级别volumes选项共享服务的每个服务中引用它。
  • cpu_sharescpu_quotacpusetmem_limitmemswap_limit:这些已被替换下的资源键deploy。请注意,deploy配置仅在使用时生效docker stack deploy,并被忽略docker-compose
  • extends:对于version: "3.x"撰写文件,此选项已被删除。(有关更多信息,请参阅扩展服务。)
  • group_add:对于version: "3.x"撰写文件,此选项已被删除。
  • pids_limit:此选项尚未在version: "3.x"Compose文件中引入。
  • link_local_ipsin networks:该选项尚未在version: "3.x"Compose文件中引入。

版本1到2.x

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

  1. 将整个文件缩进一层,并services:在顶部放置一个键。
  2. version: '2'在文件顶部添加一行。

如果您使用特定的配置功能,则会更加复杂:

  • dockerfile:现在生活在build关键之下:build:context:。dockerfile:Dockerfile-alternate
  • log_driverlog_opt:这些现在生活在logging密钥下:logging:driver:syslog options:syslog-address:“tcp://192.168.0.42:123”
  • links使用环境变量:如环境变量引用中所述,由链接创建的环境变量已被弃用一段时间。在新的Docker网络系统中,它们已被删除。您应该直接连接到适当的主机名或使用链接主机名设置相关的环境变量: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”
  • volumes使用命名卷:现在必须在volumesCompose文件的顶级部分显式声明这些命令。如果某个服务装载了一个已命名的卷data,则必须data在顶级volumes部分中声明一个卷。整个文件可能如下所示:版本:'2'服务:db:image:postgres卷: - data:/ var / lib / postgresql / data卷:data:默认情况下,Compose创建一个卷,其名称带有前缀与您的项目名称。如果您希望仅调用data它,请将其声明为external:volumes:data:external:true

撰写文件格式参考

  • 撰写文件版本3
  • 撰写文件版本2
  • 撰写文件版本1

撰写 | Compose相关

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

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

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