У меня есть Dockerfiles, подобные этому
# build-home
FROM node:10 AS build-home
WORKDIR /usr/src/app
COPY /home/package.json /home/yarn.lock /usr/src/app/
RUN yarn install
COPY ./home ./
RUN yarn build
# build-dashboard
FROM node:10 AS build-dashboard
WORKDIR /usr/src/app
COPY /dashboard/package.json /dashboard/yarn.lock /usr/src/app/
RUN yarn install
COPY ./dashboard ./
RUN yarn build
# run
FROM nginx
EXPOSE 80
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build-home /usr/src/app/dist /usr/share/nginx/html/home
COPY --from=build-dashboard /usr/src/app/dist /usr/share/nginx/html/dashboard
Здесь создается два реагирующих приложения, а затем артефакты сборки помещаются в nginx.Чтобы улучшить производительность сборки, мне нужно кэшировать папку dist
на этапах сборки build-home
и build-dashboard
.Для этого я создаю volume
in docker-compose.yml
...
web:
container_name: web
build:
context: ./web
volumes:
- ./web-build-cache:/usr/src/app
ports:
- 80:80
depends_on:
- api
Я остановился на этом этапе, потому что я не понимаю, как сначала добавить volume
, созданный docker-compose
для build-home
stage, и после добавления этого volume
к build-dashboard
.Может быть, мне следует создать два тома и прикрепить каждый к каждому из этапов сборки, но как это сделать?
ОБНОВЛЕНИЕ:
Начальная сборка.
Домашнее приложение:
- Установленные модули: 100,91 с
- Создание приложения: 39,51 с
Приложение для панели управления:
- Установленные модули: 100,91 с
- Сборка приложения: 50,38 с
Общее время:
real 8m14.322s
user 0m0.560s
sys 0m0.373s
Вторая сборка (без изменения кода или зависимостей):
Домашнее приложение:
- Установка модулей: использование кеша
- Создание приложения: использование кеша
Приложение Dashboard:
- Установка модулей: использование кеша
- Создание приложения: использование кеша
Общее время:
real 0m2.933s
user 0m0.309s
sys 0m0.427s
Третья сборка (с небольшим изменением кода в первом приложении):
Домашнее приложение:
- Установка модулей: использование кеша
- Сборкаприложение: 50.04 с
ДашбоПриложение ARD:
- Установка модулей: использование кеша
- Создание приложения: использование кеша
Общее время:
real 0m58.216s
user 0m0.340s
sys 0m0.445s
Начальная сборка домашнего приложения без Docker: 89,69
real 1m30.111s
user 2m6.148s
sys 2m17.094s
Вторая сборка домашнего приложения без Docker, папка dist
существует на диске (без кода илиизменение зависимостей): 18,16
real 0m18.594s
user 0m20.940s
sys 0m2.155s
Третья сборка домашнего приложения без Docker, папка dist
существует на диске (с небольшими изменениями в коде): 20,44 с
real 0m20.886s
user 0m22.472s
sys 0m2.607s
В docker-контейнере третьи сборки приложения в 2 раза длиннее.Это показывает, что если результат первой сборки находится на диске, другие сборки завершаются быстрее.В контейнере Docker все сборки после первой выполняются столько же, сколько и первой, поскольку папка dist
отсутствует.