Docker : les bases utiles sur un serveur
Installer Docker, lancer un service avec Compose, comprendre les volumes, et éviter que les conteneurs mangent tout le disque.
Docker isole une application et ses dépendances dans un paquet qui se lance partout à l'identique. Sur un serveur, cela évite surtout les conflits de versions : deux applications peuvent réclamer deux PHP différents sans se gêner.
Installer
curl -fsSL https://get.docker.com | sudo sh
sudo systemctl enable --now docker
sudo usermod -aG docker $USER # puis se déconnecter et se reconnecterLe groupe docker équivaut à root
Un utilisateur du groupe docker peut monter n'importe quel dossier de la machine dans un conteneur et en devenir propriétaire. N'y mettez que des comptes à qui vous confieriez déjà root.
Un service avec Compose
compose.yml
services:
base:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: monappli
volumes:
- donnees:/var/lib/postgresql/data
# Pas de ports: la base ne sort pas de la machine
appli:
image: mon-appli:latest
restart: unless-stopped
depends_on: [base]
ports:
- "127.0.0.1:3000:3000"
env_file: .env
volumes:
donnees:docker compose up -d # démarrer en arrière-plan
docker compose logs -f appli # suivre les journaux
docker compose ps # ce qui tourne
docker compose down # tout arrêter (les volumes restent)Publier un port court-circuite votre pare-feu
Docker écrit ses propres règles réseau, en amont de ufw. Un service publié avec ports: "5432:5432" est joignable depuis Internet même si ufw affiche que le port est fermé. Préfixez toujours par 127.0.0.1 quand le service ne doit pas sortir de la machine — c'est une cause classique de base de données exposée.
Volumes : ce qui survit et ce qui disparaît
Tout ce qu'un conteneur écrit ailleurs que dans un volume disparaît quand on le recrée — et on le recrée à chaque mise à jour d'image. Les données doivent donc toujours être dans un volume nommé, ou dans un dossier monté depuis la machine.
docker volume ls
docker volume inspect nom_du_volume # où il est réellement sur le disqueMettre à jour
docker compose pull
docker compose up -d
docker image prune -fEmpêcher Docker de remplir le disque
Images obsolètes, conteneurs arrêtés et journaux de conteneurs s'accumulent silencieusement. C'est la première cause de disque plein sur une machine qui fait tourner Docker.
docker system df # ce que Docker occupe
docker system prune -a # tout ce qui n'est plus utilisé/etc/docker/daemon.json — plafonner les journaux
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}Bloqué malgré tout ? Ouvrez un ticket : on répond en français, et on regarde votre machine si besoin.
Ouvrir un ticket