Cours RechercherCtrl K

Fiches de révision

Fiches Docker

6 fiches, une par leçon, dans l'ordre du cours. Retour au cours Docker

Docker · Leçon 1

Pourquoi Docker ?

À retenir

  • Une image est le modèle (la recette), un conteneur est une image qui tourne (le plat).
  • Les images viennent d'un registre, en général Docker Hub.
  • Un conteneur partage le noyau du serveur : plus léger et plus rapide qu'une machine virtuelle.
  • Il vit tant que son programme principal tourne ; Exited (0) = terminé sans erreur.
  • docker ps (en marche), docker ps -a (tous), docker images.

Mémo

docker --version
docker run hello-world
docker run alpine echo "Bonjour"
docker ps
docker ps -a
docker images

Pièges à éviter

  • Chercher un conteneur arrêté avec docker ps sans -a.
  • Confondre image et conteneur : supprimer un conteneur ne supprime pas l'image.

Revoir la leçon et ses exercices

Docker · Leçon 2

Lancer et gérer des conteneurs

À retenir

  • docker run -d --name web -p 8080:80 nginx : arrière-plan, nom, port machine:conteneur.
  • Un port de la machine ne sert qu'à un conteneur à la fois.
  • Les ports publiés par Docker passent avant ufw : -p 127.0.0.1:8080:80 pour rester local.
  • docker logs, docker exec, docker stop / start / restart, docker rm (ou rm -f).
  • Un conteneur est jetable : ce qui est écrit dedans disparaît avec lui.

Mémo

docker run -d --name web -p 8080:80 nginx
docker ps
docker logs -f web
docker exec web nginx -v
docker stop web
docker start web
docker rm -f web

Pièges à éviter

  • Inverser les ports : -p 80:8080 relie le port 80 de la machine au port 8080 du conteneur.
  • Mettre les options après le nom de l'image : elles sont alors passées au programme du conteneur.
  • Oublier -d : le terminal reste bloqué.
  • Croire qu'ufw protège un port publié par Docker.

Revoir la leçon et ses exercices

Docker · Leçon 3

Les images

À retenir

  • Une image se nomme nom:étiquette ; sans étiquette, c'est latest.
  • En production, une étiquette précise : postgres:18-alpine, php:8.3-fpm-alpine.
  • docker pull, docker images, docker rmi, docker image prune -a.
  • Un Dockerfile : FROM (départ), RUN (commande), COPY (fichiers), EXPOSE (port).
  • Jamais de secret dans une image.

Mémo

docker pull nginx:alpine
docker images
docker rmi hello-world
docker image prune -a
docker build -t monsite:1.0 .
# Dockerfile
FROM php:8.3-apache
RUN docker-php-ext-install pdo_mysql
COPY site/ /var/www/html/
EXPOSE 80

Pièges à éviter

  • Utiliser latest en production : la version change sans prévenir.
  • Supprimer une image encore utilisée par un conteneur (même arrêté).
  • COPY . … qui embarque le .env et ses mots de passe.
  • Laisser les vieilles images remplir le disque.

Revoir la leçon et ses exercices

Docker · Leçon 4

Volumes, variables et réseaux

À retenir

  • Un volume garde les données quand le conteneur est supprimé : -v nom:/dossier/du/conteneur.
  • Un dossier de la machine se branche pareil : -v ~/site:/usr/share/nginx/html:ro (:ro = lecture seule).
  • Réglages et secrets par variables : -e NOM=valeur, jamais dans l'image.
  • --restart unless-stopped : relancé après un plantage ou un redémarrage.
  • Sur un même réseau, les conteneurs se joignent par leur nom ; la base n'a pas besoin de -p.

Mémo

docker volume create donnees-base
docker run -d --name base -e POSTGRES_PASSWORD=… -v donnees-base:/var/lib/postgresql/data --restart unless-stopped postgres:18-alpine
docker run -d --name blog -p 8080:80 -v ~/blog:/usr/share/nginx/html:ro nginx:alpine
docker network create appli
docker run -d --name site --network appli -e DB_HOST=base monsite:1.0
docker inspect base

Pièges à éviter

  • Une base de données sans volume : tout disparaît à la suppression du conteneur.
  • Publier le port de la base (-p 5432:5432) : elle devient joignable depuis Internet.
  • docker volume rm ou compose down -v sans sauvegarde.
  • Oublier la variable de mot de passe : la base refuse de démarrer.

Revoir la leçon et ses exercices

Docker · Leçon 5

docker compose

À retenir

  • docker-compose.yml décrit les services, leurs ports, volumes, variables et redémarrage.
  • YAML : clé: valeur, listes avec - , indentation de 2 espaces, jamais de tabulation.
  • Compose crée un réseau : les services se joignent par leur nom.
  • Les secrets dans .env, utilisés avec ${NOM}.
  • up -d, ps, logs, down ; mise à jour : pull puis up -d.

Mémo

cd ~/monsite
docker compose up -d
docker compose ps
docker compose logs -f web
docker compose pull
docker compose up -d
docker image prune -f
docker compose down

Pièges à éviter

  • Lancer docker compose hors du dossier du projet : « no configuration file provided ».
  • Une tabulation ou un décalage d'un espace dans le YAML.
  • down -v : les volumes, donc les données, sont effacés.
  • Écrire le mot de passe en clair dans le fichier compose publié sur GitHub.

Revoir la leçon et ses exercices

Docker · Défi final

Déménager un site dans Docker

À retenir

  • Un réseau par application ; la base sans port publié, joignable par son nom.
  • Les données dans un volume, le site en lecture seule, --restart unless-stopped partout.
  • Derrière un proxy (Caddy, nginx), on publie sur 127.0.0.1 seulement.
  • Faire le ménage : docker rm les vieux conteneurs, docker image prune -a.

Mémo

docker network create blog-reseau
docker volume create blog-base
docker run -d --name blog-db --network blog-reseau -e MARIADB_ROOT_PASSWORD=… -v blog-base:/var/lib/mysql --restart unless-stopped mariadb:11
docker run -d --name blog-web --network blog-reseau -p 127.0.0.1:8080:80 -v ~/blog:/usr/share/nginx/html:ro --restart unless-stopped nginx:alpine
docker image prune -a

Pièges à éviter

  • Publier -p 8080:80 derrière un proxy : le site est aussi joignable en direct, sans HTTPS.
  • Oublier de supprimer l'ancien conteneur : « port is already allocated ».

Revoir la leçon et ses exercices