Aller au contenu

Docker : pense-bête

Vocabulaire

Terme C'est quoi
Image Un modèle en lecture seule (ex. debian:13). Ne change jamais.
Conteneur Une instance en cours d'exécution d'une image, avec une petite couche inscriptible par-dessus.
Volume Un dossier de la machine monté dans le conteneur, pour partager ou conserver des fichiers.
Port publié Un pont entre un port de la machine et un port à l'intérieur du conteneur.
Dockerfile Une recette texte pour fabriquer sa propre image.
compose.yaml Un fichier qui décrit un ou plusieurs conteneurs, à la place d'une longue commande.

Un conteneur n'a pas de noyau à lui : il utilise celui de la machine hôte, quelle que soit la distribution testée à l'intérieur. On ne teste donc pas une distribution complète (pas de GRUB, pas d'installateur, pas de systemd actif), mais son espace utilisateur (paquets, commandes, configuration).

Les six commandes de base

docker run -it --rm IMAGE     # lancer un conteneur jetable, avec un shell interactif
docker ps -a                  # voir les conteneurs (même arrêtés)
docker images                 # voir les images stockées sur la machine
docker build -t NOM .         # fabriquer une image depuis un Dockerfile
docker rmi NOM                # supprimer une image
docker rm NOM                 # supprimer un conteneur

-it

  • -i (interactive) : garde le clavier ouvert vers le conteneur.
  • -t (tty) : donne un vrai terminal (prompt, couleurs, historique).
  • Utile pour un shell interactif. Inutile pour une commande qui affiche un résultat et s'arrête (docker run --rm debian:13 cat /etc/os-release).

Garder un conteneur (sans --rm)

docker run -it --name mondebian debian:13   # apt install ..., puis exit
docker start -ai mondebian                   # le retrouver, avec ce qui a été installé

-p : publier un port

-p  ADRESSE:PORT_HÔTE:PORT_CONTENEUR
  • 127.0.0.1:8080:8080 : accès limité à la machine locale, port 8080 → port 8080 du conteneur.
  • Sans 127.0.0.1, le service est ouvert à tout le réseau local.

-v : monter un volume

-v  DOSSIER_MACHINE:DOSSIER_CONTENEUR:OPTION
  • :ro (read-only) : le conteneur peut lire, pas écrire.
  • Les fichiers vivent sur la machine ; le conteneur ne fait que les servir ou les lire.

Exemple : serveur web

docker run -d --rm --name web \
  -p 127.0.0.1:8080:8080 \
  -v ~/site-web:/usr/share/nginx/html:ro \
  nginxinc/nginx-unprivileged

-d (detach) : tourne en arrière-plan. --rm : supprimé à l'arrêt. docker stop web pour l'arrêter.

Dockerfile minimal

FROM debian:13
RUN apt-get update && apt-get install -y figlet
CMD ["figlet", "Bonjour"]
docker build -t mon-image .
docker run --rm mon-image
docker run --rm mon-image figlet "Autre texte"   # remplace le CMD

Faire le ménage

docker system df       # place occupée, tous types confondus
docker image prune     # supprime les images orphelines (sans nom)
docker system prune -a # supprime TOUTES les images inutilisées (se retéléchargent au besoin)

compose.yaml

services:
  web:
    image: nginxinc/nginx-unprivileged
    container_name: web
    ports:
      - "127.0.0.1:8080:8080"
    volumes:
      - ~/site-web:/usr/share/nginx/html:ro
    restart: unless-stopped
docker compose up -d      # démarrer
docker compose down       # arrêter et supprimer
docker compose ps         # état des services
docker compose logs       # journaux
  • YAML : espaces uniquement (jamais de tabulation), indentation cohérente.
  • restart: unless-stopped remplace --rm pour un service qu'on garde actif.
  • working_dir:, command:, profiles: : utiles pour un service qui exécute une tâche ponctuelle (ex. zensical build) plutôt que de rester actif — voir le récapitulatif détaillé pour l'exemple à deux services.

Sécurité (rootless)

sudo gpasswd -d $USER docker                          # sortir du groupe docker
sudo systemctl mask docker.service docker.socket      # verrouiller le Docker root
docker info --format '{{.SecurityOptions}}'           # doit contenir name=rootless
  • Toujours 127.0.0.1: devant un port en test, jamais --privileged sans raison précise.
  • Images officielles, version épinglée plutôt que latest.