合并并输出多个 Compose 文件的配置
在这一步中,你将学习如何合并多个 Docker Compose 文件的配置,并输出最终合并后的配置。这是一个强大的功能,允许你定义一个基础配置,然后使用额外的文件对其进行覆盖或扩展,这对于管理不同的环境(例如开发、预发布、生产环境)非常有用。
我们将继续在 ~/project
目录中进行操作。在上一步中,我们创建了一个 docker-compose.yaml
文件。现在,让我们创建另一个 Compose 文件来扩展基础配置。我们将其命名为 docker-compose.override.yaml
。
nano ~/project/docker-compose.override.yaml
将以下内容粘贴到 docker-compose.override.yaml
文件中:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
这个覆盖文件修改了 docker-compose.yaml
中定义的 web
服务。它将主机端口映射从 80 改为 8080,并添加了一个卷挂载,用于从名为 html
的本地目录提供静态 HTML 内容。
按 Ctrl + X
,然后按 Y
,再按 Enter
保存文件。
现在,让我们创建 html
目录,并在其中创建一个简单的 index.html
文件。
mkdir ~/project/html
nano ~/project/html/index.html
将以下内容粘贴到 ~/project/html/index.html
中:
<h1>Hello from Nginx!</h1>
按 Ctrl + X
,然后按 Y
,再按 Enter
保存文件。
默认情况下,Docker Compose 会自动在当前目录中查找 docker-compose.yaml
和 docker-compose.override.yaml
并将它们合并。覆盖文件中的配置优先级更高。
要查看合并后的配置,请确保你位于 ~/project
目录中,然后再次运行 docker-compose config
命令。
cd ~/project
docker-compose config
现在你应该会看到合并后的配置,其中 web
服务的端口映射为 8080:80
,并且有卷挂载 ./html:/usr/share/nginx/html
。
你还可以使用 -f
标志显式指定要使用的 Compose 文件。指定文件的顺序很重要,因为后面的文件会覆盖前面的文件。
例如,要显式合并 docker-compose.yaml
和 docker-compose.override.yaml
,你可以运行:
docker-compose -f docker-compose.yaml -f docker-compose.override.yaml config
在这种情况下,这将产生与不使用 -f
标志运行 docker-compose config
相同的合并输出,因为 docker-compose.override.yaml
会在 docker-compose.yaml
之后被自动检测并合并。