Premiers pas avec Docker : guide pratique pour débuter avec les conteneurs
Docker est aujourd'hui l'un des outils les plus utilisés pour exécuter des applications dans des conteneurs isolés, portables et légers. Il résout le fameux problème : "Mais ça marche sur ma machine !"
Que vous soyez :
- Débutant en Linux
- Étudiant en informatique
- Administrateur système
- Développeur
Comprendre les bases de Docker est aujourd'hui une compétence indispensable.
Prérequis
- Docker installé sur votre machine (Linux, macOS ou Windows)
- Un accès au terminal
- Les droits nécessaires pour exécuter Docker
Besoin d'aide pour l'installation ?
Consultez mon guide complet : Installation de Docker.
Ce que vous allez apprendre
Dans ce guide, nous allons poser les fondations :
- Vérifier que Docker fonctionne correctement
- Comprendre la différence fondamentale entre une image Docker et un conteneur Docker
- Lancer votre premier conteneur
- Explorer un conteneur de manière interactive
- Maîtriser les commandes Docker essentielles du quotidien
Vérifions que Docker fonctionne
Avant de manipuler des conteneurs, assurons-nous que Docker est opérationnel.
Vérifier les versions client et serveur
docker version
Cette commande affiche deux sections importantes :
- Client : La version de l'interface en ligne de commande (CLI) que vous utilisez.
- Server : La version du démon Docker (le moteur qui fait tourner les conteneurs).
Erreur courante
Si vous voyez un message ERROR dans la section Server, cela signifie que le service Docker n'est pas démarré.
Voir les informations système
docker info
Cette commande agit comme un tableau de bord Docker. Elle fournit des détails précieux pour le diagnostic :
Elle affiche notamment :
- Nombre de conteneurs (en cours et arrêtés)
- Nombre d'images stockées
- Driver de stockage (overlay2, etc.)
- Réseau utilisé
- Configuration réseau
Premier contact : le conteneur hello-world
En informatique, la tradition veut que l'on commence par un "Hello World". Docker propose une image officielle pour valider l'installation.
docker container run hello-world
Que s'est-il passé en arrière-plan ?
- Recherche locale : Docker cherche l'image hello-world sur votre machine.
- Téléchargement (Pull) : Il ne la trouve pas -> il la télécharge automatiquement depuis le registre officiel (Docker Hub).
- Création : Il crée un nouveau conteneur à partir de cette image.
- Exécution : Le conteneur lance sa commande par défaut.
- Fin : Le processus se termine, le conteneur s'arrête.
Exemple de sortie :
Hello from Docker!
This message shows that your installation appears to be working correctly.
Qu'est-ce que Docker Hub ?
Docker Hub est le registre officiel public d'images Docker. C'est l'équivalent d'un dépôt de paquets pour conteneurs. On y trouve des images officielles maintenues par les éditeurs :
- Systèmes d'exploitation : Ubuntu, Debian, Alpine
- Serveurs Web : Nginx, Apache
- Bases de données : MySQL, PostgreSQL, MongoDB
- Runtimes : Node.js, Python, Go
Image vs Conteneur : la notion clé à comprendre
Si vous ne deviez retenir qu'une seule chose de ce tutoriel, c'est la distinction entre ces deux concepts.
| Caractéristique | Image Docker | Conteneur Docker |
|---|---|---|
| Analogie | Une recette de cuisine (le texte) | Le plat préparé à partir de la recette (le résultat) |
| Nature | Modèle immuable (en lecture seule) | Instance en exécution (modifiable) |
| Cycle de vie | Statique (ne change pas) | Dynamique (peut être démarré, arrêté, supprimé) |
| Usage | Utilisée pour créer des conteneurs | C'est l'environnement qui exécute l'application |
En résumé
- Une image est un modèle (template) figé contenant le code et les dépendances.
- Un conteneur est une instance créée à partir de cette image.
Astuce
Une seule image peut générer des milliers de conteneurs identiques, tout comme une recette permet de cuisiner le même plat plusieurs fois.
Les commandes Docker essentielles
Voici le kit de survie pour gérer vos images et conteneurs au quotidien.
Gérer les images
Télécharger une image sans la lancer (pré-téléchargement) :
docker pull nginx # Télécharge la dernière version (latest)
docker image pull mysql:8.0 # Forme longue recommandée avec tag de version
Lister les images disponibles localement
docker images # Ancienne forme (alias)
docker image ls # Forme moderne recommandée
Supprimer une image
docker rmi nginx # Forme courte (image id ou nom)
docker image rm nginx # Forme longue recommandée
Netoyer les images inutilisées (gain d'espace disque) :
docker image prune # Supprime les images "dangling" (sans tag)
docker image prune -a # Supprime toutes les images non utilisées par un conteneur
Lancer un conteneur interactif
Parfois, on veut juste tester une commande dans un environnement Linux propre (ex: Ubuntu).
docker container run -it ubuntu bash
Explication des options :
-i(interactive) : Maintient l'entrée standard (STDIN) ouverte.-t(tty) : Alloue un pseudo-terminal.ubuntu: L'image source.bash: La commande à exécuter à l'intérieur.
Vous êtes maintenant à l'intérieur du conteneur. Le prompt a changé :
root@1074b324e7ef:/#
Essayez ces commandes à l'intérieur :
ls -la
cat /etc/os-release
Pour quitter :
exit
Mode détaché (arrière-plan)
docker run -d nginx
Piège courant
Un conteneur s'arrête immédiatement si aucun processus ne tourne en premier plan. Pour le garder en vie :
docker run -d ubuntu sleep infinity
Voir ce qui se passe dans un conteneur détaché
docker logs mon-nginx # Affiche les logs
docker logs -f mon-nginx # Suivre les logs en temps réel (--follow)
Lister les conteneurs
Voir uniquement les conteneurs actifs :
docker ps # Forme courte historique
docker container ls # Forme longue recommandée
Voir tous les conteneurs (y compris ceux arrêtés) :
docker ps -a # tous les conteneurs (actifs + arrêtés)
docker container ls -a # équivalent, forme longue recommandée
Le statut Exited
Un conteneur dont le processus principal a fini s'arrête automatiquement. Son statut passe à Exited. Il existe toujours sur le disque et peut être redémarré ou supprimé.
Arrêter et supprimer un conteneur
Il est important de nettoyer ses conteneurs inactifs.
Arrêter un conteneur qui tourne en arrière-plan :
docker container stop <nom_ou_id>
Supprimer un conteneur arrêté :
docker container rm <nom_ou_id>
Exemple :
docker container rm ubuntu # supprime un container arrêté
docker container rm $(docker ps -a -q) # supprime tous les conteneurs (y compris ceux arrêtés)
docker container rm -f ubuntu # supprime un conteneur en cours (forcé)
Supprimer tous les conteneurs arrêtés d'un coup (nettoyage de fin de journée) :
docker container prune # supprime tous les conteneurs arrêtés
docker container prune -f # sans confirmation
docker container rm $(docker container ls -a -q -f status=exited) # supprime tous les containers exited
Attention
docker container prune demande confirmation et supprime définitivement les données non sauvegardées dans des volumes.
Cas pratique : lancer un serveur web Nginx
Mettons en pratique ces connaissances avec un cas concret : lancer un serveur web.
Lancer le serveur :
docker container run -d nginx
L'option -d signifie détaché (detached mode). Docker lance le conteneur en arrière-plan et vous rend la main dans le terminal.
Vérifiez son état :
docker container ps
Vous devriez voir un conteneur avec un nom généré automatiquement.
Bonne pratique : nommer ses conteneurs
docker container run -d --name mon-nginx nginx
Notez l'option --name mon-webserver. Donner un nom explicite à vos conteneurs facilite grandement leur gestion (arrêt, suppression, logs) plutôt que d'utiliser des identifiants aléatoires comme f7a3b2c
Rendre le serveur accessible (Mapping de ports)
Le conteneur tourne, mais pour l'instant, il est isolé. Pour accéder à la page web depuis votre navigateur, vous devez publier le port.
Par défaut, Nginx écoute sur le port 80 à l'intérieur du conteneur. Nous allons le mapper sur le port 8080 de votre machine.
Arrêtez le conteneur précédent et relancez-le avec l'option -p :
# Arrêter l'ancien
docker container stop <id_du_conteneur_precedent>
docker container rm <id_du_conteneur_precedent>
# Lancer avec mapping de port
docker container run -d -p 8080:80 --name mon-webserver nginx
- 8080 : Port sur votre machine (hôte).
- 80 : Port à l'intérieur du conteneur.
curl http://localhost:8080
Vous devriez voir la page d'accueil "Welcome to nginx!".
Récapitulatif des commandes
| Commande | Utilité |
|---|---|
docker version |
Vérifier l'installation client/serveur |
docker info |
Voir l'état du démon |
docker image ls |
Lister les images locales |
docker container run |
Créer et lancer un conteneur |
docker container ls |
Lister les conteneurs actifs |
docker container ls -a |
Lister tous les conteneurs |
docker container stop |
Arrêter un conteneur proprement |
docker container rm |
Supprimer un conteneur |
docker container prune |
Nettoyer les conteneurs arrêtés |
Problèmes fréquents
"Port already in use"
=> Le port 8080 est déjà utilisé. Changez le mapping : -p 8081:80
"Cannot connect to the Docker daemon"
=> Le service Docker n'est pas démarré. Lancez-le avec :
sudo systemctl start docker
Conclusion
Vous avez maintenant acquis les bases solides de Docker :
- Vous comprenez le cycle de vie Image -> Conteneur.
- Vous savez lancer des conteneurs en mode interactif ou détaché.
- Vous savez exposer un service via les ports pour qu'il soit accessible.
Ces compétences sont le socle sur lequel nous allons construire des architectures plus complexes.
=> Prochaine étape : Partie 2 -- Gérer les données et les volumes Docker (Apprendre à persister les données).
FAQ Débutants
Quelle est la différence entre docker run et docker start ?
docker run crée un nouveau conteneur à partir d'une image. docker start relance un conteneur existant mais arrêté (il garde ses modifications précédentes).
Où sont stockées les images sur mon disque ?
Docker gère un espace de stockage dédié (généralement dans /var/lib/docker sur Linux). Il est déconseillé de toucher manuellement à ces fichiers ; utilisez toujours les commandes Docker pour les gérer.
Est-ce que Docker ralentit mon ordinateur ?
Non. Contrairement aux machines virtuelles classiques, les conteneurs partagent le noyau (kernel) de l'hôte et sont très légers en ressources mémoire et CPU.