Docker irudiak geruzen konbinazioak dira. Izan ere, zure Dockerfile fitxategiko agindu bakoitzak geruza bat sortzen du. Dockeren daemonak konpilazioen arteko geruza horiek erabil ditzake, aginduak berdinak badira edo COPY
edo ADD
fitxategiak berdinak badira.
- Digging into Docker layers-etik hartutako irudia, jessgreb01-i esker*
Zure Dockerfile fitxategiaren hasieran konpilazio zenbakia duen etiketaren bat badaukazu, cachea baliogabetua izango da konpilazio bakoitzean
#Fitxategiaren hasiea
FROM node:10.22.0-alpine3.11 as builder
# Ez egin hau hemen!
LABEL build_number="483"
#... Dockerfile fitxategiaren gainontzeko guztia
Begiratu: docker ignoreren garrantzia
Cachearen logika hondatu dezaketen fitxategien kopia ekiditen dute Docker ignorek, adibidez proben emaitzen txostenak, erregistroak edota aldi baterako fitxategiak.
Gomendagarria da erabiltzen dituzun sistema pakete guztiak dituen docker irudi base bat sortzea. Benetan apt
,yum
,apk
edo antzerako komandoak erabiliz paketeak instalatzeko beharra baduzu, horiek izan beharko lirateke zure lehenengo aginduak. Ez duzu make, gcc edo g ++ berriro instalatu nahi izango zure node aplikazioa konpilatzen duzun bakoitzean. Ez instalatu paketea erosoa delako soilik, ekoizpen aplikazio bat da.
COPY "package.json" "package-lock.json" "./"
RUN npm ci
lockfile eta package.json gutxiagotan aldatzen dira. Beraiek lehendabizi kopiatzeak npm install
etapa cachean utziko du, horrek denbora baliotsua aurrezten du.
COPY . .
RUN npm run build
#Sortu node irudi bertsioaren ezizena
FROM node:10.22.0-alpine3.11 as builder
RUN apk add --no-cache \
build-base \
gcc \
g++ \
make
USER node
WORKDIR /app
COPY "package.json" "package-lock.json" "./"
RUN npm ci --production
COPY . "./"
FROM node as app
USER node
WORKDIR /app
COPY --from=builder /app/ "./"
RUN npm prune --production
CMD ["node", "dist/server.js"]
#Sortu node irudi bertsioaren ezizena
FROM node:10.22.0-alpine3.11 as builder
RUN apk add --no-cache \
build-base \
gcc \
g++ \
make
USER node
WORKDIR /app
COPY "package.json" "package-lock.json" "./"
RUN npm ci
COPY . .
RUN npm run build
FROM node as app
USER node
WORKDIR /app
# Behar ditugun fitxategiak bakarrik kopiatu
COPY --from=builder /app/node_modules node_modules
COPY --from=builder /app/package.json .
COPY --from=builder /app/dist dist
RUN npm prune --production
CMD ["node", "dist/server.js"]
Dockeren dokumentazioa: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#leverage-build-cache