Docker создавать и внешние образы многоступенчатых сборок - PullRequest
0 голосов
/ 16 января 2019

Я использую Многоступенчатая сборка 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, что мне нужно сначала создать общий образ и , затем построить другие образы (а затем запустить их контейнеры)

1 Ответ

0 голосов
/ 16 января 2019

Я думаю, вы должны быть в состоянии сделать это очень хорошо.

докер-Compose:

version: '3'
services:
    my-shared-build:
        image: my-shared-build:latest
        build: my-shared-build

    my-process-one:
        image: my-process-one:latest
        build: my-process-one
        depends_on:
            - my-shared-build

    my-process-two:
        image: my-process-two:latest
        build: my-process-two
        depends_on:
            - my-shared-build
            - my-process-one

При условии, что ваши файлы Docker находятся в подкаталогах my-shared-build, my-process-one, my-process-two, это должно собрать все 3 образа (по порядку)

...