web-dev-qa-db-ja.com

メールサーバーにDockerを使用する

私はしばらくの間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を1つのコンテナに、Postfixを別のコンテナに、DovecotとSpamAssassinに追加のコンテナを追加する方が良いでしょうか?または、いくつかのコンテナを共有する必要がありますか?

Dockerを使用したメールサーバーのインストールに関するHOWTOはありますか?ある場合、私はまだそれを見つけていません。

18
Tauren

Dockerのポイントは、コンテナ化のためのコンテナ化ではありません。一緒に属するものをまとめ、一緒に属さないものを分離することです。

それを念頭に置いて、これを設定する方法は、MySqlデータベースのコンテナーと、メールコンポーネントのallの別のコンテナーを使用することです。通常、メールコンポーネントは、互いの実行可能ファイルを呼び出すか、共有ファイルの読み取り/書き込みを行うことで互いに統合されるため、いずれにしても別々のコンテナに分けることは意味がありません。データベースは他の用途にも使用でき、データベースとの通信はソケットを介して行われるため、別のコンテナとして使用する方が理にかなっています。

18
Moshe Katz

Dovecot、Spamassassinなどは、別のコンテナに入れて後置できます。接続にLMTPを使用すると、すべて機能します。これは実用的です。

次に、イデオロギーのビットについて説明します。あなたが本当に物事を「港湾労働者の方法」でやりたいなら、それはどのように見えるでしょう。

Postfixは難しいものです。これは1つのデーモンではなく、互いに通信し、メール処理タスクのさまざまな部分を実行するさまざまなデーモンのクラスターです。これらのコンポーネントデーモン間の相互作用には、ファイル(メールキューなど)を介したもの、ソケットを介したもの、シグナルを介したものがあります。

Postfixを起動すると、実際には 'master'デーモンが起動し、master.cfのルールを使用して必要な他のデーモンプロセスが起動します。

このシナリオでは、ロギングは特に困難です。さまざまなデーモンはすべて独立して/ dev/logにログを記録しますが、コンテナー内にsyslogデーモンを配置せずにこれらのログを処理する方法は実際にはありません。 「ドッカーのやり方ではない!」

基本的に、postfixの機能の区分化は、マイクロサービスのようなアプローチですが、コンテナ化に基づいたものではありません。異なるサービスをdockerの下の異なるコンテナに分離する方法はありません。できたとしても、信号への依存には問題があります。

「マスター」デーモンを再設計して、ホストのdockerプロセスにアクセスできるようにする(またはdocker内でdockerを実行する)ことができる可能性があるため、この新しいマスターデーモンはさまざまなサービスを個別のコンテナーで調整できます。推測することはできますが、実際のプロジェクトとしてこれに取り組んでいる人はいません。

そのため、dockerで使用するためにpostfixよりもコンテナに優しいデーモンを選択する可能性が高くなります。私は過去約10年間、多かれ少なかれpostfixを使用してきましたが、今までオプションを見回す理由はあまりありませんでした。ドッカー向けのMTAオプションの可能性についてコメントを追加できる人がいればとても興味がありますか?

18
mc0e