Overview of Docker Compose

预计阅读时间:8分钟

加速 Docker Desktop 中的新功能

Docker Desktop 可帮助您在 Mac 和 Windows 上轻松构建、共享和运行容器,就像在 Linux 上一样. Docker 处理复杂的设置并允许您专注于编写代码. 感谢我们在订阅更新方面获得的积极支持,我们已经开始着手开发适用于 Linux 的 Docker Desktop,这是我们公共路线图中第二受欢迎的功能请求. 如果您对抢先体验感兴趣,请注册我们的开发者预览计划.

寻找撰写文件参考? 在这里找到最新版本.

Compose 是一个用于定义和运行多容器 Docker 应用程序的工具. 使用 Compose,您可以使用 YAML 文件来配置应用程序的服务. 然后,使用一个命令,您可以从您的配置中创建并启动所有服务. 要了解有关 Compose 的所有功能的更多信息,请参阅功能列表.

Compose 适用于所有环境:生产、登台、开发、测试以及 CI 工作流程. 您可以在常见用例中了解有关每个案例的更多信息.

使用 Compose 基本上是一个三步过程:

  1. 使用Dockerfile定义应用程序的环境,以便可以在任何地方复制它.

  2. docker-compose.yml中定义构成应用程序的服务,以便它们可以在隔离环境中一起运行.

  3. 运行docker compose upDocker compose 命令启动并运行您的整个应用程序. 您也可以使用 docker-compose 二进制文件运行docker-compose up .

docker-compose.yml看起来像这样:

version: "3.9"  # optional since v1.27.0
services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

有关 Compose 文件的详细信息,请参阅Compose 文件参考.

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

  • 启动、停止和重建服务
  • 查看运行服务的状态
  • 流式传输正在运行的服务的日志输出
  • 在服务上运行一次性命令

Compose V2 and the new docker compose command

Important

新的 Compose V2 支持将compose命令作为 Docker CLI 的一部分,现已推出.

Compose V2 将 compose 功能集成到 Docker 平台中,继续支持之前的大部分docker-compose功能和标志. 您可以使用docker compose而不是docker-compose将连字符 ( - ) 替换为空格来运行 Compose V2.

如果您依赖将 Docker Compose 用作docker-compose (带有连字符),则可以将 Compose V2 设置为替代之前的docker-compose . 有关详细说明,请参阅安装 Compose部分.

Context of Docker Compose evolution

Compose 规范的引入明确区分了 Compose YAML 文件模型和docker-compose实现. 进行此更改启用了许多增强功能,包括将compose命令直接添加到 Docker CLI 中,能够通过简单地切换 Docker 上下文在云平台上"启动" Compose 应用程序,以及启动Amazon ECSMicrosoft ACI . 随着 Compose 规范的发展,新功能在 Docker CLI 中的落地速度更快.

Compose V2 直接依赖于作为规范的一部分维护的 compose-go 绑定. 这使我们能够包含社区提案、Docker CLI 和/或引擎的实验性实现,并更快地向用户提供功能. Compose V2 还支持规范中的一些新增内容,例如配置文件GPU设备.

Compose V2 已在Go中重新编写,改进了与其他 Docker 命令行功能的集成,并允许它在 Apple 芯片、Windows 和 Linux 上的 macOS 上本机运行,而无需依赖 Python 等.

有关与 compose v1 命令行兼容性的更多信息,请参阅docker-compose 兼容性列表.

Features

Compose 使其有效的特点是:

Multiple isolated environments on a single host

Compose 使用项目名称将环境彼此隔离. 您可以在几个不同的上下文中使用此项目名称:

  • on a dev host, to create multiple copies of a single environment, such as when you want to run a stable copy for each feature branch of a project
  • 在 CI 服务器上,为了防止构建相互干扰,您可以将项目名称设置为唯一的构建号
  • 在共享主机或开发主机上,以防止可能使用相同服务名称的不同项目相互干扰

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

默认项目目录是 Compose 文件的基本目录. 可以使用--project-directory命令行选项为其定义自定义值.

Preserve volume data when containers are created

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

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

Only recreate containers that have changed

Compose 缓存用于创建容器的配置. 当您重新启动未更改的服务时,Compose 会重新使用现有容器. 重复使用容器意味着您可以非常快速地更改您的环境.

Variables and moving a composition between environments

Compose 支持 Compose 文件中的变量. 您可以使用这些变量为不同的环境或不同的用户定制您的组合. 有关详细信息,请参阅变量替换.

您可以使用extends字段或通过创建多个 Compose 文件来扩展 Compose 文件. 有关更多详细信息,请参阅扩展.

Common use cases

Compose 可以以多种不同的方式使用. 下面概述了一些常见的用例.

Development environments

When you’re developing software, the ability to run an application in an isolated environment and interact with it is crucial. The Compose command line tool can be used to create the environment and interact with it.

Compose 文件提供了一种方法来记录和配置应用程序的所有服务依赖项(数据库、队列、缓存、Web 服务 API 等). 使用 Compose 命令行工具,您可以使用单个命令 ( docker-compose up ) 为每个依赖项创建和启动一个或多个容器.

这些特性共同为开发人员提供了一种开始项目的便捷方式. Compose 可以将多页的"开发人员入门指南"简化为单个机器可读的 Compose 文件和一些命令.

Automated testing environments

任何持续部署或持续集成过程的一个重要部分是自动化测试套件. 自动化的端到端测试需要一个运行测试的环境. Compose 提供了一种方便的方法来为您的测试套件创建和销毁隔离的测试环境. 通过在Compose 文件中定义完整环境,您只需几个命令即可创建和销毁这些环境:

$ docker-compose up -d
$ ./run_tests
$ docker-compose down

Single host deployments

Compose 传统上专注于开发和测试工作流程,但随着每个版本的发布,我们都在更多面向生产的功能方面取得进展.

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

Release notes

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

Getting help

Docker Compose 正在积极开发中. 如果您需要帮助,想贡献,或者只是想与志同道合的人谈论这个项目,我们有许多开放的沟通渠道.

documentation, docs, docker, compose, orchestration, containers

by  icopy.site