Ce que vous allez apprendre :
- Installation et configuration de Docker
- Rechercher et télécharger des images
- Lancer et gérer des conteneurs
- Commandes essentielles du quotidien
- Exercices pratiques
Format :
- 20 min : Théorie et démonstrations
- 40 min : Travaux pratiques guidés
Étape 1 : Inscription
- Aller sur https://hub.docker.com/
- Se connecter avec GitHub ou créer un compte email
- Gratuit pour les dépôts publics
Étape 2 : Installation de Docker
Windows 10/11 :
- Docker Desktop : https://docs.docker.com/desktop/install/windows-install/
- Nécessite WSL 2 (Windows Subsystem for Linux)
macOS :
- Docker Desktop : https://docs.docker.com/desktop/install/mac-install/
- Support Apple Silicon (M1/M2) et Intel
Linux :
- Docker Engine : https://docs.docker.com/engine/install/
- Varie selon la distribution
Alternative : Play with Docker
- http://labs.play-with-docker.com
- Environnement Docker dans le navigateur
- Parfait pour tester sans installation
Polytech : Préférer l'utilisation de Linux Mint avec le compte de "secours".
# Vérifier la version de Docker
docker --version
# Exemple sortie possible : Docker version 29.0.2-rd, build 5a2d7eb
# Vérifier que Docker fonctionne
docker run hello-world
# Afficher les informations système
docker info
# Voir l'aide
docker --helpSi tout fonctionne, vous êtes prêt ! 🎉
Dans un navigateur web :
- Aller sur https://hub.docker.com/
- Taper
wordpressdans la barre de recherche - Sélectionner l'image officielle
- Explorer les informations :
- Versions disponibles (tags)
- Documentation d'utilisation
- Nombre de téléchargements
- Dernière mise à jour
En ligne de commande :
# Rechercher une image sur Docker Hub
docker search wordpress
# Sortie :
# NAME DESCRIPTION STARS OFFICIAL
# wordpress The WordPress rich content management system 5687 [OK]
# wordpress/cli A CLI for WordPress 89 Commande docker search :
- Recherche dans Docker Hub
- Affiche les images publiques
- Trie par popularité (STARS)
- Indique les images officielles
Syntaxe :
docker pull [OPTIONS] NAME[:TAG]Exemples :
# Télécharger la dernière version de WordPress
docker pull wordpress
# Télécharger une version spécifique
docker pull wordpress:6.4
# Télécharger depuis un registre privé
docker pull myregistry.com/myimage:v1.0Que se passe-t-il ?
- Docker contacte le registre (Docker Hub par défaut)
- Télécharge les couches (layers) de l'image
- Stocke l'image localement
- Vérifie l'intégrité (checksum)
Tags importants :
latest: dernière version (par défaut)alpine: version minimale basée sur Alpine LinuxX.Y.Z: version spécifique
Voir les images locales :
# Lister toutes les images
docker images
# Sortie :
# REPOSITORY TAG IMAGE ID CREATED SIZE
# wordpress latest 4c9b15c9a8ae 4 weeks ago 697MB
# nginx alpine a64a6e03b055 2 weeks ago 23.5MB
# mysql 8.0 3218b38490ce 3 weeks ago 516MBColonnes expliquées :
- REPOSITORY : Nom de l'image
- TAG : Version/variante
- IMAGE ID : Identifiant unique (hash)
- CREATED : Date de création
- SIZE : Taille de l'image
- In Use : Indique si l'image est utilisée par un conteneur (nouvelle version)
Nouvelle version avec couleurs et informations d'utilisation :
Autres commandes utiles :
# Filtrer les images
docker images wordpress
# Format personnalisé
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
# Voir toutes les images (y compris intermédiaires)
docker images -aSyntaxe de base :
docker container run [OPTIONS] IMAGE [COMMAND]Exemple WordPress :
docker container run --name some-wordpress -p 8080:80 -d wordpressOptions importantes :
| Option | Description | Exemple |
|---|---|---|
--name |
Nom du conteneur | --name mon-app |
-d |
Mode détaché (background) | -d |
-p |
Mapping de ports | -p 8080:80 |
-e |
Variables d'environnement | -e DB_PASSWORD=secret |
-v |
Volumes (persistance) | -v /data:/app/data |
--rm |
Supprimer après arrêt | --rm |
-it |
Mode interactif | -it |
Explication du mapping de ports :
-p 8080:80
│ │
│ └─ Port dans le conteneur
└────── Port sur l'hôte
Accès à l'application :
Syntaxe :
docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]Exemples pratiques :
# Exécuter une commande simple
docker container exec -ti some-wordpress echo "Hello from container!"
# Sortie : Hello from container!
# Ouvrir un shell bash dans le conteneur
docker container exec -ti some-wordpress bash
# Une fois dans le conteneur :
root@5996767b0f58:/var/www/html# ls
license.txt wp-activate.php wp-blog-header.php ...
root@5996767b0f58:/var/www/html# pwd
/var/www/html
root@5996767b0f58:/var/www/html# exitOptions :
-t: Alloue un pseudo-TTY (terminal)-i: Mode interactif (STDIN ouvert)-tiou-it: Combinaison des deux
Cas d'usage :
- Déboguer une application
- Inspecter les fichiers
- Exécuter des scripts de maintenance
- Vérifier les logs internes
Voir les conteneurs en cours d'exécution :
docker container ps
# Sortie :
# CONTAINER ID IMAGE COMMAND PORTS NAMES
# 80b45fb18d33 wordpress "docker-entrypoint.s…" 0.0.0.0:8080->80/tcp some-wordpressVoir tous les conteneurs (même arrêtés) :
docker container ps -aInformations affichées :
- CONTAINER ID : Identifiant court
- IMAGE : Image utilisée
- COMMAND : Commande exécutée
- CREATED : Date de création
- STATUS : État (Up, Exited)
- PORTS : Ports exposés
- NAMES : Nom du conteneur
Filtres utiles :
# Conteneurs basés sur une image
docker ps --filter "ancestor=wordpress"
# Conteneurs avec un statut spécifique
docker ps -a --filter "status=exited"
# Format personnalisé
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"Arrêter un conteneur :
docker container stop some-wordpress
# Envoie SIGTERM puis SIGKILL après 10sDémarrer un conteneur arrêté :
docker container start some-wordpressRedémarrer un conteneur :
docker container restart some-wordpressMettre en pause / reprendre :
docker container pause some-wordpress
docker container unpause some-wordpressDifférence stop vs kill :
# Arrêt gracieux (recommandé)
docker container stop some-wordpress
# Arrêt forcé immédiat
docker container kill some-wordpressVoir les logs d'un conteneur :
docker container logs some-wordpress
# Sortie :
# WordPress not found in /var/www/html - copying now...
# Complete! WordPress has been successfully copied to /var/www/html
# AH00558: apache2: Could not reliably determine the server's fully qualified ...Options utiles :
# Suivre les logs en temps réel (comme tail -f)
docker container logs -f some-wordpress
# Afficher les 50 dernières lignes
docker container logs --tail 50 some-wordpress
# Afficher avec timestamps
docker container logs -t some-wordpress
# Logs depuis une date
docker container logs --since 2026-01-16T10:00:00 some-wordpress
# Logs jusqu'à une date
docker container logs --until 2026-01-16T11:00:00 some-wordpressBonnes pratiques :
- Les applications doivent logger sur STDOUT/STDERR
- Utiliser
-fpour le débogage en temps réel - Combiner avec
greppour filtrer
Supprimer un conteneur arrêté :
docker container rm some-wordpressForcer la suppression (même en cours d'exécution) :
docker container rm -f some-wordpressSupprimer plusieurs conteneurs :
docker container rm container1 container2 container3Supprimer tous les conteneurs arrêtés :
docker container prune
# Avec confirmation
# WARNING! This will remove all stopped containers.
# Are you sure you want to continue? [y/N] ySupprimer automatiquement après arrêt :
# Option --rm lors du lancement
docker run --rm -d nginxNettoyage complet :
# Supprimer tous les conteneurs (arrêtés et en cours)
docker container rm -f $(docker container ps -aq)Obtenir des informations détaillées :
docker container inspect some-wordpressSortie JSON avec toutes les informations :
- Configuration réseau
- Volumes montés
- Variables d'environnement
- État du conteneur
- Ressources allouées
Extraire des informations spécifiques :
# Adresse IP du conteneur
docker container inspect -f '{{.NetworkSettings.IPAddress}}' some-wordpress
# Variables d'environnement
docker container inspect -f '{{.Config.Env}}' some-wordpress
# Volumes montés
docker container inspect -f '{{.Mounts}}' some-wordpress
# État du conteneur
docker container inspect -f '{{.State.Status}}' some-wordpressVoir l'utilisation des ressources en temps réel :
docker stats
# Sortie :
# CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O
# 80b45fb18d33 some-wordpress 0.50% 128MiB / 7.775GiB 1.61% 1.2kB / 0BInformations affichées :
- CPU % : Utilisation CPU
- MEM USAGE / LIMIT : Mémoire utilisée / limite
- MEM % : Pourcentage de mémoire
- NET I/O : Entrées/sorties réseau
- BLOCK I/O : Entrées/sorties disque
Options utiles :
# Stats d'un conteneur spécifique
docker stats some-wordpress
# Sans streaming (une seule fois)
docker stats --no-stream
# Format personnalisé
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"| Commande | Description | Exemple |
|---|---|---|
docker search |
Rechercher une image | docker search nginx |
docker pull |
Télécharger une image | docker pull nginx:alpine |
docker images |
Lister les images | docker images |
docker run |
Créer et démarrer un conteneur | docker run -d nginx |
docker ps |
Lister les conteneurs | docker ps -a |
docker exec |
Exécuter une commande | docker exec -it app bash |
docker logs |
Voir les logs | docker logs -f app |
docker stop |
Arrêter un conteneur | docker stop app |
docker start |
Démarrer un conteneur | docker start app |
docker restart |
Redémarrer un conteneur | docker restart app |
docker rm |
Supprimer un conteneur | docker rm app |
docker rmi |
Supprimer une image | docker rmi nginx |
docker stats |
Statistiques | docker stats |
docker inspect |
Inspecter | docker inspect app |
Objectif : Lancer WordPress et explorer les commandes Docker
Étapes :
-
Rechercher et télécharger l'image
docker search wordpress docker pull wordpress
-
Lancer le conteneur
docker run --name my-wordpress -p 8080:80 -d wordpress
-
Vérifier que le conteneur fonctionne
docker ps
-
Accéder à WordPress
- Ouvrir http://localhost:8080 dans un navigateur
-
Explorer le conteneur
docker exec -it my-wordpress bash ls -la exit
-
Voir les logs
docker logs my-wordpress
Temps alloué : 15 minutes
1. Utiliser des images officielles
- Vérifier le badge "OFFICIAL IMAGE" sur Docker Hub
- Préférer les images maintenues activement
2. Spécifier des versions précises
# ❌ Éviter
docker pull nginx
# ✅ Préférer
docker pull nginx:1.25.3-alpine3. Scanner les vulnérabilités
docker scan nginx:latest4. Ne pas exécuter en tant que root
# Dans le Dockerfile
USER nonroot5. Limiter les ressources
docker run --memory="512m" --cpus="1.0" nginx6. Utiliser des secrets pour les données sensibles
# Ne jamais faire :
docker run -e PASSWORD=secret123 app
# Utiliser Docker secrets ou variables d'environnement sécurisées1. Alias utiles
# Ajouter dans ~/.bashrc ou ~/.zshrc
alias dps='docker ps'
alias dpsa='docker ps -a'
alias di='docker images'
alias dex='docker exec -it'
alias dlogs='docker logs -f'2. Nettoyage régulier
# Supprimer les conteneurs arrêtés
docker container prune
# Supprimer les images non utilisées
docker image prune
# Supprimer les volumes non utilisés
docker volume prune
# Nettoyage complet
docker system prune -a3. Copier des fichiers
# Du conteneur vers l'hôte
docker cp my-wordpress:/var/www/html/index.php ./index.php
# De l'hôte vers le conteneur
docker cp ./config.php my-wordpress:/var/www/html/4. Sauvegarder/Restaurer des images
# Sauvegarder
docker save -o wordpress.tar wordpress:latest
# Restaurer
docker load -i wordpress.tarAvant de continuer :
- Assurez-vous d'avoir réussi l'exercice WordPress
- Testez les commandes de base
- Posez vos questions
Prochaine étape : Module 3 - Docker Avancé (Dockerfile, Docker Compose)
Rendez-vous dans 15 minutes ! 🚀
- Slides 1-3 : Installation et vérification (10 min)
- Slides 4-15 : Commandes essentielles (30 min)
- Slides 16-18 : Exercice pratique et bonnes pratiques (15 min)
- Slide 19 : Pause (5 min)
- Vérifier que tous les étudiants ont Docker installé
- Aider au dépannage des problèmes d'installation
- S'assurer que tout le monde peut lancer WordPress
- Encourager l'expérimentation avec les commandes
- Préparer des solutions aux problèmes courants
- Port 8080 déjà utilisé → utiliser un autre port
- Docker daemon non démarré → démarrer Docker Desktop
- Permissions insuffisantes (Linux) → ajouter l'utilisateur au groupe docker
- Problèmes réseau → vérifier le firewall
- Docker Desktop installé et fonctionnel
- Compte Docker Hub créé
- Connexion Internet stable
- Terminal/PowerShell ouvert
