Aller au contenu principal
Docker : conteneuriser vos applications simplement
Retour aux articles

Docker : conteneuriser vos applications simplement

Auteur 1 min de lecture

Qu'est-ce que Docker ?

Docker est une plateforme open source qui permet de créer, déployer et exécuter des applications dans des conteneurs. Un conteneur embarque tout ce dont une application a besoin pour fonctionner : code, dépendances, bibliothèques et configuration système.

Contrairement aux machines virtuelles, les conteneurs partagent le noyau du système hôte, ce qui les rend beaucoup plus légers et rapides à démarrer.

Installation

Linux (Ubuntu/Debian)

bash
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

Déconnectez-vous puis reconnectez-vous pour appliquer les permissions.

macOS et Windows

Téléchargez et installez Docker Desktop depuis le site officiel.

Vérifier l'installation

bash
docker --version
docker run hello-world

Concepts clés

  • Image : un modèle en lecture seule contenant l'application et ses dépendances
  • Conteneur : une instance en cours d'exécution d'une image
  • Dockerfile : un fichier de recette pour construire une image
  • Registry : un dépôt d'images (ex : Docker Hub)
  • Volume : un espace de stockage persistant pour les données

Commandes essentielles

Gestion des conteneurs

bash
# Lancer un conteneur
docker run -d --name mon-app -p 8080:80 nginx

# Lister les conteneurs en cours
docker ps

# Lister tous les conteneurs (y compris arrêtés)
docker ps -a

# Arrêter un conteneur
docker stop mon-app

# Redémarrer un conteneur
docker start mon-app

# Supprimer un conteneur
docker rm mon-app

# Voir les logs
docker logs mon-app

# Exécuter une commande dans un conteneur
docker exec -it mon-app bash

Gestion des images

bash
# Télécharger une image
docker pull node:22-alpine

# Lister les images locales
docker images

# Supprimer une image
docker rmi node:22-alpine

# Construire une image depuis un Dockerfile
docker build -t mon-image:latest .

Écrire un Dockerfile

Voici un exemple de Dockerfile pour une application Node.js :

dockerfile
FROM node:22-alpine

WORKDIR /app

COPY package*.json ./
RUN npm ci --only=production

COPY . .

EXPOSE 3000

CMD ["node", "server.js"]

Bonnes pratiques pour le Dockerfile

  • Utilisez des images légères (alpine) pour réduire la taille
  • Exploitez le cache en copiant package.json avant le code source
  • Utilisez .dockerignore pour exclure les fichiers inutiles
  • Minimisez le nombre de couches en combinant les commandes RUN
  • N'exécutez pas en root — créez un utilisateur dédié

Exemple de .dockerignore :

text
node_modules
.git
.env
*.md

Docker Compose

Docker Compose permet de définir et gérer des applications multi-conteneurs via un fichier YAML.

Exemple : application web + base de données

yaml
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/mydb
    depends_on:
      - db

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

volumes:
  db-data:

Commandes Docker Compose

bash
# Démarrer les services
docker compose up -d

# Voir l'état des services
docker compose ps

# Voir les logs
docker compose logs -f

# Arrêter les services
docker compose down

# Reconstruire les images
docker compose build

# Arrêter et supprimer les volumes
docker compose down -v

Build multi-stage

Le build multi-stage permet de créer des images finales plus légères en séparant les étapes de build et d'exécution :

dockerfile
# Étape 1 : Build
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Étape 2 : Production
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Volumes et persistance

Les données dans un conteneur sont éphémères. Pour persister les données, utilisez des volumes :

bash
# Créer un volume nommé
docker volume create mes-donnees

# Monter un volume dans un conteneur
docker run -d -v mes-donnees:/data mon-image

# Monter un dossier local (bind mount)
docker run -d -v $(pwd)/config:/app/config mon-image

# Lister les volumes
docker volume ls

# Supprimer les volumes inutilisés
docker volume prune

Réseau

Docker crée un réseau isolé pour chaque groupe de conteneurs :

bash
# Créer un réseau
docker network create mon-reseau

# Lancer un conteneur sur ce réseau
docker run -d --network mon-reseau --name api mon-api

# Les conteneurs sur le même réseau se trouvent par nom
# Ex : depuis un autre conteneur, "api" résout vers l'IP du conteneur api

Commandes de nettoyage

bash
# Supprimer les conteneurs arrêtés, images inutilisées, volumes orphelins
docker system prune -a

# Voir l'espace disque utilisé par Docker
docker system df

Conclusion

Docker simplifie le déploiement et garantit que votre application fonctionne de manière identique partout — en développement, en test et en production. Avec Docker Compose, vous pouvez orchestrer facilement des architectures multi-services. C'est un outil indispensable dans la boîte à outils de tout développeur moderne.

Articles similaires