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ément | Fonction |
|---|---|
| Image | Modèle utilisé pour créer un conteneur |
| Conteneur | Instance exécutée à partir d’une image |
| Volume | Espace persistant indépendant du conteneur |
| Registre | Service depuis lequel les images sont téléchargées |
| Docker Compose | Fichier 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
dockerdonne 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 :
| Option | Fonction |
|---|---|
-d | Exécute le conteneur en arrière-plan |
--name web-demo | Attribue un nom au conteneur |
--restart unless-stopped | Redémarre le conteneur sauf arrêt manuel |
-p 8080:80 | Relie 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 -vavec 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
.envdans Git ; - évitez le mode
--privilegedsans 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
dockeraccorde des privilèges très élevés : limitez son accès. - Utilisez
docker run -d --namepour lancer un service en arrière-plan. - Publiez un port avec
-p PORT_VPS:PORT_CONTENEUR. - Utilisez
127.0.0.1:PORT:PORTpour 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 -dpour lancer plusieurs services. - Ne commitez jamais les secrets contenus dans
.env. - N’utilisez pas
docker compose down -vsans 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.