Bases du cloud et des conteneurs

FROM golang AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /out/app .

FROM scratch
COPY --from=build /out/app /app
ENTRYPOINT ["/app"]

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 ?

  1. AUniquement l'exécutable /app construit dans l'étape build ; le compilateur Go et le code source n'y figurent pas
  2. BLes couches de l'étape build et de la dernière étape sont toutes empilées : le compilateur Go, le code source et /app y figurent tous
  3. CUniquement l'image golang du premier FROM et le code source ; /app est construit à chaque démarrage d'un conteneur
Afficher la réponse et l'explication

Réponse : A. Uniquement l'exécutable /app construit dans l'étape build ; le compilateur Go et le code source n'y figurent pas

Dans une construction multi-étapes, chaque FROM commence une étape, et seule la dernière étape devient l'image finale. Les étapes précédentes servent à produire des artefacts avec des outils comme des compilateurs, et seuls les fichiers nommés dans COPY --from sont apportés dans la dernière étape. Ici, seul /app est copié dans l'image vide scratch : le résultat est une petite image sans le compilateur Go ni le code source. Comme scratch ne contient pas non plus la moindre bibliothèque partagée, on utilise CGO_ENABLED=0 pour construire un exécutable qui ne dépend d'aucune autre bibliothèque. Moins de contenu signifie des pulls plus rapides, moins d'outils pour les attaquants et moins de cibles pour les vulnérabilités.

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

Autres questions sur Bases du cloud et des conteneurs

  1. 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 ?
  2. 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 ?
  3. Dans un Deployment Kubernetes, l'image de conteneur du modèle de Pod est remplacée par une nouvelle version. Quelle description de ce qui se passe avec la stratégie de mise à jour par défaut (RollingUpdate) est correcte ?
  4. Un Deployment avec replicas: 10 a pour réglages de mise à jour progressive (rolling update) maxSurge: 25% et maxUnavailable: 25%. Quelle association entre la limite supérieure du nombre total de Pods et la limite inférieure du nombre de Pods disponibles pendant une mise à jour est correcte ?
  5. Dans Kubernetes, un Pod reçoit une adresse IP différente chaque fois qu'il est recréé. Quelle ressource permet à d'autres applications de se connecter, par un nom et une adresse qui ne changent pas, à plusieurs Pods sélectionnés par des labels, en répartissant la charge entre eux ?