Bases du cloud et des conteneurs
FROM node:lts
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
CMD ["node", "dist/server.js"]Le Dockerfile (B) ci-dessus a été obtenu à partir du Dockerfile (A), qui plaçait RUN npm ci après COPY . ., en changeant l'ordre pour ne copier d'abord que les fichiers de dépendances. npm ci prend 120 secondes, npm run build 30 secondes et COPY . . 2 secondes, et la durée des autres instructions est négligeable. L'image est reconstruite 20 fois par jour après une modification du seul code source sous src (package.json et package-lock.json ne changent pas). Si le cache de la construction précédente peut être utilisé, de combien la durée totale de construction par jour est-elle plus courte avec B qu'avec A ?
- A2 minutes
- BEnviron 11 minutes
- C40 minutes
Afficher la réponse et l'explication
Réponse : C. 40 minutes
Le cache de construction s'utilise instruction par instruction, et pour COPY il dépend de ce que le contenu des fichiers copiés est identique ou non à celui de la fois précédente. Dès que le cache ne peut pas être utilisé pour une instruction, toutes les instructions suivantes sont réexécutées. Dans A, la modification est détectée dès le premier COPY . ., donc chaque construction prend 2 + 120 + 30 = 152 secondes. Dans B, package.json et package-lock.json n'ont pas changé : le cache est utilisé jusqu'à npm ci inclus, et seuls COPY . . et npm run build s'exécutent, soit 2 + 30 = 32 secondes. La différence est de 120 secondes par construction, soit 2400 secondes = 40 minutes pour 20 constructions.
Continuer : 9 autres questions sur Bases du cloud et des conteneurs