使用 Docker 作为邮件服务器

Using Docker for a mail server

我对 docker 感兴趣有一段时间了,但还没有开始。我需要设置一个邮件服务器,所以我想也许我可以以此为理由来了解更多关于 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

但是,docker化它的好方法是什么?我会简单地将所有东西都放在一个容器中吗?或者在一个容器中使用 MySQL,在另一个容器中使用 Postfix,并为 Dovecot 和 SpamAssassin 添加额外的容器会更好吗?还是应该共享一些容器?

是否有关于使用 docker 安装邮件服务器的任何 HOWTO?有的话我还没找到

Docker 的要点不是为了容器化而容器化。就是把属于一起的东西放在一起,把不属于一起的东西分开。

考虑到这一点,我设置它的方法是使用一个容器用于 MySql 数据库,另一个容器用于 all 邮件组件。邮件组件通常通过调用彼此的可执行文件或通过 reading/writing 共享文件相互集成,因此无论如何将它们分开放在单独的容器中是没有意义的。由于数据库也可以用于其他用途,并且与它的通信是通过套接字完成的,因此将其作为一个单独的容器更有意义。

Dovecot、Spamassassin 等可以放在单独的容器中进行后缀。使用 LMTP 进行连接,一切正常。实用就这么多。

现在谈谈意识形态。如果你真的想做一些事情'the docker way',那会是什么样子。

Postfix 是最难的一个。它不是一个守护进程,而是一组不同的守护进程,它们相互通信并执行邮件处理任务的不同部分。这些组件守护进程之间的一些交互是通过文件(例如邮件队列),一些是通过套接字,还有一些是通过信号。

当您启动 postfix 时,您实际上启动了 'master' 守护进程,然后它使用 master.cf.

中的规则启动它需要的其他守护进程

在这种情况下,日志记录特别困难。所有不同的守护进程独立地记录到 /dev/log,如果不在容器中放置一个 syslog 守护进程,真的没有办法处理这些日志。 "Not the docker way!"

基本上,postfix 中的功能划分是一种非常微服务的方法,但它不是基于容器化。在 docker 下,您无法将不同的服务分离到不同的容器中,即使可以,对信号的依赖也是有问题的。

我想有可能重新设计 'master' 守护进程,使其能够访问主机中的 docker 进程,(或 运行 docker在 docker) 内,因此这个新的主守护进程可以协调不同容器中的各种服务。我们可以推测,但我没有听说有人将此作为一个实际项目进行。

这让我们更有可能选择一个比在 docker 中使用的 postfix 更容器友好的守护进程。在过去的十年里,我或多或少一直在专门使用 postfix,直到现在还没有太多理由去查看选项。如果有人可以对更多 docker 友好的 MTA 选项添加评论,我将非常感兴趣?