Я только начал глубоко разбираться в синтаксисе 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?