Docker Compose 是什么

一句话总结

Docker Compose 用一份 YAML 文件定义多个容器的关系(谁连谁、谁依赖谁、谁用什么端口),然后一条命令全部启动。

🤔 为什么会有它 / 解决了什么问题

Docker 本身只管理单个容器(docker run xxx)。但真实应用往往需要多个容器配合:一个 Web 服务 + 一个数据库 + 一个 Redis + 一个任务队列。Docker Compose 让你用 docker-compose.yml 描述这个”容器群”的整体拓扑,避免每次手动拼 --link -v -p 等一堆参数。

🔍 具体原理 / 运作逻辑

Compose 解析 YAML 文件中定义的 services(每个 service = 一个容器或其副本)、networks(容器间的虚拟网络)、volumes(持久化数据卷),然后按依赖顺序启动容器。启动后所有容器加入同一个默认网络,可以通过 service 名称互相访问(内置 DNS 解析)。

🧭 什么情况下会用到

  • 本地开发时需要同时启动数据库、缓存、消息队列等多个依赖服务
  • 部署一个由多个容器组成的应用(如我们的 Frappe Press:11 个容器在一个 compose file 里)
  • CI/CD 中跑集成测试时一键拉起依赖服务

🛠️ 怎么上手 / 在哪操作

docker-compose.ymldocker compose up -d 启动 → docker compose logs -f 看日志 → docker compose down 停止。Press 部署的 docker-compose.yml 定义了 backend、frontend、Redis×3、MariaDB、Nginx 等 11 个服务。

⚖️ 副作用 / 代价 / 取舍

  • 单机限定:Compose 不能跨多台服务器编排容器(那是 K8s 的领域)
  • “Docker Compose 就是生产部署方案”是个常见陷阱——没有自愈、没有自动扩缩容、没有滚动更新
  • docker compose down -v 会删除所有卷(包括数据库数据),是 Press 当前架构最大的脆弱点

🕰️ 来历

  • 谁提出/创造的:Docker Inc.(原名 Fig,由 Orchard Labs 开发,Docker 收购后改名为 Compose)
  • 什么时候出现的:Fig 2013 年发布 → 2014 年 Docker 收购 → 更名为 Docker Compose

🔗 关联 / 经常一起出现的概念

  • Docker:Compose 管”多容器编排”,Docker 管”单容器生命周期”。两者是互补K8srnetes]]**:生产环境的多机容器编排方案,比 Compose 复杂十倍但也强大十倍。Akash Network 在 K8s 之上构建去中心化算力市场。
  • Dockerfile:定义单个容器怎么构建。Compose 把多个 Dockerfile 产出的镜像组装成完整应用。

⚠️ 注意事项 / 常见误区

docker compose down -v 会删除 volumes 块中定义的所有数据卷(包括数据库内容)。Press 部署中 press-db-datapress-sites 两个卷包含所有生产数据,误操作 = 全站丢失。备份策略必须独立于 Compose。

📎 记忆锚点

像宜家家具的装配说明书——Docker 是每块木板(单容器),Compose 是说清哪块板接哪块、用几号螺丝的那张纸(容器拓扑定义)。

📝 更新日志

日期改动原因
2026-07-14首次创建-