Skip to content

[译]Docker Compose概述

原文地址:Overview of Docker Compose

Compose是一个定义和运行多容器的Docker工具。对于Compose而言,通过YAML文件配置应用程序,然后使用一个命令即可根据配置文件创建并启动所有服务。更多有关Compose的特性可查看the list of features

可以在所有环境中撰写Compose:生产(producing)、准备(staging)、开发(testing)、测试以及CI工作流。更多用例在Common Use Case

Compose使用通常分为以下3个步骤:

  1. 使用Dockerfile定义应用程序的环境,以便可以在任何地方复用
  2. docker-compose.yml中定义组成应用程序的服务,以便它们可以在独立的环境中一起运行
  3. 运行命令docker-compose up,启动Compose并运行整个应用程序

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 file reference

Compose有用于管理应用程序整个生命周期的命令:

  • 开始,停止和重建服务
  • 查看运行服务的状态
  • 流式处理正在运行的服务的日志输出
  • 对服务运行一次性命令

Compose文档

特性

Compose特性有:

单个主机上的多个隔离环境

Compose使用工程名(project name)将环境彼此隔离。可以在几个不同的上下文中使用这个工程名:

  • 在开发主机上创建单个环境的多个副本,例如当希望为项目的每个特征分支运行一个稳定的副本时
  • CI服务器上,为了避免生成相互干扰,可以将项目名称设置为唯一的生成号
  • 在共享主机或开发主机上,以防止可能使用相同服务名称的不同项目相互干扰

默认工程名是工程目录的基名。可以使用-p命令行选项COMPOSE_PROJECT_NAME环境变量设置自定义工程名

创建容器时保留卷数据

Compose保留服务使用的所有卷。运行docker-compose up时,如果发现以前运行的任何容器,它会将卷从旧容器复制到新容器。此过程确保在卷中创建的任何数据不会丢失

如果在Windows机器上使用docker compose,参考环境变量,并根据特定需要调整必要的环境变量

仅重新创建已更改的容器

Compose缓存用于创建容器的配置。当重新启动未更改的服务时,Compose重用现有的容器。重用容器意味着可以很快地对环境进行更改

变量和在环境之间移动组合

Compose支持Compose文件中的变量。可以使用这些变量为不同的环境或不同的用户自定义组合。参考Variable substitution

常用示例

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引擎。Docker引擎可以是由Docker Machine提供的单个实例,也可以是整个Docker Swarm集群

有关使用面向生产的功能的详细信息,参考本文档中的compose in production

版本说明

要查看Docker Compose的过去和当前版本的详细更改列表,参考CHANGELOG

求助

Docker Compose正在积极开发中。如果需要帮助,想投稿,或者只想和志趣相投的人谈谈项目,我们就有一些开放的渠道进行沟通

  • 报告错误或文件功能请求,请使用issue tracker on Github
  • 与人实时地讨论项目:加入freenode IRC上的#docker-compose频道
  • 提交代码或文档更改:在GITHUB上提交一个pull request

有关更多信息和资源,访问Getting Help project page