- Что должно получиться?
- конфиг: хранится вне контейнера (/home/my-exim/conf);
- почтовые учетки и домены: хранятся в mysql вне контейнера;
- почтовые ящики: хранятся вне контейнера (/home/my-exim/mailboxes);
- спул-директория: в виде монтируемого при запуске контейнера тома вне контейнера;
- логи: хранятся вне контейнера (/home/my-exim/logs);
- Dockerfile
# mkdir -p /home/my-exim # cd /home/my-exim # touch Dockerfile
Содержимое:# build file for exim FROM ubuntu:20.04 MAINTAINER admin@site.com # накатываем последние обновления RUN apt-get update && apt-get -y dist-upgrade && apt-get -y autoremove # устанавливаем exim RUN apt install -y exim4
Пробуем создать образ:# cd /home/my-exim # docker build -t my-exim . # ...... # Successfully tagged my-exim:latest
Запускаем и проверяем:# docker run -it my-exim /bin/bash root@xxxxxxx:/# /usr/sbin/exim -bP | grep "log_file_path" log_file_path = /var/log/exim/%s.log root@xxxxxxx:/# exit
Добавляем в Dockerfile директории с хоста, где хранятся конфиг, почтовые ящики и логи. Добавляем запуск Exim при старте контейнера, в аргументах для запуска укажем -d, чтобы дебаг шел в STDOUT.# build file for exim FROM ubuntu:20.04 MAINTAINER admin@site.com # накатываем последние обновления RUN apt-get update && apt-get -y dist-upgrade && apt-get -y autoremove # устанавливаем exim RUN apt install -y exim4 RUN rm -rf /etc/exim4 RUN rm -rf /var/log/exim4 RUN rm -rf /var/mail ENTRYPOINT ["/usr/sbin/exim", "-bd", "-d", "-q1h"]
Снова пересобираем контейнер:# cd /home/my-exim # docker build -t my-exim . # ...... # Successfully tagged my-exim:latest
Строка для запуска контейнера немного поменялась, добавилось монтирование директорий с хоста в контейнер:docker run --mount src=/home/my-exim/conf,target=/etc/exim4,type=bind\ --mount src=/home/my-exim/logs,target=/var/log/exim4,type=bind\ --mount src=/home/my-exim/mailboxes,target=/var/mail,type=bind\ -it my-exim
Так как у нас почтовик, ему нужно пробросить порты, на которых он слушает входящие соединения. В моем случае это порты 25, 465 и 587. Снова меняем строку запуска:docker run --mount src=/home/my-exim/conf,target=/etc/exim4,type=bind\ --mount src=/home/my-exim/logs,target=/var/log/exim4,type=bind\ --mount src=/home/my-exim/mailboxes,target=/var/mail,type=bind\ -p 25:25/tcp -p 465:465/tcp -p 587:587/tcp\ -it my-exim
Статья опубликована: 2022-04-04 13:15:46
Последние правки: 2022-04-07 20:56:17
Для докера официального образа Exim от разработчиков не существует, не знаю, зачем, но мы сделаем свой.