Отключает ли автоматическое обновление моего пакета. json во время фиксации docker сборка для повторного использования кэша? - PullRequest
1 голос
/ 03 апреля 2020

Я только начал глубоко разбираться в синтаксисе dockerfile.

Вот тот, который я использую в настоящее время:

FROM node:12-alpine as install

WORKDIR /Backend-graphql
COPY ./src ./src
COPY ./index.js ./index.js
COPY ./schema.graphql ./schema.graphql
COPY ./package.json ./
COPY ./package-lock.json ./package-lock.json
RUN npm install

FROM node:12-alpine as prismawork

WORKDIR /PrismaWork
COPY --from=install /Backend-graphql .
COPY ./datamodel.prisma ./datamodel.prisma
COPY ./prisma.yml ./prisma.yml
RUN npx prisma deploy
RUN npx prisma generate

FROM node:12-alpine
#curl needed for healthcheck
RUN apk --update --no-cache add curl
WORKDIR /app
COPY --from=prismawork /PrismaWork .
ENTRYPOINT ["npm", "start"]
EXPOSE 4000

Из личных тестов и документации, найденных онлайн, я уважал следующий совет:

  • Использовать многоэтапные сборки

Но я замечаю кое-что, docker не повторно использовать кеш после первого слоя COPY, отличающегося в текущей и следующей сборках этапы. И я думаю, что это проблема, потому что я использую automati c bump version git hook, основанный на сообщении фиксации semanti c versionning синтаксис , который изменяет мой пакет. json. Итак, при каждом коммите docker build re-RUN npm слои установки и последующие запросы.

Прежде всего, понял ли я docker систему кеширования?

Во-вторых, мне следует использовать другой файл для автоматической версии c и скопировать его в самый конец моего Dockerfile?

1 Ответ

1 голос
/ 03 апреля 2020

Прежде всего, я понял docker систему кеширования?

Да, вы должны. Если какое-либо изменение произойдет на каком-либо шаге, например, изменения в пакете. json, docker перестроит остальные шаги.

Нет необходимости копировать с одного изображения несколько раз. Мы также выполняем npm установку после выполнения несвязанных шагов, чтобы поймать другие шаги.

FROM node:12-alpine
#curl needed for healthcheck
RUN apk --update --no-cache add curl
WORKDIR /app
COPY ./src ./src
COPY ./index.js ./index.js
COPY ./schema.graphql ./schema.graphql
COPY ./datamodel.prisma ./datamodel.prisma
COPY ./prisma.yml ./prisma.yml
COPY ./package.json ./
COPY ./package-lock.json ./package-lock.json
RUN npm install
RUN npx prisma deploy
RUN npx prisma generate
ENTRYPOINT ["npm", "start"]
EXPOSE 4000

Многоуровневая подготовка полезна, когда вам нужно построить между несколькими изображениями, как в этом примере:

FROM node:12-alpine
RUN npm install -g gzipper
WORKDIR /build
ADD . .
RUN npm install
ARG CONFIGURATION
RUN npm run build:${CONFIGURATION}
RUN gzipper --gzip-level=6 ./dist

FROM nginx:latest
WORKDIR /usr/share/nginx/html
COPY --from=0 /build/dist .
COPY nginx/default.conf /etc/nginx/conf.d/default.conf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...