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.

La lave déborde d’un déversoir de verre brisé. La lave déborde d’un déversoir de verre brisé.
Dockerfile
# --- 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"]
Build, tag, push
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
Y pointer une charge
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

S’entraîner sur un cluster réel →