SLBCloud
Intermédiaire11 min de lecture

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

bash
curl -fsSL https://get.docker.com | sudo sh
sudo systemctl enable --now docker
sudo usermod -aG docker $USER    # puis se déconnecter et se reconnecter

Le 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

yaml
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:
bash
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.

bash
docker volume ls
docker volume inspect nom_du_volume     # où il est réellement sur le disque

Mettre à jour

bash
docker compose pull
docker compose up -d
docker image prune -f

Empê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.

bash
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

json
{
  "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