Aller au contenu

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 ?

  1. Recherche locale : Docker cherche l'image hello-world sur votre machine.
  2. Téléchargement (Pull) : Il ne la trouve pas -> il la télécharge automatiquement depuis le registre officiel (Docker Hub).
  3. Création : Il crée un nouveau conteneur à partir de cette image.
  4. Exécution : Le conteneur lance sa commande par défaut.
  5. 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
Explication : -p 8080:80

  • 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.