Déployer une stack avec Docker Compose
Docker Compose décrit plusieurs conteneurs dans un seul fichier et les démarre ensemble. Pour une application web avec sa base de données, c'est plus lisible qu'une suite de commandes docker run. Cet exemple déploie une application Node.js et PostgreSQL, garde les données dans un volume et n'expose que l'application à Nginx.
Structure des fichiers
Travaillez dans /srv/app, avec un utilisateur de déploiement :
sudo mkdir -p /srv/app
sudo chown deploy:www-data /srv/appLe dossier contient compose.yaml, le Dockerfile de l'application et un fichier .env en chmod 600. Le .env n'entre jamais dans Git. L'application écoute sur 0.0.0.0 et lit son port dans process.env.PORT.
Le fichier compose.yaml
services:
app:
build: .
restart: unless-stopped
env_file: .env
ports:
- "127.0.0.1:3000:3000"
depends_on:
db:
condition: service_healthy
db:
image: postgres:17
restart: unless-stopped
environment:
POSTGRES_DB: app
POSTGRES_USER: app
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app -d app"]
interval: 10s
timeout: 5s
retries: 5
volumes:
db-data:La clé version n'est plus nécessaire. ports lie l'application à 127.0.0.1 uniquement : Nginx fera le proxy. La base n'a pas de ports, donc elle n'est joignable que par le réseau Compose. depends_on avec condition: service_healthy attend que PostgreSQL réponde. Le volume nommé db-data survit à docker compose down.
Variables et secrets
.env contient POSTGRES_PASSWORD et les variables applicatives. compose.yaml y fait référence avec ${POSTGRES_PASSWORD}. docker compose config affiche la configuration résolue et signale une variable manquante avant le démarrage.
Les variables restent visibles via docker inspect et dans l'environnement du conteneur. Pour un secret très sensible, utilisez les secrets Compose ou un gestionnaire externe. Ne commitez jamais .env, même dans un dépôt privé.
Démarrer et vérifier
docker compose config
docker compose up -d --build
docker compose ps
docker compose logs -f app
curl -I http://127.0.0.1:3000/up -d construit l'image si nécessaire, crée le réseau et démarre les services. ps doit montrer l'application en running et la base en healthy. Un conteneur qui redémarre en boucle se diagnostique avec logs, pas en répétant restart. Testez ensuite le domaine à travers Nginx.
Mettre à jour et sauvegarder
docker compose pull
docker compose up -d
docker compose exec -T db pg_dump -U app app | gzip > /var/backups/app-$(date +%F).sql.gzÉpinglez postgres:17 plutôt que latest pour maîtriser les montées de version. docker compose down -v supprime les volumes et donc les données : ne l'utilisez jamais par réflexe. Avant une mise à jour majeure, sauvegardez le volume et testez la restauration dans un autre répertoire ou sur un VPS de test.
Publicité
Cet article vous a-t-il aidé ?
À lire aussi
- Installer Docker sur DebianInstaller Docker depuis le dépôt officiel, vérifier le démon et connaître les limites d'un conteneur système.
- Garder une application Node.js en ligne avec PM2Faire tourner une application Node.js sous PM2, la relancer au démarrage et lire ses journaux.
- Installer PostgreSQL sur DebianInstaller PostgreSQL, créer un rôle et une base, et comprendre pg_hba.conf sans exposer la base.