Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。要了解有关Compose的所有功能的更多信息,请参阅功能列表。
Compose可在所有环境中工作:生产,分期,开发,测试以及CI工作流。您可以在“ 常见用例”中了解有关每种情况的更多信息。
使用Compose基本上是一个三步过程:
-
使用
Dockerfile
定义您的应用环境,以便可以在任何地方重建。 -
使用docker-compose.yml
定义组成应用程序的服务, 以便它们可以在隔离的环境中一起运行。 -
运行
docker-compose up,以
启动并运行您的整个应用程序。
一个docker-compose.yml
看起来像这样:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
有关Compose文件的更多信息,请参见 Compose文件参考。
Compose具有用于管理应用程序整个生命周期的命令:
- 启动,停止和重建服务
- 查看正在运行的服务的状态
- 以流的形式输出正在运行的服务的日志
- 在服务上运行一次性命令
Compose文档
特征
使Compose有效的功能包括:
单个主机上的多个隔离环境
Compose使用项目名称将环境彼此隔离。您可以在几个不同的上下文中使用此项目名称:
- 在开发主机上,以创建单个环境的多个副本,例如当您要为项目的每个功能分支运行稳定副本时
- 在CI服务器上,为防止内部版本相互干扰,可以将项目名称设置为唯一的内部版本号
- 在共享主机或开发主机上,以防止可能使用相同服务名称的不同项目相互干扰
默认项目名称是项目目录的基本名称。您可以使用-p
命令行选项或 COMPOSE_PROJECT_NAME
环境变量来设置自定义项目名称 。
创建容器时保留卷数据
Compose保留您的服务使用的所有卷。当docker-compose up
运行时,如果它从以前的运行中找到任何容器,则将卷从旧容器复制到新容器。此过程可确保您在卷中创建的所有数据均不会丢失。
如果docker-compose
在Windows计算机上使用,请参阅 环境变量并根据您的特定需求调整必要的环境变量。
仅重新创建已更改的容器
Compose缓存用于创建容器的配置。重新启动未更改的服务时,Compose会重新使用现有容器。重复使用容器意味着您可以快速更改环境。
变量和环境之间的合成移动
Compose支持Compose文件中的变量。您可以使用这些变量针对不同的环境或不同的用户自定义合成。有关更多详细信息,请参见变量替换。
您可以使用该extends
字段或通过创建多个Compose文件来扩展Compose文件。有关更多详细信息,请参见扩展。
常见用例
Compose可以以多种不同方式使用。下面概述了一些常见的用例。
开发环境
在开发软件时,在孤立的环境中运行应用程序并与之交互的能力至关重要。撰写命令行工具可用于创建环境并与之交互。
在Compose文件提供了一种方法来记录和配置所有应用程序的服务依赖(数据库,队列,高速缓存,Web服务的API,等等)。使用Compose命令行工具,您可以使用单个命令(docker-compose up
)为每个依赖项创建并启动一个或多个容器。
这些功能一起为开发人员提供了一种方便的方式来开始项目。Compose可以将多页的“开发人员入门指南”简化为单个机器可读的Compose文件和一些命令。
自动化测试环境
自动测试套件是任何持续部署或持续集成过程的重要组成部分。自动化的端到端测试需要在其中运行测试的环境。Compose提供了一种方便的方法来为您的测试套件创建和销毁隔离的测试环境。通过在Compose文件中定义完整的环境,您只需几个命令即可创建和销毁这些环境:
$ docker-compose up -d
$ ./run_tests
$ docker-compose down
单主机部署
传统上,Compose一直专注于开发和测试工作流,但是在每个版本中,我们都在面向生产的更多功能方面取得了进展。您可以使用Compose部署到远程Docker Engine。Docker Engine可以是配备有Docker Machine的单个实例,也可以是 整个 Docker Swarm集群。
有关使用面向生产的功能的详细信息,请参阅 本文档中的“ 在生产中使用Compose”。
发行说明
要查看Docker Compose的过去和当前版本的更改的详细列表,请参阅 CHANGELOG。
获得帮助
Docker Compose正在积极开发中。如果您需要帮助,希望做出贡献或只是想与志趣相投的人谈论该项目,我们有许多开放的沟通渠道。
-
要与人们实时讨论该项目:
#docker-compose
在freenode IRC上加入 频道。
有关更多信息和资源,请访问“ 获得帮助”项目页面。