什么是 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
- 为您的应用程序创建了一个网络
- 创建了一个卷来持久化数据库文件,以便在容器重启之间保留它们
- 启动了两个容器,并配置了所有必需的配置
如果这感觉很复杂,别担心!您会克服的!
现在一切都已经启动并运行,您可以在浏览器中打开 https://127.0.0.1:3000 查看网站。随意将项目添加到列表中,勾选它们,并删除它们。
如果您查看 Docker Desktop GUI,您将看到容器,并可以深入了解它们的配置。
拆卸
由于此应用程序是使用 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 通过选择应用程序堆栈并选择 **删除** 按钮来删除容器。
使用 GUI 操作 Compose 堆栈
请注意,如果您在 GUI 中删除了 Compose 应用程序的容器,那么它只删除了容器。如果您想要删除网络和卷,则需要手动进行。
在本演练中,您学习了如何使用 Docker Compose 启动和停止多容器应用程序。
其他资源
本页是对 Compose 的简要介绍。在以下资源中,您可以更深入地了解 Compose 以及如何编写 Compose 文件。