Docker : Comment Dockerize Et Déployer plusieurs instances d'une Application LAMPE

J'ai besoin de déployer plusieurs instances de la même LAMPE (ou de la LEMP) application :

  • chaque instance sera accessible à partir d'un sous-domaine, avec l'avant loadbalancer/proxy
  • chaque instance doit avoir son propre db de données et des fichiers de données.
  • chaque instance peut être surveillé
  • limite de mémoire /processeur peut être défini pour chaque instance de l'application
  • facile à automatiser le déploiement d'une nouvelle webapp instance
  • environnement peut être facilement reproductible de test et de développement.

Application nécessite :

  • dameon processus (Nginx, MariaDB, PHPFPM)
  • binaires (composer, bower, ...)
  • d'autres systèmes spécifiques libs & config

Après la lecture de Docker de la documentation et de nombreuses howtos, je vois plusieurs solutions à dockerize cette application web :


Solution 1 : Utiliser un tout-en-un Conteneur

Tous la pile est dans un récipient :

  • webapp fichiers source, EMP démon processus, les fichiers binaires, ...
  • volumes montés pour mysql et webapp fichiers de données

Exemples :

Pros (à mon humble avis) :

  • Semble facile à automatiser deploiement, de surveiller, de les détruire....
  • Facile à utiliser en prod, de test et de l'environnement de dev.

Contre (à mon humble avis):

  • Monolithique
  • Difficile d'échelle
  • Ne pas utiliser toute la force de Docker

Solution 2 : Utiliser une pile de conteneurs par webapp instance

Pour chaque webapp déployer, une pile de conteneurs est déployé :

  • Un conteneur par processus : Nginx, Mysql, PHP-FPM,
  • Binaire conteneurs (composer, bower,...) peuvent être également dockerized, ou fusionnées dans le phpfpm conteneur
  • montage des volumes pour mysql et webapp fichiers de données

Exemples :

Pro (à mon humble avis) :

  • Découplé
  • processus isolé par exemple
  • Un processus par conteneur, pas besoin de gestionnaire du démon comme RUnit ou
    Supervisord

Contre (à mon humble avis) :

  • Semble plus compliqué de faire un travail
  • Difficile à maintenir, à voir une “grande image” de tous les conteneurs états, des liens, version...

Solution 3 : Mixin les 2 solutions précédentes

  • Une “app” récipient avec : app src fichiers, nginx, phpfmp, compositeur, git..
  • Un récipient pour la db mysql, ce qui peut être partagé ou non avec l'application conteneur

Je suis de plus en plus de Dev que Ops, aussi il est confus pour moi.

Donc, Des Questions :

  1. Quels sont les critères, les avantages/inconvénients à considérer au moment de choisir entre les thèses des solutions?
  2. Howto pour gérer tous les conteneurs à piles si je choisis la Solution 2, pour avoir une "grande image" de tous les conteneurs états, des liens, version... ?
  3. App src fichiers (PHP) peut être construit dans le conteneur ou monté en volume, par exemple. /var/www ?
  • L'exécution de plusieurs processus dans un seul conteneur a des implications en matière de sécurité ainsi. Voir ceci (un peu datée) de la liste de recommandations de sécurité par l'équipe Docker/CEI.
InformationsquelleAutor Koryonik | 2014-07-24