什么是 Docker Compose?
说明
如果您一直按照指南操作,您一直在使用单容器应用程序。但是现在,您想要做一些更复杂的事情——运行数据库、消息队列、缓存或各种其他服务。您是在一个容器中安装所有内容吗?还是运行多个容器?如果运行多个,您如何将它们连接在一起?
容器的一个最佳实践是每个容器应该只做一件事并且把它做好。虽然这条规则有例外,但要避免让一个容器做多个事情的倾向。
您可以使用多个 docker run 命令来启动多个容器。但是,您很快就会意识到需要管理网络、连接容器到这些网络所需的所有标志以及更多内容。当您完成后,清理工作会稍微复杂一些。
使用 Docker Compose,您可以在单个 YAML 文件中定义所有容器及其配置。如果将此文件包含在您的代码仓库中,任何克隆您仓库的人都可以通过单个命令快速启动和运行。
重要的是要理解 Compose 是一个声明式工具 - 你只需定义它并开始使用。你并不总是需要从头开始重新创建所有内容。如果你进行了更改,请再次运行 docker compose up,Compose 将会协调你文件中的更改并智能地应用它们。
Dockerfile 与 Compose 文件
Dockerfile 提供了构建容器镜像的指令,而 Compose 文件定义了正在运行的容器。通常,Compose 文件会引用 Dockerfile 来构建用于特定服务的镜像。
试用
在这个实践中,你将学习如何使用 Docker Compose 运行多容器应用程序。你将使用一个用 Node.js 构建的简单待办事项列表应用程序,并使用 MySQL 作为数据库服务器。
启动应用程序
按照说明在您的系统上运行待办事项列表应用程序。
下载并安装 Docker Desktop。
打开终端并 克隆此示例应用程序。
git clone https://github.com/dockersamples/todo-list-app进入
todo-list-app目录:cd todo-list-app在此目录中,您将找到一个名为
compose.yaml的文件。这个 YAML 文件是所有神奇之处发生的地方!它定义了构成您应用程序的所有服务及其配置。每个服务都指定了其镜像、端口、卷、网络以及其功能所需的任何其他设置。花一些时间探索这个 YAML 文件,并熟悉其结构。使用
docker compose up命令启动应用程序:docker compose up -d --build当您运行此命令时,您应该会看到类似以下的输出:
[+] Running 4/4 ✔ app 3 layers [⣿⣿⣿] 0B/0B Pulled 7.1s ✔ e6f4e57cc59e Download complete 0.9s ✔ df998480d81d Download complete 1.0s ✔ 31e174fedd23 Download complete 2.5s [+] Running 2/4 ⠸ Network todo-list-app_default Created 0.3s ⠸ Volume "todo-list-app_todo-mysql-data" Created 0.3s ✔ Container todo-list-app-app-1 Started 0.3s ✔ Container todo-list-app-mysql-1 Started 0.3s这里发生了很多事情!有几点需要特别指出:
- 从 Docker Hub 下载了两个容器镜像 - node 和 MySQL
- 已为您的应用程序创建了网络
- 已创建一个卷,以便在容器重启之间持久化数据库文件
- 启动了两个容器,并配置了所有必要的配置
如果这让你感到不知所措,别担心!你会掌握的!
现在一切都已经启动并运行,您可以在浏览器中打开 http://localhost:3000 来查看网站。您可以随意向列表中添加项目、勾选它们或删除它们。

如果您查看 Docker Desktop 图形用户界面,您可以看到容器并深入了解它们的配置。

拆解它
由于此应用程序是使用 Docker Compose 启动的,因此在完成操作后可以轻松地将其全部停止。
在 CLI 中,使用
docker compose down命令来删除所有内容:docker compose down您将看到类似于以下的输出:
[+] Running 2/2 ✔ Container todo-list-app-mysql-1 Removed 2.9s ✔ Container todo-list-app-app-1 Removed 0.1s ✔ Network todo-list-app_default Removed 0.1s卷持久化
默认情况下,当您停止 Compose 栈时,卷不会自动删除。这是因为如果您再次启动该栈,可能需要保留这些数据。
如果您确实想要删除卷,请在运行
docker compose down命令时添加--volumes标志:docker compose down --volumes或者,您可以使用 Docker Desktop 图形用户界面来删除容器,方法是选择应用程序堆栈,然后选择 删除 按钮。

使用 GUI 管理 Compose 堆栈
请注意,如果您在 GUI 中删除 Compose 应用程序的容器,它只会删除容器。如果您想删除网络和卷,则需要手动操作。
在本教程中,您学习了如何使用 Docker Compose 启动和停止多容器应用程序。
其他资源
本页是对 Compose 的简要介绍。在以下资源中,您可以深入了解 Compose 以及如何编写 Compose 文件。