Avant de commencer
- Un serveur ou une VM Debian 12 ou 13, ou Ubuntu dans une version maintenue, en 64 bits
- Un compte avec sudo (voir les commandes Linux pour débuter)
- Un accès à Internet depuis le serveur
En clair
Docker permet de faire tourner une application dans un conteneur : une boîte qui contient l'application et tout ce dont elle a besoin, et qui s'exécute de la même façon sur n'importe quel serveur Linux. Plutôt que d'installer un logiciel et ses dépendances à la main, on récupère une image prête à l'emploi et on la lance. Cette fiche installe Docker proprement, depuis le dépôt officiel, avec les bons réglages dès le départ. Pour la différence entre conteneur et machine virtuelle, voir machine virtuelle et hyperviseur.
1. Quel paquet installer ?
Plusieurs versions de Docker circulent sous Linux :
| Source | Paquet | Conseil |
|---|---|---|
| Dépôt officiel de Docker | docker-ce et ses plugins |
Recommandé : version à jour, Docker Compose inclus |
| Dépôts de Debian ou d'Ubuntu | docker.io |
Fonctionne, mais souvent en retard ; à ne pas mélanger avec le précédent |
| Snap (Ubuntu) | docker |
Déconseillé : comportements différents (chemins, droits) |
| Docker Desktop | Application graphique | Pour un poste de travail, pas pour un serveur |
Cette fiche suit la méthode officielle, avec le dépôt de Docker. Docker prend en charge Debian 13 « Trixie » et Debian 12 « Bookworm », ainsi que les versions maintenues d'Ubuntu.
Et Podman ?
Podman est une alternative compatible, sans service permanent et pensée pour fonctionner sans droits root. Voir conteneurs rootless avec Podman et Quadlet.
2. Retirer les anciens paquets
Si Docker a déjà été installé depuis les dépôts de la distribution, retirez les paquets en conflit. La commande ne touche qu'à ceux qui sont réellement installés :
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-doc podman-docker containerd runc | cut -f1)
Les images, conteneurs et volumes existants, rangés dans /var/lib/docker/, sont conservés.
3. Ajouter le dépôt officiel
Sur Debian
Installer les outils et la clé de signature du dépôt :
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Déclarer le dépôt, au format .sources (deb822) utilisé par Debian 13 :
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
La commande remplit automatiquement le nom de la version (trixie ou bookworm) et l'architecture (amd64 ou arm64).
Sur Ubuntu
Les commandes sont les mêmes, en remplaçant debian par ubuntu dans les deux adresses, et la ligne Suites par :
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Vérifiez le contenu du fichier créé :
cat /etc/apt/sources.list.d/docker.sources
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: trixie
Components: stable
Architectures: amd64
Signed-By: /etc/apt/keyrings/docker.asc
4. Installer Docker
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
| Paquet | Rôle |
|---|---|
docker-ce |
Le moteur Docker (service dockerd) |
docker-ce-cli |
La commande docker |
containerd.io |
Le gestionnaire de conteneurs bas niveau sur lequel s'appuie Docker |
docker-buildx-plugin |
La construction d'images (docker build) |
docker-compose-plugin |
Docker Compose, sous la forme docker compose (avec une espace) |
docker compose et non plus docker-compose
L'ancien programme séparé docker-compose (avec un tiret) est abandonné. Docker Compose est désormais un plugin : on tape docker compose up -d. Les fichiers docker-compose.yml existants restent compatibles ; le nom conseillé est aujourd'hui compose.yaml.
5. Vérifier l'installation
Le service doit être actif et démarrer avec le système :
systemctl status docker
sudo systemctl enable docker.service containerd.service
Lancez le conteneur de test :
sudo docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
Vérifiez les versions :
docker --version
docker compose version
6. Utiliser Docker sans sudo : le groupe docker
Par défaut, seul root peut piloter Docker. Pour éviter de taper sudo à chaque commande, on peut ajouter son compte au groupe docker :
sudo usermod -aG docker spo
Déconnectez-vous puis reconnectez-vous (ou lancez newgrp docker) pour que le changement prenne effet, puis testez :
docker run hello-world
Le groupe docker équivaut à root
La documentation de Docker est explicite : appartenir au groupe docker donne des privilèges équivalents à root. Un membre de ce groupe peut lancer un conteneur qui monte / et modifier n'importe quel fichier du système. N'y ajoutez que des comptes d'administration, jamais un compte de service exposé. Sur un serveur sensible, gardez sudo, ou utilisez le mode rootless de Docker, ou Podman.
7. Limiter la taille des journaux
Par défaut, Docker conserve sans limite tout ce que les conteneurs écrivent sur leur sortie : un conteneur bavard peut remplir le disque en quelques semaines. Créez le fichier /etc/docker/daemon.json :
{
"log-driver": "local",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Puis redémarrez Docker :
sudo systemctl restart docker
Le pilote local compresse les journaux et applique la rotation : au plus 3 fichiers de 10 Mo par conteneur. Le réglage s'applique aux conteneurs créés après le changement ; recréez les autres (docker compose up -d --force-recreate). Les journaux se lisent toujours avec docker logs nom-du-conteneur.
8. Le piège du pare-feu
Les ports publiés contournent ufw et firewalld
Quand un conteneur publie un port (-p 8080:80 ou ports: dans Compose), Docker crée ses propres règles de pare-feu, avant celles de ufw ou de firewalld. Résultat : le port est joignable de partout, même si ufw le bloque. C'est une source fréquente d'exposition involontaire.
Les parades, de la plus simple à la plus complète :
| Méthode | Exemple | Effet |
|---|---|---|
| Publier sur une seule adresse | -p 127.0.0.1:8080:80 |
Le service n'est joignable que depuis le serveur lui-même (idéal derrière un reverse proxy) |
| Publier sur l'adresse du réseau local | -p 192.168.1.10:8080:80 |
Le service n'écoute que sur cette interface |
| Ne pas publier du tout | Pas de ports:, les conteneurs se parlent par un réseau Docker |
Seul le reverse proxy publie les ports 80 et 443 |
Filtrer dans la chaîne DOCKER-USER |
Règles iptables ou nftables dédiées | Filtrage fin, réservé aux utilisateurs avancés |
| Filtrer en amont | Pare-feu du routeur, groupes de sécurité de l'hébergeur | Protection indépendante du serveur |
9. Vérification finale
| Contrôle | Commande | Résultat attendu |
|---|---|---|
| Service actif au démarrage | systemctl is-enabled docker |
enabled |
| Moteur fonctionnel | docker run --rm hello-world |
Message « Hello from Docker! » |
| Compose disponible | docker compose version |
Docker Compose version v2.x ou plus |
| Rotation des journaux | docker info --format '{{.LoggingDriver}}' |
local |
| Ports exposés | sudo ss -tlnp |
Uniquement les ports voulus |
10. Mettre à jour et désinstaller
Docker se met à jour avec le reste du système :
sudo apt update
sudo apt full-upgrade
Pour désinstaller complètement :
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.sources /etc/apt/keyrings/docker.asc
Données supprimées
rm -rf /var/lib/docker efface toutes les images, conteneurs et volumes, donc les données de vos applications. Sauvegardez les volumes avant.
À retenir
- Installez depuis le dépôt officiel de Docker (
docker-ce), pas en mélangeant avecdocker.io. - Docker Compose est inclus :
docker compose(avec une espace). - Le groupe docker équivaut à root : à réserver aux administrateurs.
- Configurez la rotation des journaux dans
/etc/docker/daemon.jsondès l'installation. - Les ports publiés contournent ufw : publiez sur
127.0.0.1derrière un reverse proxy, ou filtrez en amont.