使用 --ignore-buildable 标志拉取服务镜像
在本步骤中,我们将探索如何结合使用 --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
标志如何让你有选择地仅拉取预构建镜像,这在各种开发和部署场景中非常有用。