Как сделать Dockerfile ИЗ другого Dockerfile? - PullRequest
0 голосов
/ 13 января 2020

У меня есть приложение, которое имеет два Dockerfile, скажем Dockerfile.foo и Dockerfile.bar, которые, как ожидается, будут создавать два разных изображения для двух разных сервисов docker-compose.yml.

Например, это может выглядеть следующим образом:

# ...
services:
  service1:
    build:
      context: .
      dockerfile: Dockerfile.foo
  service1:
    build:
      context: .
      dockerfile: Dockerfile.bar
# ...

Но оба Dockerfile.{foo,bar} имеют одну и ту же первую половину, а их левые части различаются.

Как избежать ненужного дублирования мешает строить и обслуживать, заставляя .{foo,bar} расширяться от базы Dockerfile.common? Другими словами, возможно ли заархивировать что-то вроде FROM Dockerfile.common в docker-compose.yml?


Обновление:

Что я ожидаю, так это использование docker-compose для автоматизации процесса сборки без вручную (или с отдельным build.sh): сначала

  1. docker build -f Dockerfile.common -t common .;
  2. , а затем docker build -f Dockerfile.foo -t foo . && docker build -f Dockerfile.bar -t bar ., чтобы Dockerfile.{foo, bar} мог правильно сослаться на common изображение.

1 Ответ

0 голосов
/ 13 января 2020

FROM служит для извлечения базового изображения для работы. Конечно, у этого изображения где-то есть Dockerfile, но это не имеет значения в новом Dockerfile, который использует это изображение.

Итак, создайте основной Dockerfile_common и сгенерируйте изображение generated_image_with_Dockerfile_common из там (с docker build), с базовыми c вещами, которые вам понадобятся в других ваших изображениях.

Затем в ваших Dockerfile_foo и Dockerfile_bar используйте FROM generated_image_with_Dockerfile_common и дополните их что ты хочешь.

...