Несколько изображений, один Dockerfile

Как создать два изображения в одном Dockerfile, они только копируют разные файлы.

Если это не приведет к созданию двух изображений img1 и img2, вместо этого получатся два безымянных изображения d00a6fc336b3 и a88fbba7eede

Dockerfile:

FROM alpine as img1
COPY file1.txt .

FROM alpine as img2
COPY file2.txt .

Вместо этого это результат сборки Docker.

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              d00a6fc336b3        4 seconds ago       4.15 MB
<none>              <none>              a88fbba7eede        5 seconds ago       4.15 MB
alpine              latest              3fd9065eaf02        3 months ago        4.15 MB

1 ответ

Решение

Вы можете использовать docker-compose файл с использованием target опция:

version: '3.4'
services:
  img1:
    build:
      context: .
      target: img1
  img2:
    build:
      context: .
      target: img2

используя ваш Dockerfile со следующим содержанием:

FROM alpine as img1
COPY file1.txt .

FROM alpine as img2
COPY file2.txt .

Вы можете создать несколько образов из одного файла Docker, запустив docker build для каждого этапа сборки name хотите выбрать из Docker file (FROM alpine as name).

По умолчанию docker строит образ из последней команды в Docker file, однако вы можете настроить таргетинг на промежуточный уровень. Исходя из примера Docker file в вопросе, можно:

docker build -t image1 --target img1 .

ссылка: https://docs.docker.com/engine/reference/commandline/build/

Другие вопросы по тегам