docker/compose

运维与部署

用一个 YAML 文件定义多容器 Docker 应用,并用一条命令启动。

38,532
5,891
Go
Apache-2.0
创建于 12 年前

Docker Compose 用于把由多个容器组成的 Docker 应用写进一个 Compose 文件,然后整体启动这些服务。它适合已经在使用 Docker、希望获得可重复的本地或测试环境的开发者和小团队,避免为每个服务手写启动命令。

改变了什么工作流程

不必再手动构建镜像并逐个启动容器,而是在 compose.yaml 中描述服务——构建上下文、端口、卷、镜像——然后运行 docker compose up。README 的快速开始是一个三步循环:先写 Dockerfile 定义应用环境,再在 Compose 文件中列出服务,最后把整套服务作为一个隔离环境启动。示例中 web 服务从当前目录构建并暴露 5000 端口,redis 服务则来自公共镜像 README 快速开始。

最终得到的是一份声明式配置,把服务配置集中在一起,启动、停止和分享同一套栈不再依赖记住每个容器的参数。

运行环境与安装方式

在 Windows 和 macOS 上,Compose 随 Docker Desktop 一起提供,因此安装 Docker Desktop 是常见路径 获取 Docker Compose、Docker Desktop。在 Linux 上,需要从仓库的 release 页面下载二进制文件,重命名为 docker-compose,赋予可执行权限,再放入 Docker CLI 插件目录——既可以是用户级的 $HOME/.docker/cli-plugins,也可以是文档列出的系统级插件目录 Linux 安装说明、releases。

需要了解的边界

  • Docker 本身是前提。 Compose 在 Docker 之上编排容器,并不是独立的运行时。
  • Swarm 是另一回事。 README 指出 Docker Swarm 从未采用 Compose 规范,因此部分较新的 Compose 语法和功能对 Swarm 用户不可用;在被 Mirantis 收购后,Swarm 也不再由 Docker Inc. 维护 README 关于 Swarm 的说明、Mirantis。
  • 旧的 Python 实现属于 legacy。 它保留在 v1 分支,当前开发的是 Go 代码库 legacy 部分。
  • 旧讨论不代表当前行为。 2019 年有一个讨论关于 Compose 会读取 .env 且无法关闭 HN 讨论,这应视为历史背景,而不是今天文档的描述。

适用场景

当项目已经运行在 Docker 上,并且需要一种可重复的方式在单机上启动多个相关服务——例如应用加数据库或缓存——Compose 是合理的选择。它本身不解决跨多主机的生产编排;这一角色历史上由 Swarm 承担,而 README 已标明 Swarm 不在 Docker Inc. 当前维护范围内。

项目采用 Apache-2.0 许可证,README 将为项目做贡献的读者指向单独的贡献指南和 issue 跟踪器 贡献。

本文由 AI 根据项目 README 生成,更新于 2026年10月29日,以项目官方文档为准。

Hacker News 讨论

Docker Compose reads your “.env” without opt-out
▲ 160 · 77 条评论 · 2019年10月17日
Compose Spec Updated with <models> for AI Workloads
▲ 16 · 10 条评论 · 2025年7月2日
Docker Compose (aka fig) Released
▲ 15 · 1 条评论 · 2015年2月25日