20

我对 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

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

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

4

2 回答 2

21

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

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

于 2015-01-28T03:30:04.093 回答
19

Dovecot、Spamassassin 等人可以在单独的容器中放入后缀。使用 LMTP 进行连接,一切都会奏效。这很实用。

现在谈谈意识形态。如果您真的想以“码头工人的方式”做事,那会是什么样子。

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

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

在这种情况下,记录特别困难。所有不同的守护进程都独立地记录到 /dev/log,如果不将 syslog 守护进程放在容器中,就真的无法处理这些日志。“不是码头工人的方式!”

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

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

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

于 2015-05-07T16:16:02.827 回答