Docker Engine est la suite de conteneurisation qui a popularisé les conteneurs Linux en 2013. Elle regroupe un daemon (dockerd), une interface CRI vers containerd (runtime bas niveau), un moteur de build d'images (BuildKit depuis v23.0), et le CLI docker. Docker Engine (projet Moby) est open source sous Apache 2.0. Docker Desktop, l'application graphique pour macOS et Windows, est un produit commercial distinct nécessitant une licence pour les entreprises.
Idéal pour : développement local, CI/CD, équipes habituées à l'écosystème Docker, environnements sans Kubernetes.
Docker et Kubernetes : Docker Engine n'est plus recommandé comme runtime Kubernetes. Le dockershim a été retiré dans Kubernetes 1.24 (mai 2022). Sur Kubernetes, utiliser containerd ou CRI-O.
cri-dockerdexiste comme shim externe si Docker Engine est imposé.
Informations essentielles
Origine : Docker Inc. / projet Moby (États-Unis) · Licence : Apache 2.0 (Engine) - propriétaire (Desktop) · Architectures : x86_64, ARM64, ARMv7, s390x
Liens : Site officiel · GitHub (Moby) · Releases
Support : Docker maintient la dernière version stable avec des patchs de sécurité. Cycle de release mensuel environ.
Licence Docker Desktop : depuis août 2022, Docker Desktop nécessite un abonnement payant pour les entreprises avec plus de 250 employés ou plus de 10 M$ de chiffre d'affaires annuel. Docker Engine (le daemon Linux) reste libre.
Architecture
| Composant | Rôle |
|---|---|
| dockerd | Daemon principal - API REST/Unix socket |
| containerd | Runtime de conteneurs embarqué (depuis Docker 1.11) |
| runc | Runtime OCI bas niveau |
| BuildKit | Moteur de build (par défaut depuis Docker 23.0) |
| docker CLI | Interface en ligne de commande |
Installation
Linux (script officiel - recommandé pour dev/test)
curl -fsSL https://get.docker.com | sudo sh
# Ajouter l'utilisateur au groupe docker (évite sudo)
sudo usermod -aG docker $USER
newgrp docker
docker --version
Ubuntu / Debian (dépôt officiel)
# Ajouter le dépôt Docker
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
RHEL / Rocky Linux / AlmaLinux
sudo dnf install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
Conteneurs
# Lancer un conteneur en foreground
docker run --rm -it ubuntu:24.04 bash
# Lancer en arrière-plan avec port forwarding
docker run -d --name nginx -p 8080:80 nginx:alpine
# Voir les conteneurs actifs
docker ps
# Voir tous les conteneurs (actifs + arrêtés)
docker ps -a
# Logs
docker logs nginx
docker logs -f nginx # suivi en temps réel
# Shell dans un conteneur actif
docker exec -it nginx sh
# Arrêter / supprimer
docker stop nginx
docker rm nginx
Images
# Télécharger une image
docker pull postgres:16-alpine
# Lister les images locales
docker images
# Builder une image
docker build -t mon-app:1.0 .
# Builder avec BuildKit (variables de build, cache avancé)
docker build \
--build-arg VERSION=1.0 \
--cache-from mon-app:latest \
-t mon-app:1.0 .
# Pousser vers un registry
docker push registry.example.com/mon-app:1.0
# Supprimer les images inutilisées
docker image prune -a
Docker Compose v2
Compose v2 est intégré à Docker Engine (docker compose, sans tiret). Le binaire autonome docker-compose (v1) est obsolète.
# compose.yaml (ou docker-compose.yml)
services:
app:
image: node:20-alpine
working_dir: /app
volumes:
- .:/app
ports:
- "3000:3000"
command: npm start
depends_on:
db:
condition: service_healthy
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: password
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d myapp"]
interval: 5s
retries: 5
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
docker compose up -d # démarrer en arrière-plan
docker compose logs -f # suivre les logs
docker compose ps # état des services
docker compose down # arrêter et supprimer
docker compose down -v # avec suppression des volumes
Réseaux et volumes
# Créer un réseau bridge isolé
docker network create mon-reseau
docker run -d --name app --network mon-reseau nginx
# Volumes persistants
docker volume create mon-volume
docker run -d -v mon-volume:/data postgres:16-alpine
# Inspecter
docker network inspect mon-reseau
docker volume inspect mon-volume
# Nettoyage
docker system prune -a --volumes # ATTENTION : supprime tout (conteneurs, images, volumes inutilisés)
Mise à jour
# Ubuntu/Debian
sudo apt-get install --only-upgrade docker-ce docker-ce-cli containerd.io
# Vérifier
docker version
Troubleshooting
Daemon ne démarre pas
sudo systemctl status docker
sudo journalctl -u docker -n 50 --no-pager
Permissions refusées
# Vérifier que l'utilisateur est dans le groupe docker
groups $USER
# Si absent :
sudo usermod -aG docker $USER && newgrp docker
Espace disque saturé
docker system df # utilisation disque par type
docker system prune # conteneurs, réseaux et images inutilisés
docker image prune -a # toutes les images sans conteneur actif
docker volume prune # volumes sans conteneur
Commandes utiles
# État
docker info
docker version
docker system df
# Conteneurs
docker ps -a
docker stats # monitoring CPU/RAM en temps réel
docker inspect <id> # configuration complète JSON
# Nettoyage
docker container prune
docker image prune -a
docker system prune -a --volumes
# Registry
docker login registry.example.com
docker pull / push / tag
Ressources
- Documentation Engine : https://docs.docker.com/engine/
- Notes de release : https://docs.docker.com/engine/release-notes/
- GitHub (Moby) : https://github.com/moby/moby
- Docker Hub : https://hub.docker.com
- Docker Compose : https://docs.docker.com/compose/
- BuildKit : https://docs.docker.com/build/buildkit/