Linux27 août 2026 17 vues

Installer Docker sur un VPS Linux (2026)

Installer Docker sur un VPS Linux (2026)

Prérequis

Avant de commencer, les éléments suivants doivent être en place :

  • Accès SSH sécurisé par clé : Guide clé SSH
  • Pare-feu UFW configuré : Guide UFW (lire aussi la section Docker et UFW ci-dessous avant d'exposer des ports)
  • Un utilisateur non-root avec droits sudo, ou accès root direct
  • OS : Debian 13 (Trixie) ou Ubuntu 24.04 LTS

Étape 1 : Ajouter le dépôt officiel Docker

Ne pas installer le paquet docker.io fourni par Debian/Ubuntu : il est en retard sur les versions officielles. Utiliser le dépôt Docker Inc. pour obtenir docker-ce, la version maintenue activement.

Sur Debian 13

Source : docs.docker.com/engine/install/debian/

sudo apt update
sudo apt install -y 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 <<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

Sur Ubuntu 24.04

Source : docs.docker.com/engine/install/ubuntu/

sudo apt update
sudo apt 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

sudo tee /etc/apt/sources.list.d/docker.sources <<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

Étape 2 : Installer Docker Engine et Docker Compose

sudo apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

Ce paquet installe simultanément :

  • docker-ce : le moteur Docker
  • docker-ce-cli : l'interface en ligne de commande
  • containerd.io : le runtime de conteneurs
  • docker-buildx-plugin : le plugin de build multi-plateforme
  • docker-compose-plugin : Docker Compose v2 (commande docker compose, sans tiret)

Vérifier l'installation :

docker --version
docker compose version

Note importante sur Docker Compose : le plugin v2 s'appelle docker compose (deux mots, sans tiret). L'ancien binaire standalone docker-compose (avec tiret) est la version v1, dépréciée depuis juillet 2023 et non installée ici. Source : docs.docker.com/compose/migrate/

Activer Docker au démarrage du système :

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

Source : docs.docker.com/engine/install/linux-postinstall/

Étape 3 : Configurer l'accès non-root

Ajouter l'utilisateur au groupe docker

Par défaut, les commandes Docker nécessitent sudo. Pour les exécuter sans sudo, ajouter l'utilisateur au groupe docker :

sudo usermod -aG docker $USER
newgrp docker

La commande newgrp docker applique le changement dans la session courante sans déconnexion. Source : docs.docker.com/engine/install/linux-postinstall/

Avertissement de sécurité sur le groupe docker

Étape 4 : Premier conteneur de test

Vérifier que l'installation fonctionne avec l'image officielle hello-world :

docker run hello-world

Docker télécharge l'image depuis Docker Hub si elle n'est pas présente localement, lance un conteneur, affiche un message de confirmation et s'arrête. Une sortie contenant "Hello from Docker!" confirme que l'installation est opérationnelle.

Docker et UFW : le piège à connaître

Ce qui se passe concrètement

Lancer un conteneur avec docker run -p 8080:80 nginx ouvre le port 8080 sur toutes les interfaces réseau du VPS, y compris l'IP publique, même si UFW n'autorise pas ce port. Source : docs.docker.com/engine/network/packet-filtering-firewalls/

La bonne pratique : binder sur 127.0.0.1

Pour exposer un port uniquement en local (accessible depuis le VPS mais pas depuis Internet), binder sur l'interface loopback :

# Commande docker run
docker run -p 127.0.0.1:8080:80 nginx

# Dans un compose.yml
ports:
  - "127.0.0.1:8080:80"

Le port 8080 est alors accessible uniquement depuis le VPS lui-même (via un reverse proxy Nginx par exemple), et non depuis l'extérieur.

Pour les ports devant rester publics

Utiliser la chaîne DOCKER-USER d'iptables pour filtrer le trafic avant que Docker ne le traite. Ajouter une règle dans /etc/ufw/after.rules ou configurer directement iptables. La documentation officielle détaille cette approche : Restrict connections to the Docker host.

Recommandation pratique

Pour un VPS hébergeant des services web via Docker :

  • Binder tous les conteneurs sur 127.0.0.1 par défaut
  • Placer un reverse proxy Nginx devant (ports 80 et 443 gérés par Nginx, pas par Docker directement)
  • Ouvrir uniquement les ports 80 et 443 dans UFW (Guide UFW)
  • Ne jamais exposer directement les ports de bases de données (3306, 5432, 6379) sur l'IP publique

Maintenance des conteneurs

Nettoyer les ressources inutilisées

Docker accumule des images, conteneurs arrêtés, volumes et réseaux orphelins. Nettoyer régulièrement :

# Supprimer tous les conteneurs arrêtés, images non utilisées, réseaux orphelins
docker system prune

# Inclure aussi les volumes non utilisés (attention : suppression définitive)
docker system prune --volumes

Consulter les logs d'un conteneur

# Afficher les logs du conteneur
docker logs nom_du_conteneur

# Suivi en temps réel
docker logs -f nom_du_conteneur

# Limiter le nombre de lignes affichées
docker logs --tail 100 nom_du_conteneur

Mettre à jour Docker Engine

sudo apt update
sudo apt upgrade docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

Mettre à jour une image Docker

# Télécharger la dernière version de l'image
docker pull nom_image:tag

# Recréer le conteneur avec la nouvelle image
docker compose pull
docker compose up -d

Quelle configuration VPS pour Docker ?

Usage RAM recommandée Offre OuiHeberg
1 à 3 conteneurs légers (site, bot, API) 4 Go VPS Linux 04G : 7,00 € TTC/mois
Stack complète (app + base de données + cache) 8 Go Voir la gamme VPS Linux
Plusieurs projets ou services lourds 16 Go+ Voir la gamme VPS Linux

Ces estimations supposent des conteneurs en production standard. Les besoins varient selon les images utilisées et le trafic simultané.

Questions fréquentes

Quelle est la différence entre docker.io et docker-ce ?

docker.io est le paquet Docker fourni par les dépôts Debian/Ubuntu. Il est souvent en retard sur les versions officielles et ne reçoit pas les mises à jour aussi rapidement. docker-ce (Community Edition) est le paquet maintenu directement par Docker Inc. via son dépôt officiel. Ce guide utilise docker-ce.

Docker Compose v2 est-il compatible avec les anciens fichiers docker-compose.yml ?

Oui. Le format des fichiers compose.yml (ou docker-compose.yml) est compatible entre v1 et v2. La seule différence visible est la commande : docker compose (v2, plugin) remplace docker-compose (v1, binaire standalone). La syntaxe des fichiers reste identique pour la grande majorité des cas d'usage.

Comment vérifier que Docker fonctionne après redémarrage du VPS ?

sudo systemctl status docker

Si Docker est configuré avec systemctl enable docker.service, il démarre automatiquement. Vérifier aussi que les conteneurs sont configurés avec la politique de redémarrage appropriée dans le compose.yml : restart: unless-stopped ou restart: always.

Peut-on utiliser Docker sans accès root ?

Oui, via le mode rootless. Docker peut fonctionner entièrement sans privilèges root, ce qui réduit la surface d'attaque. La mise en place est plus complexe et documentée ici : docs.docker.com/engine/security/rootless/

Comment protéger davantage le daemon Docker ?

Configurer Fail2ban pour protéger l'accès SSH au VPS est une première étape : voir le Guide Fail2ban. Pour Docker lui-même, ne jamais exposer le socket Docker (/var/run/docker.sock) à des conteneurs non de confiance, et ne pas activer l'API Docker TCP sans TLS mutuel.

Docker installé ? Avant la mise en production, passez en revue la sécurisation de votre VPS de A à Z.