Postfix и Dovecot в контейнере Docker

Postfix и Dovecot в контейнере Docker 01Статья Postfix и Dovecot в контейнере Docker расскажет о том, как простейшую связку MTA и MAA развертывать автоматически с помощью технологий контейнеризации. Этот сценарий идеален для целей обкатки и тестирования почтовых сервисов (например для групп разработки и тестирования ПО для отладки почтового функционала разрабатываемого софта), но мало применим для реальных инфраструктур в продакшене.

Postfix и Dovecot в контейнере Docker

Все нюансы установки и настройки Postfix и Dovecot с использованием локального хранилища maildir я подробно рассказывал в одной из недавних статей – Базовая настройка Postfix и Dovecot. В этой же статье я хочу сделать упор на особенности развертывания абсолютно аналогичной конфигурации, но с помощью контейнеров Docker.

Dockerfile и все необходимое для сборки образа добро я выложил на GitHub – postfix-dovecot-maildir. Обратите внимание на тестовые ветки, возможно там будет более актуальная информация.

Подготовка

Установка Docker подробно расписана в официальной документации 1.

Для выкачивания репозитория с GitHub вам потребуется Git, установить его можно командой:

Советую создать отдельную папку, чтобы не мусорить в текущем каталоге, и сразу в неё перейти:

Далее скачиваем репозиторий командой:

Примечание: я воспользуюсь тестовой веткой, поскольку она включает наиболее  свежие изменения. Обратите внимание, что код в этой ветке теоретически может быть неработоспособным (на то она и тестовая, чтобы тестировать изменения. Ваш Кэп). Чтобы выкачать основную рабочую ветку, просто уберите ключ -b и имя ветки Test-branche.

В текущем каталоге вы обнаружите новую папку с именем postfix-dovecot-maildir, в ней и будет нужный нам для сборки образа dockerfile. Перейдем в папку и проверим её содержимое:

Все эти файлы вы можете скачать и вручную без использования Git, но это не очень удобно. К тому же, если в каком-либо репозитории файлов будет больше, выкачивание вручную – не лучшая затея.

Сборка

Теперь настал самый ответственный момент – сборка образа. Сделать это можно с помощью команды:

Где:

  • domain.tld – DNS-имя почтового домена;
  • mailuser – имя основного пользователя в системе, для которого будет создан ящик и на которое будут перенаправлена входящая почта с дефолтных адресов (например postmaster@bissquit.ru)
  • mailserver – имя собираемого образа (можно задать исключительно техническое имя, например testcontainer01).

Далее последует длительный процесс сборки контейнера. Периодически будут создаваться промежуточные контейнеры (на каждую отдельную инструкцию dockerfile), потом удаляться. Вы увидите что-то на подобии этого:

Потребуется подключение к интернету, если у вас не выкачены необходимые образы, а также если в dockerfile есть соответствующие команды (например apt-get update и др.).

Запуск

Образ собран, пришла пора запустить на его основе контейнер. Выполним команду:

Если все прошло нормально, то выполнив команду docker ps -a, вы увидите запущенный контейнер.

Если понадобиться зайти внутрь контейнера для изменения каких-либо настроек или для диагностики, то это можно сделать командой:

где b8610b5cea19 – идентификатор контейнера (доступен также по команде docker ps -a). По окончанию сеанса наберите exit.

Отличия развертывания через Docker

Поскольку развертывание контейнера происходит в автоматическом режиме без участия пользователя, существует ряд отличий по сравнению с традиционным вариантом, когда все делается вручную.

Установка пакетов

В процессе установки пакетов пользователю могут быть заданы вопросы о желаемой конфигурации. При автоматическом сценарии развертывания важно эти ответы определить заранее.

Примечание: Например Postfix обычно задает вопросы о типе настройки (см. Установка Postfix на Debian) и почтовом имени.

Сделать это можно дополнив базу данных debconf 2. Для этого нужно создать файл (у меня он будет иметь имя postfix_silent_install.txt) с содержимым (файл построчный, каждая строка должна иметь четыре значения):

А потом вставляем ответы в БД командой debconf-set-selections 3:

У меня в dockerfile эта операция описана инструкцией:

Следующий момент: нужно ставить пакеты в неинтерактивном режиме, чтобы пользователю не задавались никакие вопросы. Для этого необходимо задать тип пользовательского интерфейса командой DEBIAN_FRONTEND=noninteractive 4.

На все вопросы да/нет отвечать утвердительно поможет ключ -y утилиты apt-get. Ну и для совсем тихого режима используем ключ -q. В итоге команда установки выглядит следующим образом:

На этом с установкой разобрались.

Конфиги

Можно бесконечным количеством команд postconf определять все ключевые параметры в Postfix. То же самое придется проделать и с Dovecot. А можно просто взять и скопировать уже готовые и отлаженные конфиги. Это наиболее гуманный способ, именно поэтому у меня в dockerfile присутствуют две инструкции:

ADD main.cf /etc/postfix/main.cf

ADD dovecot.conf /etc/dovecot/dovecot.conf

Они просто копируют два файла из текущего каталога внутрь контейнера в заданное место.

Надеюсь статья внесла ясность во все вопросы касательно использования Docker для развертывания связки Postfix + Dovecot.

Яндекс.Метрика