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 ?
- AUniquement l'exécutable /app construit dans l'étape build ; le compilateur Go et le code source n'y figurent pas
- 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
- 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.
Continuer : 9 autres questions sur Bases du cloud et des conteneurs