什么是 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 桌面 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 堆栈时,卷不会自动删除。这个想法是,如果您再次启动堆栈,您可能希望恢复数据。
如果您确实想要删除卷,请
--volumes
在运行docker compose down
命令时添加该标志:docker compose down --volumes
或者,您可以使用 Docker Desktop GUI 通过选择应用程序堆栈并选择“删除”按钮来删除容器。
使用 Compose 堆栈的 GUI
请注意,如果您在 GUI 中删除 Compose 应用程序的容器,则只会删除容器。如果需要,您必须手动删除网络和卷。
在本演练中,您学习了如何使用 Docker Compose 启动和停止多容器应用程序。
其他资源
本页是对 Compose 的简要介绍。在以下资源中,您可以更深入地了解 Compose 以及如何编写 Compose 文件。