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 ?

  1. A2 minutes
  2. BEnviron 11 minutes
  3. 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.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases du cloud et des conteneurs

  1. Dans Docker, quelle description des volumes nommés et des montages bind (bind mounts), qui servent à conserver les données écrites par un conteneur, est correcte ?
  2. Une image est récupérée (pull) en indiquant registry.example.com/team/web:1.4. Quelle association donnant le sens de chaque partie de cette référence est correcte ?
  3. scratch est une image vide qui ne contient aucun fichier. Quelle description du contenu de l'image finale construite avec le Dockerfile multi-étapes ci-dessus est correcte ?
  4. Dans Kubernetes, quelle est la plus petite unité déployée et gérée, qui regroupe un ou plusieurs conteneurs partageant la même adresse IP et les mêmes volumes ?
  5. Dans Kubernetes, un Deployment avec replicas: 3 fait tourner trois Pods. Quelle description de ce qui se passe quand l'un de ces Pods est supprimé avec kubectl delete pod est correcte ?