Pourquoi Docker pour le web ?
Docker résout le problème classique « ça marche sur ma machine ». En encapsulant votre application et ses dépendances dans un conteneur, vous garantissez un comportement identique du développement à la production.
Ce site satellite est lui-même déployé via Docker, comme tous les projets que nous livrons chez Lueur Externe.
Les concepts fondamentaux
Image vs Conteneur
- Image : un template en lecture seule contenant votre application et ses dépendances
- Conteneur : une instance en cours d’exécution d’une image
Analogie : l’image est la recette, le conteneur est le plat préparé.
Dockerfile
Le Dockerfile décrit comment construire votre image :
# Étape 1 : Build
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Étape 2 : Production
FROM caddy:2-alpine
COPY --from=builder /app/dist /srv
COPY Caddyfile /etc/caddy/Caddyfile
EXPOSE 80
Ce Dockerfile multi-stage produit une image légère contenant uniquement les fichiers statiques et le serveur web.
Docker Compose
Pour les applications multi-services, Docker Compose orchestre plusieurs conteneurs :
version: "3.8"
services:
web:
build: .
ports:
- "80:80"
restart: unless-stopped
monitoring:
image: grafana/grafana
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
volumes:
grafana-data:
Bonnes pratiques pour la production
Images légères
- Utilisez des images de base Alpine (
node:20-alpineau lieu denode:20) - Multi-stage builds pour séparer build et runtime
- Fichier
.dockerignorepour exclurenode_modules,.git, etc.
Sécurité
- Ne lancez jamais de conteneur en tant que root
- Scannez vos images avec
docker scoutou Trivy - Utilisez des images officielles et à jour
- Limitez les ressources (CPU, mémoire) par conteneur
Performance
- Ordonnez les instructions du Dockerfile du moins au plus changeant (pour le cache)
- Combinez les commandes
RUNpour réduire les couches - Utilisez
COPYplutôt queADDsauf pour les archives
Monitoring
- Health checks dans le Dockerfile ou Docker Compose
- Logs centralisés (stdout/stderr)
- Métriques de ressources (CPU, mémoire, réseau)
Intégration CI/CD
Dans notre pipeline GitLab CI/CD chez Lueur Externe, Docker s’intègre naturellement :
build-image:
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
deploy:
stage: deploy
script:
- docker compose pull
- docker compose up -d
Alternatives et compléments
- Podman : alternative rootless à Docker
- Kubernetes : orchestration pour les déploiements à grande échelle
- Docker Swarm : orchestration simplifiée intégrée à Docker
Conclusion
Docker est devenu incontournable pour le déploiement d’applications web modernes. Il simplifie la mise en production, garantit la reproductibilité et facilite le scaling. Lueur Externe utilise Docker sur tous ses projets d’infrastructure.