Viji
@Viji
Associate DevOps Engineer

Как работает Dockerfile из 2-х образов?

Привет всем,

есть такой Dockerfile:
FROM node:13 as node

WORKDIR /app
COPY package.json /app/
COPY package-lock.json /app/
COPY docker-additions/.npmrc /app/

RUN npm install
COPY ./ /app/

RUN npm run config
RUN npm run build

FROM nginx:1.18.0-alpine
COPY --from=node /app/dist/ /usr/share/nginx/html
COPY ./nginx-custom.conf /etc/nginx/conf.d/default.conf


Можете обьяснить
1) зачем используется в первой строке as node (FROM node:13 as node)
2) каким образом можно использовать FROM nginx:1.18.0-alpine если FROM уже было? Он подтягивает пакеты из второго базового образа в первый или как?

всем добра,
Вадим
  • Вопрос задан
  • 79 просмотров
Решения вопроса 2
@mureevms
FROM node:13 as node
WORKDIR /app
COPY package.json /app/
COPY package-lock.json /app/
COPY docker-additions/.npmrc /app/
RUN npm install
COPY ./ /app/
RUN npm run config
RUN npm run build

В этом месте он использует контейнер с базовым образом node:13 для билда приложения.

FROM nginx:1.18.0-alpine
COPY --from=node /app/dist/ /usr/share/nginx/html
COPY ./nginx-custom.conf /etc/nginx/conf.d/default.conf

Тут используется nginx:1.18.0-alpine как базовый образ и копируется то, что набилдилось в предыдущем контейнере в контейнер с веб сервером.

Этакий CI для Докера. Это удобно.

1. Присваивается имя для слоя из которого потом копируются файлы в строке COPY --from=node /app/dist/ /usr/share/nginx/html
2. На первом FROM происходит сборка. Если использовать один, то придется или ставить nginx в первый, или же nodejs во второй. А так это просто промежуточный слой.
Ответ написан
@vitaly_il1
DevOps Consulting
В целом - это https://docs.docker.com/develop/develop-images/mul...

1) это просто алиас
2) Мы получим основанный на nginx image, плюс скопируем директорию из node image. И эта директория - это все что мы берем из node image.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы