Je m'intéresse au docker depuis un certain temps, mais je ne me suis pas encore lancé. J'ai besoin de configurer un serveur de messagerie, alors j'ai pensé que je pourrais utiliser cela comme une raison d'en savoir plus sur Docker. Cependant, je ne sais pas comment s'y prendre au mieux.
J'ai déjà installé un serveur de messagerie sur un VPS, mais pas dans plusieurs conteneurs. Je voudrais installer Postfix, Dovecot, MySQL ou Postgresql et SpamAssassin, similaire à ce qui est décrit ici:
Cependant, quel serait un bon moyen de le docker? Aurais-je simplement tout mettre dans un seul conteneur? Ou serait-il préférable d'avoir MySQL dans un conteneur, Postfix dans un autre et des conteneurs supplémentaires pour Dovecot et SpamAssassin? Ou faut-il partager certains conteneurs?
Existe-t-il des HOWTO sur l'installation d'un serveur de messagerie à l'aide de Docker? S'il y en a un, je ne l'ai pas encore trouvé.
Le point de Docker n'est pas la conteneurisation pour le plaisir de la conteneurisation. C'est assembler des choses qui appartiennent ensemble et séparer des choses qui ne vont pas ensemble.
Dans cet esprit, la façon dont je configurerais cela est avec un conteneur pour la base de données MySql et un autre conteneur pour tous des composants de messagerie. Les composants de messagerie sont généralement intégrés les uns aux autres en s'appelant les uns les autres exécutables ou en lisant/écrivant des fichiers partagés, il n'est donc pas logique de les séparer dans des conteneurs séparés de toute façon. Étant donné que la base de données peut également être utilisée pour d'autres choses et que la communication avec elle se fait via un socket, il est plus logique que ce soit un conteneur séparé.
Dovecot, Spamassassin, et al peuvent aller dans des conteneurs séparés pour postfixer. Utilisez LMTP pour les connexions et tout fonctionnera. C'est bien pratique.
Maintenant, pour le peu idéologique. Si vous vouliez vraiment faire les choses "à la manière des dockers", à quoi cela ressemblerait-il?.
Postfix est le plus difficile. Ce n'est pas un démon, mais plutôt un groupe de différents démons qui se parlent et effectuent différentes parties des tâches de gestion du courrier. Une partie de l'interaction entre ces démons de composants se fait via des fichiers (par exemple les files d'attente de messagerie), certains via des sockets et d'autres via des signaux.
Lorsque vous démarrez postfix, vous démarrez vraiment le démon "maître", qui démarre ensuite les autres processus démon dont il a besoin en utilisant les règles de master.cf.
La journalisation est particulièrement difficile dans ce scénario. Tous les différents démons se connectent indépendamment à/dev/log, et il n'y a vraiment aucun moyen de traiter ces journaux sans mettre un démon syslog à l'intérieur du conteneur. "Pas la manière de docker!"
Fondamentalement, la compartimentation des fonctionnalités dans postfix est une approche de type micro-service, mais elle n'est pas basée sur la conteneurisation. Il n'y a aucun moyen pour vous de séparer les différents services dans différents conteneurs sous docker, et même si vous le pouviez, la dépendance aux signaux est problématique.
Je suppose qu'il pourrait être possible de réorganiser le démon `` maître '', en lui donnant accès au processus de docker dans l'hôte, (ou en exécutant docker dans docker), et donc ce nouveau démon maître pourrait coordonner les différents services dans des conteneurs séparés. Nous pouvons spéculer, mais je n'ai entendu parler de personne qui se déplace sur ce projet.
Cela nous laisse l'option la plus probable de choisir un démon plus convivial pour les conteneurs que postfix pour une utilisation dans Docker. J'utilise postfix plus ou moins exclusivement depuis environ la dernière décennie et je n'ai pas eu beaucoup de raisons de chercher des options jusqu'à présent. Je serais très intéressé si quelqu'un pouvait ajouter des commentaires sur les options MTA plus conviviales pour les dockers?