使用Docker作为邮件服务器

我已经对docker工作了一段时间,但还没有跳过。 我有一个需要build立一个邮件服务器,所以也许我可以用这个作为了解更多关于docker的理由。 但是,我不清楚如何最好的去做。

我之前已经在VPS上安装了邮件服务器,但没有安装多个容器。 我想安装Postfix,Dovecot,MySQL或Postgresql,以及SpamAssassin,类似于这里所描述的:

https://www.digitalocean.com/community/tutorials/how-to-configure-a-mail-server-using-postfix-dovecot-mysql-and-spamassasin

但是,什么是dockerize它的好方法? 我会把所有东西都放到一个容器中吗? 或者在一个容器中使用MySQL,在另一个容器中使用Postfix,以及为Dovecot和SpamAssassin增加容器,会更好吗? 还是应该共享一些容器?

是否有任何使用docker安装邮件服务器的HOWTO? 如果有,我还没有find它。

Docker的重点不在于集装箱化的容器化。 把属于一起的东西放在一起,把不属于一个的东西分开。

考虑到这一点,我将设置的方式是为MySql数据库的容器和所有邮件组件的另一个容器。 邮件组件通常是通过调用彼此的可执行文件或通过读取/写入共享文件来相互集成的,所以无论如何将它们分离在不同的容器中是没有意义的。 由于数据库也可以用于其他的事情,并且通过套接字进行通信,所以更有意义的是将它作为一个单独的容器。

Dovecot,Spamassassin等可以单独装载到Postfix中。 使用LMTP的连接,它会一切工作。 这很实用。

现在的思想位。 如果你真的想做'docker的方式',那会是什么样子。

Postfix是困难的。 这不是一个守护进程,而是一群不同的守护进程,彼此交谈,执行邮件处理任务的不同部分。 这些组件守护进程之间的一些交互是通过文件(例如邮件队列),一些是通过套接字,另一些是通过信号。

当你启动postfix的时候,你真的启动了“master”守护进程,然后使用master.cf中的规则启动它需要的其他守护进程。

在这种情况下logging特别困难。 所有不同的守护进程独立地login到/ dev / log,并且真正没有办法处理这些日志,而不需要在容器中放置一个syslog守护进程。 “不是docker的方式!”

基本上postfix中function的划分是非常微观的一种方法,但不是基于集装箱化。 在Docker中,你不可能把不同的服务分离到不同的容器中,即使可以,依赖信号也是有问题的。

我想可以重新devise“master”守护进程,让它访问主机中的docker进程(或者在docker中运行docker),因此这个新的主守护进程可以在不同的容器中协调不同的服务。 我们可以推测,但是我还没有听说有人将此作为一个实际的项目。

这给我们留下了更可能的select,即select一个比docker更容易使用的后台程序。 在过去的十年里,我一直在使用postfix,而且到现在为止还没有太多的理由环顾一下。 如果有人可以join关于更多docker友好MTA选项的评论,我会非常感兴趣。