Загрузка образов сервисов с игнорированием сборки (buildable services)
В этом шаге мы рассмотрим использование флага --ignore-buildable
с командой docker compose pull
. Этот флаг полезен, когда ваш файл compose.yaml
содержит как сервисы, использующие готовые образы, так и сервисы, которые собираются из Dockerfile (buildable services). Флаг --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
Добавьте следующее определение сервиса в ваш файл compose.yaml
после сервиса db
:
builder:
build: .
Полный файл compose.yaml
теперь должен выглядеть так:
services:
web:
image: nginx:latest
ports:
- "80:80"
db:
image: redis:latest
builder:
build: .
Сохраните файл и выйдите из редактора nano.
Теперь выполним загрузку образов с флагом --ignore-buildable
:
docker compose pull --ignore-buildable
Вы увидите, что Docker Compose проверяет сервисы web
и db
и загружает их образы при необходимости (они уже должны быть загружены на предыдущих шагах). Однако сервис builder
будет проигнорирован, так как использует ключ build
вместо image
. В выводе не будет информации о сборке или загрузке образа для сервиса builder
.
Чтобы убедиться, что для сервиса builder
не был создан или загружен образ, выведите список Docker-образов:
docker images
Вы должны увидеть только образы nginx
и redis
. Новый образ из Dockerfile
не будет создан этой командой.
Это демонстрирует, как флаг --ignore-buildable
позволяет выборочно загружать только готовые образы, что может быть полезно в различных сценариях разработки и развертывания.