Retour au blog
Docker

Docker : le guide complet pour les débutants (conteneurs, images, Compose)

22 min de lecturePublié le 2026-02-06Stectra Consulting

Docker a révolutionné la manière dont on développe, teste et déploie des applications. Si vous entendez parler de « conteneurs » partout mais que vous ne savez pas par où commencer, ce guide est fait pour vous.

Pourquoi Docker ?

Imaginez que vous développez une application Node.js sur votre Mac. Elle fonctionne parfaitement. Vous l'envoyez à votre collègue sur Windows : ça plante. Vous la déployez en production sur Linux : autre erreur. Le problème ? Les différences d'environnement : versions de Node, de librairies système, de configuration.

Docker résout ce problème en empaquetant votre application avec tout ce dont elle a besoin (code, dépendances, configuration, OS de base) dans un « conteneur ». Ce conteneur fonctionne de manière identique partout.

Conteneur vs. Machine Virtuelle

On compare souvent Docker aux machines virtuelles (VM). La différence clé :

  • VM : embarque un OS complet (Linux, Windows), lourd (Go), long à démarrer (minutes)
  • Conteneur : partage le noyau de l'hôte, léger (Mo), démarre en secondes

Un serveur peut faire tourner 3-4 VMs. Le même serveur peut faire tourner 50-100 conteneurs. C'est cette efficacité qui a rendu Docker indispensable.

Les concepts clés

Image

Une image Docker est un modèle en lecture seule qui contient tout ce qu'il faut pour exécuter une application. C'est comme un plan d'architecte : à partir d'une image, on peut créer autant de conteneurs qu'on veut.

Conteneur

Un conteneur est une instance d'une image en cours d'exécution. C'est la maison construite à partir du plan. Chaque conteneur est isolé des autres.

Dockerfile

Le Dockerfile est la recette qui décrit comment construire une image. C'est un fichier texte avec des instructions séquentielles.

Registry

Un registry est un serveur qui stocke les images Docker. Docker Hub est le registry public le plus connu. Vous y trouverez des images officielles pour Node.js, Python, PostgreSQL, Nginx, et des milliers d'autres.

Premiers pas avec Docker

Lancer votre premier conteneur

$ docker run hello-world

Cette commande télécharge l'image hello-world depuis Docker Hub et lance un conteneur. Si vous voyez le message de bienvenue, Docker fonctionne.

Lancer un serveur Nginx

$ docker run -d -p 8080:80 --name mon-nginx nginx

Décomposons :

  • -d : mode détaché (en arrière-plan)
  • -p 8080:80 : redirige le port 8080 de votre machine vers le port 80 du conteneur
  • --name mon-nginx : donne un nom au conteneur
  • nginx : l'image à utiliser

Ouvrez http://localhost:8080 : vous avez un serveur web en 5 secondes.

Les commandes essentielles

$ docker ps                    # Conteneurs en cours
$ docker ps -a                 # Tous les conteneurs (même arrêtés)
$ docker images                # Images locales
$ docker logs mon-nginx        # Logs d'un conteneur
$ docker exec -it mon-nginx bash   # Entrer dans un conteneur
$ docker stop mon-nginx        # Arrêter
$ docker rm mon-nginx          # Supprimer

Écrire un Dockerfile

Voici un Dockerfile pour une application Node.js :

# Image de base
FROM node:20-alpine

# Répertoire de travail
WORKDIR /app

# Copier les fichiers de dépendances
COPY package*.json ./

# Installer les dépendances
RUN npm ci --only=production

# Copier le code source
COPY . .

# Port exposé
EXPOSE 3000

# Commande de démarrage
CMD ["node", "server.js"]

Pour construire et lancer :

$ docker build -t mon-app .
$ docker run -d -p 3000:3000 mon-app

Bonnes pratiques Dockerfile

  • Utilisez des images Alpine (plus légères : 50 Mo vs 900 Mo)
  • Ordonnez les instructions du moins au plus changeant (cache Docker)
  • Utilisez .dockerignore pour exclure node_modules, .git, etc.
  • Un conteneur = un processus
  • N'exécutez pas en root : ajoutez USER node

Docker Compose — Applications multi-conteneurs

La plupart des applications réelles utilisent plusieurs services : une API, une base de données, un cache Redis, un reverse proxy. Docker Compose permet de les définir et les lancer ensemble.

# docker-compose.yml
services:
  api:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/mydb
    depends_on:
      - db

  db:
    image: postgres:16-alpine
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=pass
      - POSTGRES_USER=user
      - POSTGRES_DB=mydb

  redis:
    image: redis:7-alpine

volumes:
  pgdata:
$ docker compose up -d         # Lancer tous les services
$ docker compose logs -f       # Suivre les logs
$ docker compose down          # Tout arrêter
$ docker compose down -v       # Arrêter + supprimer les volumes

Volumes — Persistance des données

Par défaut, les données d'un conteneur sont éphémères : si le conteneur est supprimé, les données disparaissent. Les volumes résolvent ce problème.

# Volume nommé (géré par Docker)
$ docker run -v pgdata:/var/lib/postgresql/data postgres

# Bind mount (dossier local)
$ docker run -v $(pwd)/src:/app/src node

Réseau Docker

Docker crée automatiquement un réseau pour vos conteneurs. Les conteneurs dans le même réseau peuvent communiquer par leur nom.

$ docker network create mon-reseau
$ docker run --network mon-reseau --name api mon-app
$ docker run --network mon-reseau --name db postgres
# L'API peut se connecter à la DB via "db:5432"

Docker en production

En production, Docker est généralement couplé à :

  • Kubernetes ou Docker Swarm pour l'orchestration
  • Un registry privé (AWS ECR, GitLab Registry, Harbor)
  • Un pipeline CI/CD qui build et push automatiquement les images
  • Prometheus + Grafana pour le monitoring

Erreurs courantes à éviter

  • Images trop lourdes : partez d'Alpine, pas d'Ubuntu
  • Pas de .dockerignore : votre image contient node_modules et .git
  • Exécuter en root : risque de sécurité
  • Stocker des données dans le conteneur : utilisez des volumes
  • Hardcoder des secrets : utilisez des variables d'environnement ou Docker secrets

Prêt à pratiquer ?

Lire un guide, c'est un début. Mais Docker se maîtrise en tapant des commandes, en construisant des images, en debuguant des conteneurs qui ne démarrent pas. Notre parcours Docker comprend 60 labs interactifs sur un vrai terminal, organisés du débutant à l'expert.

Passez à la pratique

Cet article vous a donné les bases. Maintenant, pratiquez chaque commande sur un vrai terminal avec nos labs interactifs guidés.

Commencer les labs Docker