Aide-mémoire CKAD
exemple Dockerfile k8s
Un Dockerfile est la recette, une image le résultat figé, un tag dit lequel. On build une fois, on tag précisément, puis kubectl set image ou on édite le Pod pour l’utiliser — Kubernetes ne construit jamais rien pour vous.
# --- build stage ---
FROM golang:1.23 AS build
WORKDIR /src
COPY . .
RUN go build -o /out/app .
# --- runtime stage ---
FROM gcr.io/distroless/base-debian12
COPY --from=build /out/app /app
USER 1000
ENTRYPOINT ["/app"]
docker build -t registry.example.com/team/app:1.4.0 .
docker push registry.example.com/team/app:1.4.0
docker tag registry.example.com/team/app:1.4.0 registry.example.com/team/app:latest
kubectl set image deploy/app app=registry.example.com/team/app:1.4.0
kubectl rollout status deploy/app
kubectl describe pod -l app=app
Champs
- FROM
- Image de base et son tag. Fixer une version — un FROM sans tag veut dire :latest, qui dérive.
- COPY
- Copie simple du contexte vers l’image. ADD décompresse aussi des tarballs et récupère des URLs — utiliser COPY sauf besoin de ça.
- ENTRYPOINT
- La commande fixe. CMD en est les arguments par défaut, surchageables par command/args du Pod.
- imagePullPolicy
- Always retire même si le tag existe déjà localement. IfNotPresent (défaut sauf tag :latest) réutilise la copie locale — périmée après un rebuild sur le même tag.
- kubectl set image
- Change l’image d’un Deployment en cours et déclenche un rollout — pas besoin d’éditer le YAML.
- docker build
- -t nomme et tague en une étape. Répéter -t pour aussi poser un alias :latest.
- docker push
- A besoin de l’hôte du registre dans le tag (registry/repo:tag), sinon ça pousse vers Docker Hub par défaut.
- ImagePullBackOff
- Kubernetes n’a pas pu tirer l’image — nom/tag faux, registre privé sans imagePullSecrets, ou registre injoignable.
Pièges
- Jamais :latest dans une tâche d’examen — c’est le défaut si le tag est omis, et ça dérive silencieusement. Toujours un tag explicite.
- ImagePullBackOff / ErrImagePull veut presque toujours dire : nom/tag d’image faux, registre privé sans imagePullSecrets sur le Pod ou son ServiceAccount, ou registre injoignable depuis le nœud.
- kubectl set image édite l’objet en direct et lance un rollout — pas besoin de fichier YAML, c’est le correctif le plus rapide pour une tâche « changer l’image en cours ».
- Les builds multi-étapes n’expédient que le dernier FROM. Les outils de build d’une étape précédente n’atteignent jamais l’image finale sans un COPY --from=.
Doc officielle Dockerfile reference Images