拉取服务镜像(忽略可构建服务)
在本步骤中,我们将探索如何结合使用 --ignore-buildable 标志与 docker compose pull 命令。当你的 compose.yaml 文件同时包含基于 Dockerfile 构建的服务(可构建服务)和使用预构建镜像的服务时,这个标志特别有用。--ignore-buildable 标志会指示 Docker Compose 仅拉取指定了 image 键的服务镜像,而跳过指定了 build 键的服务。
首先,让我们修改 compose.yaml 文件来添加一个可构建服务。我们将添加一个构建基础镜像的简单服务。
确保你位于 ~/project/my-compose-app 目录下。
cd ~/project/my-compose-app
现在,为我们的可构建服务创建一个简单的 Dockerfile。
nano Dockerfile
将以下内容粘贴到 Dockerfile 中:
FROM alpine:latest
CMD ["echo", "Hello from buildable service!"]
保存文件并退出 nano 编辑器。
接下来,修改 compose.yaml 文件以包含使用这个 Dockerfile 的新服务。
nano compose.yaml
在 db 服务下方添加以下服务定义:
builder:
build: .
现在你的完整 compose.yaml 文件应该如下所示:
services:
web:
image: nginx:latest
ports:
- "80:80"
db:
image: redis:latest
builder:
build: .
保存文件并退出 nano 编辑器。
现在,让我们尝试使用 docker compose pull --ignore-buildable 来拉取镜像。
docker compose pull --ignore-buildable
你会观察到 Docker Compose 检查了 web 和 db 服务并拉取了它们的镜像(这些镜像应该已在前面的步骤中拉取过)。然而,它会忽略 builder 服务,因为该服务使用了 build 键而非 image 键。你不会看到任何与构建或拉取 builder 服务镜像相关的输出。
要确认没有为 builder 服务构建或拉取镜像,你可以列出 Docker 镜像。
docker images
你应该仍然只看到 nginx 和 redis 镜像的列表。这个命令不会从 Dockerfile 创建新的镜像。
这演示了 --ignore-buildable 标志如何让你有选择地仅拉取预构建镜像,这在各种开发和部署场景中非常有用。