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