Docker pour les devs - 32 - Au-dela de Compose

Quand Compose ne suffit plus, ce qui existe entre le compose.yml et Kubernetes, et quand tu n'as pas besoin de K8s.

  1. 01 Docker pour les devs - 00 - Pourquoi Docker change tout
  2. 02 Docker pour les devs - 01 - Containers vs VMs
  3. 03 Docker pour les devs - 02 - L'architecture de Docker
  4. 04 Docker pour les devs - 03 - Docker Desktop, Engine et alternatives
  5. 05 Docker pour les devs - 04 - Écrire un Dockerfile
  6. 06 Docker pour les devs - 05 - Layers et cache
  7. 07 Docker pour les devs - 06 - Le .dockerignore
  8. 08 Docker pour les devs - 07 - Multi-stage builds
  9. 09 Docker pour les devs - 08 - Choisir son image de base
  10. 10 Docker pour les devs - 09 - Docker Compose, les bases
  11. 11 Docker pour les devs - 10 - Docker Compose avance
  12. 12 Docker pour les devs - 11 - Networking Docker, les bases
  13. 13 Docker pour les devs - 12 - Networking Docker avance
  14. 14 Docker pour les devs - 13 - Volumes et persistance
  15. 15 Docker pour les devs - 14 - Variables d'environnement et secrets
  16. 16 Docker pour les devs - 15 - Permissions et utilisateurs
  17. 17 Docker pour les devs - 16 - Docker et monorepo
  18. 18 Docker pour les devs - 17 - Dev vs Prod
  19. 19 Docker pour les devs - 18 - ENTRYPOINT, CMD et scripts d'initialisation
  20. 20 Docker pour les devs - 19 - Debugger ses conteneurs
  21. 21 Docker pour les devs - 20 - Bases de donnees dans Docker
  22. 22 Docker pour les devs - 21 - Sauvegardes et restauration
  23. 23 Docker pour les devs - 22 - Conteneuriser un frontend
  24. 24 Docker pour les devs - 23 - Sécurité des conteneurs
  25. 25 Docker pour les devs - 24 - Optimisation des images
  26. 26 Docker pour les devs - 25 - Builds multi-platform
  27. 27 Docker pour les devs - 26 - Limiter les ressources de tes conteneurs
  28. 28 Docker pour les devs - 27 - Gerer les logs comme un adulte
  29. 29 Docker pour les devs - 28 - Healthchecks et restart policies
  30. 30 Docker pour les devs - 29 - Nettoyer Docker avant qu'il mange ton disque
  31. 31 Docker pour les devs - 30 - Registries et stratégie de tags
  32. 32 Docker pour les devs - 31 - Docker en CI/CD
  33. 33 Docker pour les devs - 32 - Au-dela de Compose
  34. 34 Docker pour les devs - 33 - Glossaire Docker de A a Z

32 - Au-dela de Compose

Ce que tu vas apprendre

  • Les limites reelles de Docker Compose en production
  • Docker Swarm pour l'orchestration simple
  • Kubernetes : les concepts de base sans le jargon
  • Les services Kubernetes manages (GKE, EKS, AKS)
  • Coolify et Dokku comme alternative du milieu
  • Comment décider si tu as vraiment besoin d'un orchestrateur

Prerequisites


Pendant deux ans, j'ai déployé tous mes projets avec Docker Compose et un script SSH. Ca marchait. Un serveur, cinq conteneurs, un docker compose pull && up -d dans la CI. Simple, comprehensible, fiable.

Et puis un client m'a demande de la haute disponibilité. Deux serveurs minimum, failover automatique, zero downtime. Compose ne sait pas faire ca. Il gere un seul hote. Quand le serveur tombe, tout tombe avec.

C'est la qu'on entre dans le monde des orchestrateurs.

Les limites de Compose

Compose fait beaucoup de choses bien. Mais il a des limites structurelles :

  • Un seul hote : Compose deploie sur la machine ou tu lances la commande. Pas de distribution sur plusieurs serveurs.
  • Pas d'auto-scaling : tu ne peux pas dire "lance entre 2 et 10 instances de mon API selon la charge".
  • Pas de self-healing : si un conteneur unhealthy ne crashe pas, Compose ne fait rien. Il ne relance pas automatiquement les conteneurs defaillants (on en a parle dans l'article sur les healthchecks).
  • Pas de rolling updates natifs : le redemarrage d'un service cause une interruption, meme brève.
  • Pas de load balancing : distribuer le trafic entre plusieurs instances d'un meme service nécessité un reverse proxy configure manuellement.

Pour un projet perso, une startup en phase de validation, ou un service interne avec peu de trafic, ces limites sont acceptables. Pour du SaaS avec des SLA, elles deviennent problématiques.

Docker Swarm : l'orchestration intégrée

Swarm est le mode orchestration natif de Docker. Tu prends tes serveurs, tu les relies en cluster, et tu deploies tes services dessus.

bash# Sur le premier serveur (manager)
docker swarm init

# Sur les autres serveurs (workers)
docker swarm join --token SWMTKN-xxx manager-ip:2377

Tu deploies avec un fichier Compose standard en utilisant docker stack :

bashdocker stack deploy -c compose.yml mon-app

Swarm apporte ce qui manque a Compose :

  • Distribution sur plusieurs noeuds
  • Replicas et load balancing intégré
  • Rolling updates automatiques
  • Self-healing (redemarrage des conteneurs qui tombent)
yamlservices:
  api:
    image: ghcr.io/monorg/mon-app:1.2.3
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure

Trois replicas, mis à jour un par un avec 10 secondes entre chaque. Si un conteneur crashe, Swarm le relance.

Le problème de Swarm : Docker l'a mis en maintenance passive. Pas déprécié officiellement, mais plus de nouvelles fonctionnalités. La communauté et l'ecosysteme se sont concentres sur Kubernetes. Tu peux l'utiliser, mais tu investis dans une technologie qui stagne.

Kubernetes : les concepts

Kubernetes (K8s) est l'orchestrateur dominant. Il est complexe, c'est indeniable. Mais les concepts de base sont comprehensibles.

Pod : l'unité de base. Un pod contient un ou plusieurs conteneurs qui partagent le meme réseau et le meme stockage. Dans la pratique, un pod = un conteneur dans 90% des cas.

Deployment : definit combien de replicas d'un pod tu veux. Kubernetes s'assure que ce nombre est respecte. Si un pod meurt, il en créé un nouveau.

yamlapiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: ghcr.io/monorg/mon-app:1.2.3
          ports:
            - containerPort: 3000
          resources:
            requests:
              memory: "256Mi"
              cpu: "250m"
            limits:
              memory: "512Mi"
              cpu: "500m"

Service : expose un Deployment en interne ou en externe. C'est le load balancer de Kubernetes.

Ingress : route le trafic HTTP externe vers les Services. C'est l'équivalent du reverse proxy.

Si tu viens de Compose, la correspondance est :

Compose Kubernetes
service Deployment + Service
volumes PersistentVolumeClaim
networks implicite (tout communique)
ports Service de type NodePort ou LoadBalancer
depends_on n'existe pas (tout doit etre resilient)

Kubernetes manage

Personne ne devrait gerer son propre cluster Kubernetes. C'est un métier a plein temps. Les offres managees font le travail :

  • GKE (Google) : le plus mature, l'Autopilot mode gere meme les noeuds
  • EKS (AWS) : le plus utilise, intégration profonde avec l'ecosysteme AWS
  • AKS (Azure) : bon choix si tu es deja sur Azure

Le coût commence autour de 70-100 euros par mois pour un petit cluster. Plus les machines. Plus le stockage. Ca monte vite.

Quand tu n'as PAS besoin de Kubernetes

La question que je pose toujours : est-ce que tu as un problème que Kubernetes resout ?

Tu n'as probablement pas besoin de K8s si :

  • Tu as un seul serveur
  • Tu as moins de 10 services
  • Ton équipe fait moins de 5 personnes
  • Tu n'as pas besoin d'auto-scaling
  • Un redemarrage de 30 secondes est acceptable

La complexité de Kubernetes est réelle. Les fichiers YAML s'empilent. Le debugging est plus difficile. Le coût operationnel est significatif. Si tu n'as pas le problème, n'achete pas la solution.

J'ai vu des startups de trois personnes déployer sur Kubernetes parce que "ca fait pro". Six mois plus tard, ils passaient plus de temps a maintenir le cluster qu'a développer leur produit.

Le milieu : Coolify et Dokku

Entre Compose et Kubernetes, il y a des solutions qui apportent du confort sans la complexité.

Coolify : une plateforme de déploiement self-hosted. Tu l'installes sur un serveur, tu connectes ton repo Git, et il s'occupe du build, du deploy, des certificats SSL. Interface web, rollbacks en un clic, support natif de Docker Compose.

Dokku : le "mini Heroku" open source. Tu push ton code avec git push dokku main, il build et deploie. Simple, robuste, maintenu activement depuis 2013.

Les deux tournent sur un seul serveur. Pas de haute disponibilité, pas d'auto-scaling. Mais ils gerent les certificats Let's Encrypt, les reverse proxies, les zero-downtime deploys, et les rollbacks. C'est 80% de la valeur de Kubernetes pour 10% de la complexité.

Sur paltemps.fr, j'utilise Coolify pour les projets qui n'ont pas besoin de multi-serveur. Ca couvre la grande majorite de mes cas.

Comment choisir

Situation Solution
Projet perso, prototype Docker Compose + SSH
Petite équipe, un serveur Coolify ou Dokku
Besoin de HA sans complexité Docker Swarm (si tu acceptes la stagnation)
SaaS avec SLA, équipe >5 Kubernetes manage
Grosse charge, multi-region Kubernetes manage + expertise dédiée

Commence simple. Migre quand tu as le problème. Pas avant.

Résumé

  • Compose est limite a un seul hote, sans auto-scaling ni self-healing
  • Docker Swarm ajoute l'orchestration mais stagne en termes de développement
  • Kubernetes est puissant mais complexe : ne l'adopte que si tu as le problème qu'il resout
  • Coolify et Dokku offrent un excellent compromis pour les petits et moyens projets
  • La regle : commence avec Compose, monte en complexité seulement quand c'est nécessaire

Precedent : 31 - CI/CD | Suivant : 33 - Glossaire

Sources

Réservez un audit gratuit de 30 minutes. Je vous montre concrètement ce qu'on peut automatiser.