Использование файлов из двух базовых образов - PullRequest
0 голосов
/ 09 мая 2020

У меня есть два docker изображений. Image x просто копирует некоторые файлы в образ, Image y копирует другие файлы и устанавливает некоторые необходимые библиотеки. Я хочу создать третий dockerfile = z, который будет основан на этих двух изображениях.

пример для z:

From x. .

С г. .

Как мне создать dockerfile z, который может использовать эти файлы из x и y?

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Содержимое ниже с официального сайта Docker.

Используйте многоэтапные сборки

В многоэтапных сборках вы используете несколько операторов FROM в вашем Dockerfile. Каждая инструкция FROM может использовать другую базу, и каждая из них начинает новый этап сборки. Вы можете выборочно копировать артефакты с одного этапа на другой, оставляя на конечном изображении все, что вам не нужно. Чтобы показать, как это работает, давайте адаптируем Dockerfile из предыдущего раздела для использования многоступенчатых сборок.

Dockerfile:

FROM golang:1.7.3
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html  
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

FROM alpine:latest  
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/alexellis/href-counter/app .
CMD ["./app"]

Вам понадобится только один Dockerfile. Вам также не нужен отдельный скрипт сборки. Просто запустите docker build.

$ docker build -t alexellis2/href-counter:latest .

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

Как это работает? Вторая инструкция FROM запускает новый этап сборки с изображением alpine:latest в качестве основы. Строка COPY --from=0 копирует только построенный артефакт из предыдущего этапа в этот новый этап. Go SDK и любые промежуточные артефакты остаются позади и не сохраняются в окончательном изображении.

Источник: Docker Многоступенчатые сборки

0 голосов
/ 09 мая 2020

Попробуйте следующее:

FROM x as image1

FROM y as image2

FROM centos

COPY --from=image1 <source_path> <destinantion_path>

COPY --from=image2 <source_path> <destinantion_path>

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...