Skip to content

Instantly share code, notes, and snippets.

@dbfun
Last active November 18, 2020 08:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dbfun/355bd8ee89d21c32c5e9d57603a82462 to your computer and use it in GitHub Desktop.
Save dbfun/355bd8ee89d21c32c5e9d57603a82462 to your computer and use it in GitHub Desktop.
# ШАГ 1
#
# Копируем файлы npm-менеджера во временный каталог и запускаем установку пакетов
# Эти действия нужно разместить одними из первых, до копирования в образ исходных кодов
# Идея такая: докер использует слоеную файловую систему (каждый образ-слой), причем кеширует промежуточные слои.
# Если файлы ./package.json ./package-lock.json не менялись, то при создании образа докер
# просто пропустит этот шаг, а в консоли будет "образ взят из кеша"
# Если же файлы изменились (а это происходит значительно реже, чем меняются файлы исходных кодов проекта),
# то шаг будет выполнен.
# Если до этого шага разместить какие-то действия, которые меняют прошлые слои, то кеширование работать не будет,
# поэтому важно разместить это где-то в начале Dockerfile. Докер создает слои на каждое действие типа COPY, RUN, WORKDIR, и т.п.
ADD ./package.json ./package-lock.json /tmp/
RUN cd /tmp && \
npm install
# ШАГ 2
#
# Тут делаем любые манипуляции с образом
# В данном случае - просто копирование исходных кодов в /srv
# Каталог node_modules на этом шаге не копируется, даже если он есть,
# по причине того, что в файле `.dockerignore` указано, что `/node_modules` нужно игнорировать
WORKDIR srv
ADD . /srv
# ШАГ 3
# На этом шаге в каталоге /tmp находятся установленные node_modules, поэтому просто перемещаем
RUN mv /tmp/node_modules /srv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment