Runtimes

Docker Engine

Suite de conteneurisation historique (Apache 2.0, moby). Compose v2 intégré, BuildKit par défaut depuis 23.0. Docker Desktop nécessite une licence pour les entreprises.

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-dockerd existe 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

ComposantRôle
dockerdDaemon principal - API REST/Unix socket
containerdRuntime de conteneurs embarqué (depuis Docker 1.11)
runcRuntime OCI bas niveau
BuildKitMoteur de build (par défaut depuis Docker 23.0)
docker CLIInterface 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

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic