Docker est devenu un outil incontournable pour développer, tester et déployer des applications de manière fiable. Pourtant, ses termes techniques peuvent intimider au premier abord : image, conteneur, volume, registre ou encore Dockerfile. La bonne nouvelle est que Docker peut s’apprendre progressivement, à partir de quelques commandes simples et d’exemples concrets. Il n’est pas nécessaire d’être administrateur système pour lancer un premier conteneur en quelques minutes.
Ce guide Docker pour débutants vous accompagne pas à pas dans la découverte de cet écosystème. Vous apprendrez ce qu’est un conteneur, pourquoi Docker simplifie le travail des développeurs, comment installer l’outil, exécuter une application existante et créer votre propre image. Nous aborderons aussi les bonnes pratiques essentielles concernant les données, les réseaux, la sécurité et le nettoyage de votre environnement local. L’objectif est de vous donner des repères solides afin de transformer Docker en outil quotidien, que vous développiez un site web, une API, un projet WordPress ou une application métier.
1. Comprendre Docker et les conteneurs

Pourquoi Docker est-il si utilisé ?
Docker est une plateforme qui permet d’empaqueter une application avec tout ce dont elle a besoin pour fonctionner : le code, les bibliothèques, les dépendances, les variables de configuration et parfois le système d’exploitation minimal nécessaire. Cet ensemble est exécuté dans un conteneur. Le résultat est simple : l’application se comporte de façon similaire sur l’ordinateur du développeur, sur un serveur de test et en production.
Avant Docker, un problème classique apparaissait régulièrement : une application fonctionnait parfaitement sur un poste, mais échouait sur un autre serveur à cause d’une version différente de PHP, Node.js, Python, MySQL ou d’une extension manquante. Les conteneurs réduisent fortement ce risque en standardisant l’environnement d’exécution. Docker n’élimine pas tous les problèmes techniques, mais il rend les environnements beaucoup plus reproductibles.
La différence entre machine virtuelle et conteneur
Une machine virtuelle émule un ordinateur complet avec son propre système d’exploitation. Elle est très utile pour isoler des environnements, mais elle consomme souvent davantage de mémoire, d’espace disque et de ressources processeur. Un conteneur, lui, partage le noyau du système hôte tout en isolant les processus, le réseau et le système de fichiers de l’application.
| Critère | Conteneur Docker | Machine virtuelle |
|---|---|---|
| Démarrage | Souvent en quelques secondes | Souvent plus long |
| Consommation de ressources | Faible à modérée | Plus importante |
| Système d’exploitation invité | Non, noyau partagé | Oui, complet |
| Portabilité | Très élevée grâce aux images | Variable selon l’hyperviseur |
| Cas d’usage courant | Applications, services, tests | Isolation forte, systèmes complets |
Les notions à mémoriser dès le départ
Pour progresser efficacement, retenez qu’une image est un modèle immuable, tandis qu’un conteneur est une instance en cours d’exécution de cette image. Par exemple, l’image officielle Nginx contient le serveur web et sa configuration par défaut. Lorsque vous lancez cette image, Docker crée un conteneur Nginx réellement actif sur votre machine.
- Docker Engine : le moteur qui crée et exécute les conteneurs.
- Image : un modèle prêt à être utilisé, composé de couches.
- Conteneur : une exécution isolée d’une image.
- Docker Hub : le registre public le plus connu pour télécharger des images.
- Volume : un espace persistant destiné à conserver les données.
- Dockerfile : un fichier texte qui décrit comment construire une image.
Cette séparation entre modèle et exécution est fondamentale. Vous pouvez créer dix conteneurs à partir de la même image sans modifier l’image d’origine. C’est particulièrement pratique pour reproduire des bugs, lancer des tests ou mettre en place plusieurs services semblables.
2. Installer Docker sur votre ordinateur
Choisir Docker Desktop ou Docker Engine
Pour un débutant travaillant sous Windows ou macOS, Docker Desktop est généralement le choix le plus accessible. Cette application installe Docker, propose une interface graphique et simplifie la configuration. Sous Linux, il est fréquent d’installer directement Docker Engine via le gestionnaire de paquets de la distribution. Les commandes utilisées au quotidien restent très proches, quel que soit le système.
Sur Windows, Docker Desktop s’appuie le plus souvent sur WSL 2, le sous-système Linux pour Windows. Vérifiez donc que la virtualisation est activée dans le BIOS ou l’UEFI de votre ordinateur. Sur macOS équipé d’une puce Apple Silicon, certaines images doivent être compatibles avec l’architecture ARM64. Docker sélectionne souvent automatiquement la bonne variante, mais il est utile de connaître cette différence si une image ancienne provoque une erreur.
Vérifier que l’installation fonctionne
Après l’installation, ouvrez un terminal puis saisissez la commande suivante :
docker --version
Vous devriez obtenir un numéro de version, par exemple Docker version 27.x. Lancez ensuite le conteneur de démonstration :
docker run hello-world
Docker télécharge alors l’image hello-world si elle n’est pas déjà présente localement, crée un conteneur, affiche un message de confirmation puis s’arrête. Cette commande permet de valider à la fois le client Docker, le moteur Docker et l’accès au registre d’images.
Préparer un environnement propre
Docker est puissant, mais les images et conteneurs peuvent occuper rapidement plusieurs gigaoctets d’espace disque. Commencez avec un disque disposant d’au moins 10 Go libres si vous prévoyez d’utiliser plusieurs stacks de développement. Il est aussi conseillé d’installer un éditeur de code comme Visual Studio Code et d’activer son extension Docker, qui facilite la visualisation des images, conteneurs, réseaux et volumes.
Évitez de copier des commandes trouvées au hasard sans les lire. Une commande Docker peut exposer un port réseau, monter un dossier sensible ou supprimer des ressources. Au début, utilisez des images officielles ou maintenues par des éditeurs reconnus, et consultez leur documentation sur Docker Hub avant de les lancer.
3. Lancer votre premier conteneur Docker

Exécuter un serveur web Nginx
Le meilleur moyen de comprendre Docker est de lancer un service réel. Nginx est un serveur web léger, largement utilisé et simple à tester. Exécutez cette commande :
docker run -d --name mon-nginx -p 8080:80 nginx
Chaque option a un rôle précis. L’option -d lance le conteneur en arrière-plan. --name mon-nginx lui donne un nom lisible. Enfin, -p 8080:80 relie le port 8080 de votre ordinateur au port 80 utilisé par Nginx dans le conteneur. Ouvrez ensuite http://localhost:8080 dans votre navigateur : la page de bienvenue Nginx doit apparaître.
Observer et administrer le conteneur
Une fois votre service démarré, plusieurs commandes permettent de savoir ce qui se passe. La première affiche uniquement les conteneurs actifs :
docker ps
Pour afficher également les conteneurs arrêtés, utilisez docker ps -a. Vous pouvez consulter les journaux d’un conteneur grâce à :
docker logs mon-nginx
Les journaux sont indispensables pour diagnostiquer un problème de démarrage, une erreur de configuration ou un port déjà occupé. Pour suivre les nouveaux messages en direct, ajoutez l’option -f : docker logs -f mon-nginx.
docker stop mon-nginxarrête proprement le conteneur.docker start mon-nginxredémarre un conteneur existant.docker restart mon-nginxeffectue un redémarrage.docker rm mon-nginxsupprime un conteneur arrêté.docker imagesliste les images téléchargées localement.
Comprendre le cycle de vie
Un conteneur n’est pas forcément permanent. Il peut être créé pour accomplir une seule tâche puis disparaître. Par exemple, vous pouvez lancer une commande ponctuelle dans un conteneur Ubuntu :
docker run --rm ubuntu echo "Bonjour Docker"
L’option --rm demande à Docker de supprimer automatiquement le conteneur dès la fin de la commande. C’est une excellente habitude pour les tâches temporaires. À l’inverse, un serveur web ou une base de données doit généralement continuer à fonctionner en arrière-plan et conserver ses données dans un volume dédié.
4. Manipuler les images et les registres Docker
Télécharger une image avec docker pull
Quand vous utilisez docker run, Docker télécharge automatiquement l’image si elle manque localement. Vous pouvez aussi récupérer une image à l’avance avec docker pull. Par exemple :
docker pull redis:7-alpine
Cette commande récupère Redis version 7 dans sa variante Alpine, souvent plus légère. Le suffixe après les deux-points est appelé un tag. Il est recommandé d’utiliser un tag de version précis en environnement professionnel, plutôt que le tag latest. Avec latest, une mise à jour imprévue peut modifier le comportement de votre application.
Choisir une image fiable
Docker Hub contient des millions d’images. Toutes ne présentent pas le même niveau de qualité ni le même suivi. Pour débuter, privilégiez les images officielles signalées comme telles : Nginx, PostgreSQL, Redis, Python, Node, PHP ou Ubuntu. Lisez la documentation associée, notamment les variables d’environnement, les volumes attendus, les ports exposés et les instructions de sécurité.
Une image bien choisie doit être régulièrement mise à jour, documentée et adaptée à votre besoin. Une image très petite n’est pas systématiquement meilleure : elle peut manquer d’outils nécessaires au débogage ou reposer sur une distribution dont vous ne maîtrisez pas les spécificités. Le bon critère est l’équilibre entre sécurité, maintenance, compatibilité et taille.
Inspecter et supprimer les ressources inutiles
Après plusieurs essais, votre poste peut accumuler des images non utilisées. La commande docker image ls affiche leur taille et leurs tags. Pour supprimer une image précise, employez docker rmi nom-image. Attention : Docker refuse de supprimer une image encore utilisée par un conteneur existant.
Pour faire le ménage dans les ressources arrêtées et inutilisées, vous pouvez utiliser :
docker system prune
Ajoutez -a uniquement si vous comprenez les conséquences, car Docker supprimera alors les images non utilisées par un conteneur. Sur un poste de développement partagé, prenez le temps de vérifier ce qui sera supprimé. Le nettoyage est utile, mais il ne doit pas effacer une image nécessaire à un projet actif.
5. Créer votre première image avec un Dockerfile

Le rôle du Dockerfile
Un Dockerfile est un fichier nommé exactement Dockerfile, sans extension, qui décrit les étapes de construction d’une image. Il permet de versionner l’environnement technique avec le code de votre projet. Au lieu d’expliquer oralement à un collègue comment installer Node.js, copier les fichiers, installer les dépendances et démarrer l’application, vous écrivez ces instructions une seule fois dans le Dockerfile.
Voici un exemple minimal pour une petite application Node.js :
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
FROM définit l’image de départ. WORKDIR choisit le dossier de travail. Les instructions COPY copient les fichiers du projet. RUN exécute une commande pendant la construction, tandis que CMD indique la commande par défaut au démarrage du conteneur.
Construire et lancer votre image
Placez ce Dockerfile à la racine du projet, puis exécutez :
docker build -t mon-app-node:1.0 .
Le point final représente le contexte de construction : Docker envoie les fichiers du dossier courant au moteur pour construire l’image. Lancez ensuite l’application :
docker run -d --name mon-app -p 3000:3000 mon-app-node:1.0
Si votre serveur écoute bien sur toutes les interfaces, par exemple 0.0.0.0, l’application est accessible sur http://localhost:3000. Une erreur fréquente consiste à faire écouter une application uniquement sur 127.0.0.1 dans le conteneur. Dans ce cas, le port est publié, mais le service reste inaccessible depuis l’hôte.
Réduire le contexte avec .dockerignore
Créez aussi un fichier .dockerignore. Son fonctionnement est proche de .gitignore : il exclut des fichiers inutiles de la construction. Pour un projet JavaScript, vous pouvez y placer :
node_modules
.git
.env
npm-debug.log
Dockerfile*
Cette précaution accélère les builds, évite d’envoyer des fichiers sensibles et limite la taille de l’image. N’ajoutez jamais un fichier .env contenant des secrets à une image. Les mots de passe, clés API et jetons doivent être transmis au moment de l’exécution par un mécanisme approprié, pas intégrés dans le code ou les couches de l’image.
6. Gérer les données, les volumes et les réseaux
Pourquoi les données disparaissent parfois
Le système de fichiers interne d’un conteneur est éphémère. Si vous supprimez le conteneur, les modifications faites à l’intérieur disparaissent avec lui. C’est acceptable pour du code applicatif reconstruit depuis une image, mais pas pour une base de données, des fichiers envoyés par des utilisateurs ou des documents métier.
Les volumes Docker répondent à ce besoin. Docker les gère indépendamment du cycle de vie des conteneurs. Pour créer un volume et le monter dans PostgreSQL, utilisez par exemple :
docker volume create postgres-data
docker run -d --name postgres \
-e POSTGRES_PASSWORD=motdepassefort \
-v postgres-data:/var/lib/postgresql/data \
postgres:16
Le volume postgres-data conserve les données même si vous arrêtez, supprimez puis recréez le conteneur PostgreSQL. En revanche, n’utilisez pas cet exemple tel quel en production : remplacez le mot de passe, stockez-le de façon sécurisée et planifiez des sauvegardes.
Bind mounts et volumes nommés
Un bind mount relie directement un dossier de votre ordinateur à un dossier dans le conteneur. C’est très pratique en développement, car les modifications du code local sont immédiatement visibles. Exemple :
docker run --rm -it -v "$(pwd):/app" -w /app node:20-alpine npm test
Sous PowerShell Windows, la syntaxe du chemin peut différer. Consultez la documentation de votre terminal si la commande échoue. Les volumes nommés restent préférables pour les données de services, car ils sont mieux isolés du système de fichiers hôte et plus simples à déplacer ou sauvegarder.
Faire communiquer plusieurs conteneurs
Docker crée des réseaux virtuels. Des conteneurs connectés au même réseau peuvent se joindre en utilisant leur nom, sans exposer tous les ports à votre ordinateur. Cela améliore l’organisation et réduit la surface d’exposition.
docker network create mon-reseau
docker run -d --name cache --network mon-reseau redis:7-alpine
docker run --rm --network mon-reseau redis:7-alpine redis-cli -h cache ping
La dernière commande doit retourner PONG. Ici, le second conteneur contacte Redis grâce au nom cache. Cette logique est la base des architectures composées d’une application, d’une base de données, d’un cache et parfois d’un proxy web.
7. Organiser un projet avec Docker Compose
Pourquoi utiliser Docker Compose ?
Dès qu’un projet nécessite plusieurs services, exécuter de longues commandes docker run devient difficile à maintenir. Docker Compose permet de définir l’ensemble de l’environnement dans un fichier YAML, souvent nommé compose.yaml. Vous pouvez ainsi démarrer une application et sa base de données avec une seule commande, partager la configuration avec l’équipe et la versionner dans Git.
Voici un exemple volontairement simple pour une application web et PostgreSQL :
services:
app:
build: .
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://app:secret@db:5432/appdb
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: appdb
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Démarrer, arrêter et reconstruire les services
Dans le dossier contenant le fichier, lancez :
docker compose up -d --build
L’option --build reconstruit l’image de l’application si nécessaire. Docker Compose crée automatiquement un réseau pour le projet. Le service app peut donc joindre la base en utilisant le nom d’hôte db. Il n’est pas nécessaire d’exposer le port PostgreSQL vers votre machine si seule l’application doit y accéder.
docker compose psaffiche l’état des services.docker compose logs -fsuit les journaux de tous les services.docker compose downarrête et supprime les conteneurs et le réseau.docker compose down -vsupprime aussi les volumes : à utiliser avec prudence.docker compose exec app shouvre un terminal dans le service applicatif.
Bonnes pratiques de configuration
Ne placez pas des secrets réels directement dans un fichier Compose envoyé sur un dépôt public. Utilisez plutôt un fichier .env non versionné, des variables fournies par votre plateforme de déploiement ou un gestionnaire de secrets. Pensez également à définir des versions d’images explicites, à documenter les ports utilisés et à séparer les configurations de développement et de production lorsque le projet grandit.
Compose ne remplace pas forcément un orchestrateur comme Kubernetes pour une infrastructure très distribuée. En revanche, il couvre parfaitement de nombreux besoins locaux, des environnements de démonstration, des tests d’intégration et des déploiements simples sur un serveur unique.
8. FAQ, bonnes pratiques et conclusion
Quelles erreurs évitent les débutants efficaces ?
La première erreur consiste à considérer un conteneur comme une machine virtuelle dans laquelle on installe manuellement tout ce dont on a besoin. L’approche Docker consiste plutôt à décrire l’environnement dans un Dockerfile, reconstruire l’image quand nécessaire et traiter les conteneurs comme des unités remplaçables. Une seconde erreur est de stocker les données critiques dans le système de fichiers du conteneur au lieu d’utiliser un volume.
Évitez aussi d’exécuter systématiquement les applications en tant que superutilisateur, d’utiliser latest sans contrôle de version ou d’exposer publiquement une base de données. En production, appliquez les mises à jour de sécurité, limitez les ports publiés, analysez les images et sauvegardez régulièrement les volumes qui contiennent des données importantes.
Quels réflexes adopter au quotidien ?
Pour apprendre Docker durablement, avancez par petits projets. Lancez d’abord Nginx, puis une base Redis, ensuite une application simple avec son Dockerfile, et enfin un environnement Compose. À chaque étape, observez les journaux, inspectez les conteneurs et entraînez-vous à arrêter puis recréer les services. Cette répétition transforme les commandes en réflexes.
Consultez régulièrement la documentation officielle des images utilisées. Les options de PostgreSQL, WordPress, PHP, Node.js ou Traefik ne sont pas interchangeables. Gardez également un fichier README dans chaque projet avec les commandes de démarrage, les variables attendues et les adresses locales. Cette documentation vous fera gagner du temps, surtout après plusieurs semaines sans toucher au projet.
Conclusion
Docker pour débutants ne doit pas être perçu comme une technologie réservée aux grandes équipes DevOps. C’est avant tout un moyen pragmatique de lancer des applications dans des environnements cohérents, isolés et faciles à reproduire. En maîtrisant les images, les conteneurs, les ports, les volumes et les réseaux, vous disposez déjà des fondations nécessaires pour travailler sur de nombreux projets modernes.
Commencez par des commandes simples, puis construisez progressivement vos propres images et fichiers Compose. Prenez l’habitude de nommer vos conteneurs, de consulter les logs, de versionner vos configurations et de ne jamais négliger la persistance des données. Avec ces pratiques, Docker devient un accélérateur de développement et un outil fiable pour préparer vos futurs déploiements. Sur virtuaconnect.fr, cette base pourra ensuite être complétée par des sujets plus avancés comme l’hébergement de conteneurs, l’automatisation CI/CD ou la sécurisation d’une infrastructure Docker.
- Une image est un modèle réutilisable, tandis qu’un conteneur est son instance isolée en cours d’exécution.
- Les volumes sont indispensables pour conserver les données d’une base de données ou d’une application après la suppression d’un conteneur.
- Docker Compose simplifie le démarrage et la maintenance des projets composés de plusieurs services, comme une application et sa base de données.
