Go

Docker & Containerization

Dockerfile, multi-stage builds, image optimization, docker-compose, container orchestration

20 questions d'entretien·
Senior
1

Quelle est la principale raison d'utiliser un multi-stage build pour une application Go ?

Réponse

Le multi-stage build permet de séparer l'environnement de compilation de l'image finale. L'étape de build contient le SDK Go complet (plusieurs centaines de Mo), tandis que l'image finale ne contient que le binaire compilé. Cela réduit drastiquement la taille de l'image (de ~800MB à quelques MB) et minimise la surface d'attaque en éliminant les outils de compilation inutiles en production.

2

Quelle image de base est recommandée pour une application Go en production pour minimiser la taille et la surface d'attaque ?

Réponse

L'image scratch est une image vide sans système d'exploitation. Go compile en binaires statiques qui n'ont pas besoin de libc ou d'autres dépendances système, ce qui permet d'utiliser scratch. Cela produit les images les plus petites possibles (quelques MB) et offre la meilleure sécurité car il n'y a aucun outil ni shell exploitable. Distroless et alpine sont des alternatives valides mais moins optimales.

3

Quels flags de compilation Go sont nécessaires pour créer un binaire compatible avec une image scratch ?

Réponse

CGO_ENABLED=0 désactive cgo, forçant Go à utiliser des implémentations pure Go pour les packages comme net et os/user. Sans cela, le binaire aurait des dépendances dynamiques vers libc. GOOS et GOARCH spécifient la plateforme cible. Ces flags combinés produisent un binaire entièrement statique sans dépendances externes, idéal pour scratch.

4

Comment optimiser le cache des layers Docker lors du build d'une application Go ?

5

Quel est l'avantage d'utiliser les images Google Distroless pour Go par rapport à scratch ?

+17 questions d'entretien

Maîtrise Go pour ton prochain entretien

Accède à toutes les questions, flashcards, tests techniques, exercices de code review et simulateurs d'entretien.

Commencer gratuitement