Installer Docker sur Ubuntu et Debian
Installer Docker sur Ubuntu et Debian via le dépôt officiel, vérifier Engine et Compose, puis sécuriser les droits et les ports publiés.
Serveurs dédiés, infogérance et migration
Il couvre les serveurs dédiés, l'infogérance, le stockage, la supervision et les plans de sortie.
Pour installer Docker sur Ubuntu ou Debian, utilisez le dépôt APT officiel, choisissez la branche de votre distribution, installez Engine avec Compose et Buildx, puis vérifiez le service et le conteneur de test. Avant d’exposer un port, contrôlez aussi le pare-feu et les droits du compte.
La commande d’installation n’est pas la partie difficile. Le risque commence quand on mélange des paquets de dépôts différents, quand on confond Docker Engine avec Docker Desktop ou quand on rend un service public sans comprendre le chemin réseau créé par Docker. Un serveur reste un atelier : chaque outil doit avoir sa place.
Ce guide privilégie une installation lisible et réversible. Il convient à un serveur Ubuntu ou Debian administré par une personne qui sait restaurer un instantané, relire une commande et vérifier les ports ouverts.
Avant l’installation, identifiez exactement l’hôte
Commencez par le système réel. Un serveur annoncé comme compatible Ubuntu peut utiliser une image dérivée, un noyau imposé ou une architecture différente de celle attendue. Affichez les informations fournies par le système au lieu de déduire la distribution à partir du nom commercial du VPS.
cat /etc/os-release
dpkg --print-architecture
uname -r
Relevez la valeur de la distribution et son nom de version. La branche du dépôt doit correspondre à Ubuntu sur Ubuntu, et à Debian sur Debian. Une distribution dérivée peut fonctionner, mais elle demande de connaître la version mère correspondante. L’installation à l’aveugle transforme une mise à jour banale en panne de dépendances.
Contrôlez ensuite les paquets présents. Docker Engine distribué par Docker peut entrer en conflit avec docker.io, d’anciennes variantes de Compose, containerd ou runc déjà installés par une autre source.
dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc
Ne supprimez pas mécaniquement tout ce qui apparaît. Sur un hôte déjà utilisé, commencez par inventorier les conteneurs, les volumes et les unités systemd qui dépendent de ces paquets. La sauvegarde fait partie de l’installation, surtout lorsque Docker existait déjà sous une autre forme.
| Situation observée | Décision raisonnable | Risque à contrôler |
|---|---|---|
| Hôte neuf, aucun paquet conflictuel | Installer depuis le dépôt officiel Docker | Choisir la bonne distribution |
| docker.io déjà utilisé | Préparer la migration avant de changer de source | Versions, données et redémarrage |
| Serveur de production | Tester la procédure sur un clone ou un instantané | Interruption et retour arrière |
| Compte sans privilèges d’administration | Étudier le mode rootless | Limites réseau et stockage |
Installer Docker sur Ubuntu
La méthode recommandée pour un serveur est le dépôt APT officiel. Elle rend les mises à jour visibles par le gestionnaire de paquets et évite le script d’installation rapide, pratique pour un laboratoire mais trop opaque pour une machine de production.
Ajoutez d’abord la clé et la source Ubuntu. Le format deb822 ci-dessous sépare clairement l’URI, la version, l’architecture et la clé utilisée pour vérifier les paquets.
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/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
Avant d’installer, lisez le résultat de la dernière mise à jour. Une erreur de signature, de nom de version ou d’architecture n’est pas un détail à contourner. Corrigez la source ; ne désactivez pas la vérification cryptographique pour faire disparaître le message.
Installez ensuite Engine, son client, containerd, Buildx et le module Compose depuis la même source.
sudo apt install docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
Installer Docker sur Debian
La procédure Debian suit la même logique, mais l’URI du dépôt et le nom de version ne sont pas ceux d’Ubuntu. Copier le bloc Ubuntu puis changer un mot au hasard est une excellente manière d’obtenir un système impossible à mettre à jour proprement.
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
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<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
sudo apt install docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
Sur Debian testing ou une distribution dérivée, le nom automatique peut ne pas correspondre à une branche publiée par Docker. Dans ce cas, identifiez la version Debian de référence et utilisez son nom en connaissance de cause. Si cette correspondance reste incertaine, arrêtez-vous : un dépôt approximatif est une dette de maintenance immédiate.
Vérifier Engine, Compose et le service
Une installation terminée par APT ne prouve pas que le démon répond. Vérifiez chaque couche séparément : l’unité systemd, la communication entre le client et le démon, le module Compose, puis l’exécution d’un conteneur jetable.
sudo systemctl status docker --no-pager
sudo docker version
sudo docker compose version
sudo docker run --rm hello-world
Le dernier test télécharge une petite image, crée un conteneur, affiche son message puis supprime le conteneur. Il valide davantage qu’une simple version du client, mais il ne prouve ni la sécurité du serveur ni le bon fonctionnement de votre application.
En cas d’échec, lisez le journal avant de réinstaller. Une réinstallation répétée masque rarement un problème de socket, de configuration ou de réseau.
sudo journalctl -u docker --since today --no-pager
Le dépôt n’est donc que le début : identifiez le système, installez, vérifiez, puis sécurisez avant la première charge.

Sécuriser les droits avant le premier conteneur utile
Par défaut, l’usage du client Docker passe par des privilèges d’administration. Il est possible d’ajouter un compte au groupe docker, mais ce groupe accorde un niveau de contrôle équivalent à root. Ce n’est pas une commodité anodine à distribuer à tous les comptes interactifs.
sudo usermod -aG docker "$USER"
La nouvelle appartenance prend effet après une reconnexion. Réservez cette option à un compte d’administration maîtrisé. Pour un poste partagé ou un environnement où les utilisateurs ne doivent pas contrôler le démon système, examinez plutôt le mode rootless et ses contraintes avant de choisir.
Le même pragmatisme vaut pour le socket Docker. Ne l’exposez pas directement sur le réseau. Un accès au démon permet de créer des conteneurs privilégiés, de monter des chemins de l’hôte et, dans les faits, de prendre le contrôle de la machine.
Vérifier le pare-feu et les ports publiés
Un port publié par Docker ne suit pas forcément le chemin attendu par ufw. Docker crée ses propres règles pour les réseaux bridge et la traduction d’adresses. Un serveur peut donc accepter du trafic vers un conteneur alors que l’administrateur croit l’avoir bloqué avec une règle ufw classique.
Avant de lancer une application, listez ce que le système écoute et ce que Docker publie réellement.
sudo ss -lntup
sudo docker ps --format 'table {{.Names}}\t{{.Ports}}'
sudo iptables -S DOCKER-USER
N’ouvrez que les ports nécessaires, liez un service interne à l’adresse de boucle locale lorsque c’est possible et placez les règles d’accès au bon endroit pour votre backend de pare-feu. Ne désactivez pas la gestion réseau de Docker sans solution de remplacement, car vous risquez de casser l’isolation et l’accès sortant des conteneurs.
La journalisation mérite aussi une décision. Le pilote par défaut peut faire croître les fichiers de journaux jusqu’à remplir le disque. Sur un serveur durable, prévoyez une rotation ou un pilote adapté avant d’empiler les services. Le disque décide souvent, même lorsque le processeur semble être le sujet du jour.
Diagnostiquer sans recommencer depuis zéro
- Le dépôt refuse la version. Relisez le fichier os-release, l’URI Ubuntu ou Debian et le nom de branche. N’inventez pas un mélange entre les deux distributions.
- Le client ne joint pas le démon. Vérifiez l’unité systemd et son journal, puis le socket et les droits du compte.
- APT signale des conflits. Identifiez la provenance de docker.io, containerd et runc avant toute suppression ; préparez le retour arrière.
- Le conteneur démarre mais reste inaccessible. Comparez le port publié, l’adresse d’écoute et les règles du pare-feu au lieu de désactiver celui-ci.
- Le serveur fonctionne puis manque d’espace. Inspectez images, volumes et journaux ; définissez une politique de nettoyage et de rotation adaptée à la charge.
Liste de contrôle
- Vérifiez la distribution, son nom de version et l’architecture afin d’éviter un dépôt incompatible.
- Inventoriez les paquets, conteneurs et volumes existants avant de remplacer une installation déjà utilisée.
- Testez le service, Compose et un conteneur jetable avant de déployer votre application.
- Contrôlez les droits du compte, les ports publiés et la rotation des journaux avant l’ouverture au trafic.
Une bonne installation Docker ne se résume pas à obtenir une commande qui répond. Elle laisse un dépôt cohérent, un service vérifiable, une frontière de privilèges assumée et une exposition réseau comprise. Demandez le plan de panne avant le premier déploiement : sauvegarde, retour arrière, journaux et responsable de l’intervention. Le reste tient surtout de l’optimisme.
Questions fréquentes
Faut-il utiliser docker.io ou docker-ce ?
Le script get.docker.com convient-il à un serveur de production ?
Puis-je utiliser Docker sans sudo ?
Pourquoi ufw ne bloque-t-il pas toujours un port de conteneur ?
Préparé par
Serveurs dédiés, infogérance et migration
Il couvre les serveurs dédiés, l'infogérance, le stockage, la supervision et les plans de sortie.
Faits vérifiés
HostScout editorialArticles liés
Clés SSH : l’authentification sans mot de passe
Créer une clé SSH Ed25519, installer la clé publique, vérifier l’hôte et désactiver le mot de passe sans perdre l’accès.
Installer Zabbix pour superviser ses serveurs
Installer Zabbix 7.0 LTS sur Ubuntu 24.04 avec PostgreSQL, Nginx et Agent 2, puis sécuriser et valider chaque composant.
MySQL : créer un utilisateur et gérer les droits
Créer un utilisateur MySQL 8.4, limiter son hôte, attribuer puis retirer des droits, imposer TLS et contrôler le résultat.
NGINX reverse proxy : exposer plusieurs services
NGINX reverse proxy pour plusieurs services : chemins proxy_pass, en-têtes fiables, WebSocket, frontière TLS et diagnostic avant rechargement.
Docker Compose : guide multi-conteneurs
Docker Compose orchestre plusieurs conteneurs avec un fichier lisible : services, réseau, volumes, secrets, santé et diagnostic sans perte de données.
Adresse IP publique ou privée : la repérer
Adresse IP publique ou privée : comprenez ce qui vous identifie en ligne, où trouver chaque adresse et quoi vérifier avant d'exposer un serveur.