Docker Multi-Stage: как разбить на несколько Dockerfiles - PullRequest
0 голосов
/ 07 декабря 2018

Я успешно использую многостадийную функцию Docker для создания некоторого кода, а затем копирую полученные артефакты в окончательное изображение.

Возможно ли разделить этот один большой Docker-файл на несколько файлов?

Я бы хотел улучшить читаемость отдельных этапов.Что станет более важным, когда будет добавлено больше этапов.

РЕДАКТИРОВАТЬ: я знаю, что мог бы написать Makefile (или аналогичный), где я сначала создаю образ с именем "myproject-stage1", а затем использую FROM myproject-stage1 AS build,Тем не менее, я бы предпочел избегать внешнего инструмента сборки, если это возможно.

1 Ответ

0 голосов
/ 07 декабря 2018

Если ваш Dockerfile в настоящее время выглядит примерно так:

FROM ubuntu:16.04 AS builder
RUN apt-get install build-essential
COPY . ./
RUN ./build_all_the_things \
 && make install PREFIX=/usr DESTDIR/out

FROM alpine:3.8
COPY --from=builder /out/ /
CMD the_app

Вы можете легко разбить первую часть на собственный Dockerfile, как есть, и собрать его

docker build -f Dockerfile.builder -t me/builder .

COPY --from должен назвать какой-то предыдущий этап в вашем Dockerfile, но этап не должен много делать;затем вы можете изменить вторую половину на

FROM me/builder AS builder
FROM alpine:3.8
COPY --from=builder /out/ /
CMD the_app

Большим недостатком этого является то, что вам нужны две отдельные команды docker build для фактического построения окончательного образа.Вы могли бы написать сценарий оболочки, чтобы сделать их обоих вместе.

...