Si tu as déjà passé 3 heures à installer des dépendances sur un nouveau poste, cet article est pour toi. Docker résout ce problème de manière élégante : tout ton environnement tient dans un fichier.
Le problème
Chaque projet a ses propres besoins :
- Node 18 pour le projet A, Node 20 pour le projet B
- PostgreSQL 14 ici, MySQL 8 là
- Redis, RabbitMQ, Elasticsearch…
Installer tout ça nativement, c’est le chaos.
La solution : Docker Compose
Un seul fichier docker-compose.yml et tout ton stack tourne :
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
environment:
DATABASE_URL: postgres://dev:dev@db:5432/myapp
depends_on:
- db
- redis
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: dev
POSTGRES_PASSWORD: dev
POSTGRES_DB: myapp
volumes:
- pgdata:/var/lib/postgresql/data
ports:
- "5432:5432"
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
pgdata:
Le Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev"]
Les commandes essentielles
# Lancer tout le stack
docker compose up -d
# Voir les logs
docker compose logs -f app
# Entrer dans un container
docker compose exec app sh
# Tout arrêter et nettoyer
docker compose down -v
Tips de productivité
- Utilise des volumes nommés pour persister les données de la DB entre les redémarrages
- Monte ton code en volume pour le hot-reload
- Exclue
node_modulesdu volume monté (sinon c’est lent sur Windows/Mac) - Crée un
Makefilepour simplifier les commandes :
.PHONY: up down logs shell
up:
docker compose up -d
down:
docker compose down
logs:
docker compose logs -f
shell:
docker compose exec app sh
Conclusion
Docker, c’est comme un bon pedalboard : une fois que tout est branché et configuré, tu n’y touches plus. Tu branches, tu joues.
“Works on my machine” n’est plus une excuse, c’est une garantie.