Я развертываю свое приложение Node.Js через AWS ECS Docker
контейнер, используя Circle CI
.
Однако каждый раз, когда я создаю новый образ, он запускает npm build
(потому что он находится в моем Dockerfile
) и каждый раз загружает и строит все модули node
заново. Затем он загружает новый образ в репозиторий AWS ECS.
Поскольку моя среда остается прежней, я не хочу, чтобы он каждый раз собирал эти пакеты. Как вы думаете, возможно ли для Docker действительно обновлять существующий образ вместо того, чтобы каждый раз создавать новый с нуля со всеми модулями? Это вообще хорошая практика?
Я думал о следующем рабочем процессе:
- Проверить, есть ли новые пакеты Node по сравнению с предыдущим образом
- Если да , запустите
npm build
- Если нет, просто сохраните старую папку
node_modules
, не запускайте сборку и просто обновите код - Deploy
Что был бы лучший способ сделать это?
Вот мой Dockerfile
FROM node:12.18.0-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . .
COPY package.json package-lock.json* ./
RUN npm install
RUN npm install pm2 -g
EXPOSE 3000
CMD [ "pm2-runtime", "ecosystem.config.js"]
Мой Circle CI
рабочий процесс (из ./circleci/config.yml
):
workflows:
version: 2.1
test:
jobs:
- test
- aws-ecr/build-and-push-image:
create-repo: true
no-output-timeout: 10m
repo: 'stage-instance'