Я использую Многоступенчатая сборка Docker , в частности:
Использование внешнего изображения в качестве «сцены»
При использовании многоступенчатых сборок вы
не ограничиваются копированием с этапов, которые вы создали ранее в вашем
Dockerfile. Вы можете использовать инструкцию COPY --from для копирования из
отдельное изображение, либо с использованием локального имени изображения, тег доступен
локально или в реестре Docker, или идентификатор тега. Docker клиент тянет
изображение при необходимости и копирует артефакт оттуда. Синтаксис
это:
В моем случае у меня есть три файла Docker.
Один Dockerfile просто определяет образ, который я использую в качестве этапа сборки для обмена между двумя другими Dockerfile:
FROM ubuntu:bionic
## do some heavy computation that will result in some files that I need to share in 2 Dockerfiles
и предположим, что я создаю приведенный выше файл Dockerfile:
docker build -t my-shared-build -f path/to/shared/Dockerfile .
Итак, теперь у меня есть изображение my-shared-build
, которое я разделяю между двумя контейнерами, их докер-файлы выглядят так:
FROM ubuntu:bionic
# do something
COPY --from=my-shared-build some/big/folder /some/big/folder
CMD ["/my-process-one"]
FROM ubuntu:bionic
# do something
COPY --from=my-shared-build some/big/folder /some/big/folder
CMD ["/my-process-two"]
И я могу построить и запустить их.
Итак, напомню, что я сейчас делаю:
1) Создание общего изображения
2) Построить процесс одним изображением
3) Построить процесс два изображения
теперь я могу просто запускать контейнеры "процесс один" и "процесс два".
Проблема
Теперь я хотел бы использовать Docker Compose для автоматизации выполнения «процесса один» и «процесса два».
Таким образом, вопрос заключается в следующем: как я могу указать в Docker Compose, что мне нужно сначала создать общий образ и , затем построить другие образы (а затем запустить их контейнеры)