Разметка, которую вы описываете, является разумной, но она не может быть напрямую выражена как Docker Compose. (У него нет никакого способа express изображений, которые не прикреплены к запущенным контейнерам, или express зависимостей между различными сборками изображений.) Вам нужно будет вручную перестроить базовый образ, когда вам нужно
docker build -f Dockerfile.sdk -t image-a .
Ваши другие файлы Docker могут начинаться с
FROM image-a
Нет особой необходимости помещать это sh это изображение в хранилище, если вы правильно создали и пометили изображение и его существует локально, вы можете запустить другой Dockerfile FROM
изображение.
А затем вы можете docker-compose up --build
как обычно.
Вы можете «научить» Docker Составить это, но только добавление дополнительной службы, которую вы не ожидаете запустить.
services:
a:
build:
context: .
dockerfile: Dockerfile.sdk
image: image-a
command: /bin/true # exit immediately
Документация docker-compose build
не содержит никаких указаний относительно встроенных контейнеров заказов (или даже если они ' гарантированно будет создаваться последовательно), поэтому вам снова нужно будет создать его вручную
docker-compose build a
docker-compose up --build
Стоит также подумать о том, нужны ли вам отдельные изображения "приложения" и "инструментов". Моя интуиция заключается в том, что в большинстве изображений размер базового изображения и времени выполнения языка значительно больше, чем размер приложения и особенно одной точки входа в приложение. Если одно изображение с парой дополнительных небольших команд инструментов соответствует вашим потребностям, то то, что вы описываете, является очень типичным использованием многоступенчатой сборки . Для запуска команды инструмента вы можете либо docker-compose run
одну из служб, объявленных в вашем файле docker-compose.yml
с альтернативной командой, либо указать как build:
, так и целевое image:
имя в docker-compose.yml
и docker run
полученное изображение.