Avancé ⏱ 14 min Mis à jour le 29 juillet 2026

Installer Docker sur un VPS et lancer votre premier conteneur

Docker isole chaque application dans son conteneur : plus de conflits de dépendances, des déploiements reproductibles. Voici comment l'installer et lancer votre premier conteneur.

Pourquoi installer Docker sur un VPS ?

Installer Docker VPS permet d’isoler les applications et leurs dépendances dans des conteneurs. Une application peut ainsi utiliser sa propre version de Node.js, Python, PHP ou d’une base de données sans modifier directement l’environnement des autres services.

Docker repose sur plusieurs notions :

ÉlémentFonction
ImageModèle utilisé pour créer un conteneur
ConteneurInstance exécutée à partir d’une image
VolumeEspace persistant indépendant du conteneur
RegistreService depuis lequel les images sont téléchargées
Docker ComposeFichier décrivant plusieurs services

Une image est comparable à un modèle en lecture seule. Le conteneur est le processus créé depuis cette image, avec sa propre couche d’écriture.

Docker facilite notamment :

  • la reproduction d’un environnement ;
  • le déploiement de plusieurs applications ;
  • la séparation des dépendances ;
  • le remplacement rapide d’un conteneur ;
  • la description d’une architecture dans un fichier Compose.

Docker n’est toutefois pas une machine virtuelle complète. Les conteneurs partagent le noyau Linux du VPS et doivent rester correctement configurés et mis à jour.

Installer Docker VPS depuis le dépôt officiel

Connectez-vous au serveur avec SSH et un utilisateur disposant de sudo. Consultez le guide pour vous connecter à un VPS en SSH si nécessaire.

Les commandes suivantes sont prévues pour Ubuntu. Vérifiez votre distribution avec :

cat /etc/os-release

Supprimez les éventuels paquets incompatibles provenant d’une ancienne installation :

sudo apt remove -y \
  docker.io \
  docker-compose \
  docker-compose-v2 \
  docker-doc \
  podman-docker \
  containerd \
  runc

Une indication précisant qu’un paquet n’est pas installé n’est pas problématique.

Installez les prérequis :

sudo apt update
sudo apt install -y ca-certificates curl

Ajoutez la clé du dépôt officiel Docker :

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

Ajoutez le dépôt :

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

Mettez à jour l’index et installez Docker Engine avec le plugin Compose :

sudo apt update

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

Vérifiez les versions :

sudo docker --version
sudo docker compose version

Contrôlez le service :

sudo systemctl status docker

Enfin, lancez le conteneur de test officiel :

sudo docker run hello-world

L’image est téléchargée, exécutée, puis le conteneur s’arrête après avoir affiché un message de confirmation.

Utiliser Docker sans sudo, avec prudence

Docker crée habituellement un groupe Linux nommé docker. Vous pouvez y ajouter votre utilisateur :

sudo usermod -aG docker "$USER"

Fermez ensuite votre session SSH et reconnectez-vous, ou appliquez temporairement le nouveau groupe :

newgrp docker

Testez :

docker run hello-world

Attention : appartenir au groupe docker donne des privilèges très élevés, comparables à un accès root dans de nombreux scénarios. Réservez ce groupe aux comptes de confiance.

Ne l’accordez pas à tous les utilisateurs du VPS. Pour un environnement soumis à des contraintes de sécurité plus strictes, étudiez le mode rootless de Docker plutôt que d’ajouter systématiquement les comptes au groupe docker.

Lancer un premier conteneur Nginx

Lancez un serveur web Nginx en arrière-plan :

docker run -d \
  --name web-demo \
  --restart unless-stopped \
  -p 8080:80 \
  nginx:alpine

Les options signifient :

OptionFonction
-dExécute le conteneur en arrière-plan
--name web-demoAttribue un nom au conteneur
--restart unless-stoppedRedémarre le conteneur sauf arrêt manuel
-p 8080:80Relie le port 8080 du VPS au port 80 du conteneur

Vérifiez son état :

docker ps

Testez depuis le VPS :

curl http://127.0.0.1:8080

Consultez les logs :

docker logs web-demo

Suivez-les en direct :

docker logs -f web-demo

Les commandes courantes sont :

docker stop web-demo
docker start web-demo
docker restart web-demo
docker rm -f web-demo

Pour rendre le service accessible uniquement depuis le VPS, par exemple derrière un reverse proxy Nginx, liez-le à l’interface locale :

docker run -d \
  --name web-local \
  -p 127.0.0.1:8080:80 \
  nginx:alpine

Persister les données avec les volumes Docker

La couche d’écriture d’un conteneur appartient à ce conteneur. Si vous le supprimez puis en créez un autre, les données non placées dans un volume ou un bind mount sont perdues.

Un conteneur ne doit pas être considéré comme un espace de sauvegarde. Utilisez un volume pour toutes les données qui doivent survivre à sa suppression.

Créez un volume nommé :

docker volume create donnees-app

Listez les volumes :

docker volume ls

Montez-le dans un conteneur :

docker run -d \
  --name mon-service \
  -v donnees-app:/var/lib/mon-service \
  image-de-votre-service

Le volume donnees-app existe indépendamment du conteneur. Il n’est pas supprimé par un simple :

docker rm mon-service

Pour servir des fichiers présents sur le VPS, utilisez un bind mount :

mkdir -p ~/docker/site

printf '<h1>Site Docker</h1>\n' \
  > ~/docker/site/index.html

Lancez Nginx avec ce dossier :

docker run -d \
  --name site-docker \
  -p 8080:80 \
  -v "$HOME/docker/site:/usr/share/nginx/html:ro" \
  nginx:alpine

Le suffixe :ro monte le dossier en lecture seule dans le conteneur.

Des sauvegardes automatiques sont incluses pour vous aider à restaurer. Conservez aussi vos propres exports réguliers : vous restez responsable de vos données.

Orchestrer plusieurs services avec Docker Compose

Docker Compose décrit plusieurs conteneurs dans un fichier YAML. Créez un dossier :

mkdir -p ~/docker/mon-projet
cd ~/docker/mon-projet

Créez un fichier .env :

DB_PASSWORD=REMPLACEZ_PAR_UN_SECRET_FORT

Ajoutez .env à .gitignore :

.env

Créez ensuite compose.yaml :

services:
  app:
    image: ghcr.io/votre-compte/mon-app:1.0.0
    restart: unless-stopped
    ports:
      - "127.0.0.1:3000:3000"
    environment:
      DATABASE_URL: "postgresql://app:${DB_PASSWORD}@db:5432/app"
    depends_on:
      - db

  db:
    image: postgres:17
    restart: unless-stopped
    environment:
      POSTGRES_DB: app
      POSTGRES_USER: app
      POSTGRES_PASSWORD: "${DB_PASSWORD}"
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

Remplacez l’image de l’application par celle de votre projet.

Démarrez les services :

docker compose up -d

Vérifiez leur état :

docker compose ps

Consultez les logs :

docker compose logs -f

Arrêtez et supprimez les conteneurs du projet :

docker compose down

Les volumes nommés sont conservés. La commande suivante les supprime également :

docker compose down -v

Utilisez docker compose down -v avec une extrême prudence : les données persistantes du projet peuvent être supprimées.

Appliquer les bonnes pratiques de sécurité

N’exposez que les ports réellement nécessaires. Vérifiez les ports publiés avec :

docker ps
sudo ss -lntup

Docker gère ses propres règles réseau. Selon la configuration, un port publié avec -p peut ne pas être filtré comme prévu par les règles UFW classiques. Lorsque le service doit rester privé, liez-le explicitement à 127.0.0.1 et vérifiez son accessibilité depuis un autre appareil.

Pour les services publics, consultez le guide du pare-feu UFW sur un VPS et prenez en compte le fonctionnement particulier du réseau Docker.

Appliquez également ces règles :

  • utilisez des images officielles ou provenant d’une source vérifiée ;
  • choisissez des versions identifiables plutôt qu’un tag flottant en production ;
  • mettez régulièrement à jour les images ;
  • ne placez jamais un token ou un mot de passe dans un Dockerfile ;
  • conservez les secrets dans des variables d’environnement ou un gestionnaire adapté ;
  • n’envoyez pas .env dans Git ;
  • évitez le mode --privileged sans nécessité ;
  • utilisez un utilisateur non-root dans les conteneurs lorsque l’image le permet ;
  • sauvegardez les volumes avant une migration ou une mise à jour importante.

Pour sécuriser l’ensemble du système hôte, consultez le guide pour sécuriser votre serveur Linux.

En résumé

  • Installer Docker VPS permet d’isoler les applications et leurs dépendances.
  • Une image est un modèle ; un conteneur est une instance exécutée.
  • Installez Docker Engine et Compose depuis le dépôt officiel Docker.
  • Vérifiez l’installation avec docker run hello-world.
  • Le groupe docker accorde des privilèges très élevés : limitez son accès.
  • Utilisez docker run -d --name pour lancer un service en arrière-plan.
  • Publiez un port avec -p PORT_VPS:PORT_CONTENEUR.
  • Utilisez 127.0.0.1:PORT:PORT pour un service accessible uniquement localement.
  • Placez les données persistantes dans un volume ou un bind mount.
  • Sans volume, les données de la couche du conteneur disparaissent lors de sa suppression.
  • Utilisez docker compose up -d pour lancer plusieurs services.
  • Ne commitez jamais les secrets contenus dans .env.
  • N’utilisez pas docker compose down -v sans avoir vérifié les volumes concernés.
  • Pour installer Docker VPS sur une infrastructure hébergée en France avec stockage NVMe, Anti-DDoS L3/L4/L7 inclus, panel de gestion et support francophone, découvrez les offres VPS TalCloud.