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 во второй. А так это просто промежуточный слой.