Offre de lancement — -20% sur tous les VPS avec le code NVH20 · Déploiement en 60 secondes
Accueil / Documentation / Installation
Installation

Installer Docker et Docker Compose sur un VPS

Par Équipe NVHCloud 2026-09-18 Lecture : 4 min

Docker empaquette une application avec tout ce dont elle a besoin pour tourner. Sur un VPS, cela veut dire installer n8n, une base PostgreSQL, un bot Discord ou un outil de supervision en une commande, sans conflit de versions entre eux, et les déplacer d'un serveur à l'autre sans rien réinstaller. Docker Compose décrit l'ensemble dans un seul fichier lisible.

1. Pourquoi Docker sur un VPS

  • Isolation : chaque application a ses propres bibliothèques. Mettre à jour l'une ne casse pas l'autre.
  • Reproductibilité : le fichier compose.yaml décrit tout le déploiement. Le même fichier fonctionne sur un autre serveur.
  • Catalogue : la plupart des logiciels libres publient une image officielle prête à l'emploi.

La contrepartie : un peu de mémoire en plus, et quelques pièges réseau décrits plus bas. Pour un VPS qui fait tourner plusieurs services, le bilan est très largement positif.

2. Installer Docker Engine depuis le dépôt officiel

Les paquets docker.io des distributions sont souvent en retard de plusieurs versions et n'incluent pas toujours Compose. Installez la version officielle de Docker. Retirez d'abord les éventuels anciens paquets :

for p in docker.io docker-doc docker-compose podman-docker containerd runc; do
  apt remove -y $p 2>/dev/null
done

Ajoutez ensuite le dépôt de Docker, puis installez :

apt update && apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
. /etc/os-release
curl -fsSL https://download.docker.com/linux/$ID/gpg -o /etc/apt/keyrings/docker.asc
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/$ID $VERSION_CODENAME stable" \
  > /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

La variable $ID vaut ubuntu ou debian selon votre système : la même commande fonctionne sur les deux.

3. Vérifier l'installation

docker run --rm hello-world
docker compose version

La première commande télécharge une image de test et affiche un message de bienvenue. Notez la syntaxe docker compose, avec une espace : c'est la version actuelle, intégrée à Docker. L'ancienne commande docker-compose avec un tiret n'est plus maintenue.

4. Utilisateur et droits

Pour utiliser Docker sans sudo, ajoutez votre utilisateur au groupe docker, puis reconnectez-vous :

usermod -aG docker alex
⚠️ Appartenir au groupe docker revient à être root sur le serveur : un membre peut monter n'importe quel dossier du système dans un conteneur. N'y ajoutez que des comptes de confiance.

5. Premier projet avec Docker Compose

Chaque projet vit dans son propre dossier, avec un fichier compose.yaml. Exemple : l'outil de supervision Uptime Kuma, qui vérifie que vos sites répondent.

mkdir -p /opt/uptime-kuma && cd /opt/uptime-kuma
cat > compose.yaml <<'EOF'
services:
  kuma:
    image: louislam/uptime-kuma:1
    restart: unless-stopped
    volumes:
      - ./data:/app/data
    ports:
      - "127.0.0.1:3001:3001"
EOF
docker compose up -d

Trois choix de ce fichier sont des bonnes pratiques à reprendre partout :

  • Une version d'image précise (:1) plutôt que :latest, pour qu'une mise à jour majeure ne s'installe pas sans que vous l'ayez décidé.
  • Un volume (./data) pour les données : un conteneur peut être supprimé et recréé à tout moment, seul le volume persiste.
  • Un port lié à 127.0.0.1 : l'application n'est joignable que depuis le serveur, et sera publiée proprement en HTTPS par Nginx.
⚠️ Docker contourne le pare-feu UFW. Un port publié sous la forme "3001:3001" est accessible depuis Internet, même si UFW ne l'autorise pas. Liez à 127.0.0.1 tout ce qui n'a pas vocation à être public. Détails dans configurer UFW.

6. Exposer une application en HTTPS

Le plus simple est d'utiliser Nginx installé sur le serveur comme point d'entrée unique, avec un bloc par application :

server {
    server_name status.monsite.fr;

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    listen 80;
}

Les deux lignes Upgrade et Connection sont nécessaires aux applications qui utilisent des WebSockets, comme Uptime Kuma ou n8n. Obtenez ensuite le certificat avec Certbot : voir Nginx et HTTPS. Pour un exemple complet avec base de données, voir installer n8n sur un VPS avec Docker.

7. Limiter la taille des journaux

Par défaut, Docker conserve les journaux des conteneurs sans limite de taille. Un conteneur bavard peut remplir le disque en quelques semaines. Fixez une limite globale :

cat > /etc/docker/daemon.json <<'EOF'
{
  "log-driver": "json-file",
  "log-opts": { "max-size": "10m", "max-file": "3" }
}
EOF
systemctl restart docker

La limite s'applique aux conteneurs créés après ce changement. Recréez les conteneurs existants avec docker compose up -d --force-recreate.

8. Mettre à jour les conteneurs

cd /opt/uptime-kuma
docker compose pull
docker compose up -d
docker image prune -f

Compose ne recrée que les conteneurs dont l'image a changé ; la dernière commande supprime les anciennes images inutilisées. Lisez les notes de version avant de changer de version majeure, surtout pour les bases de données.

9. Sauvegarder

Sauvegardez le dossier du projet, qui contient le fichier Compose et les volumes. Pour une base de données, n'utilisez pas la copie brute des fichiers pendant qu'elle tourne : exportez-la d'abord depuis le conteneur.

docker compose exec -T postgres pg_dump -U n8n n8n | gzip > /var/backups/n8n.sql.gz

Adaptez le nom du service, de l'utilisateur et de la base à votre projet, puis envoyez le tout hors du serveur : voir sauvegardes avec Borg.

10. Commandes utiles

docker compose ps                 # état des services du projet
docker compose logs -f --tail 100 # journaux en direct
docker compose restart kuma       # redémarrer un service
docker compose down               # arrêter et supprimer les conteneurs (pas les volumes)
docker stats                      # consommation CPU et mémoire en direct
docker system df                  # espace disque utilisé par Docker

Questions fréquentes

Faut-il beaucoup de mémoire pour Docker ?
Docker lui-même consomme peu, de l'ordre de quelques dizaines de mégaoctets. C'est la somme des applications qui compte. Un VPS de 2 Go fait tourner confortablement deux ou trois services légers ; prévoyez 4 Go ou plus si vous ajoutez une base de données et des outils comme n8n.
docker-compose ou docker compose ?
docker compose, avec une espace. C'est la version 2, intégrée à Docker sous forme d'extension. L'ancien programme docker-compose, écrit en Python, n'est plus maintenu. Les fichiers restent compatibles.
Docker fonctionne-t-il sur tous les VPS ?
Sur un VPS basé sur la virtualisation complète KVM, oui, sans restriction, puisque vous disposez de votre propre noyau Linux. Les solutions de conteneurs légers comme OpenVZ posent en revanche souvent problème.
Comment faire communiquer deux conteneurs ?
Les services déclarés dans un même fichier Compose partagent un réseau interne et se joignent par leur nom de service, par exemple postgres:5432. Il n'est pas nécessaire de publier de port pour cela, et c'est préférable pour la sécurité.