Главная
Главная Руководства Docker › Создаем образ для докера на основе Ubuntu, внутри Exim.



Автор:

Статья опубликована: 2022-04-04 13:15:46
Последние правки: 2022-04-07 20:56:17

Для докера официального образа Exim от разработчиков не существует, не знаю, зачем, но мы сделаем свой.

  • Что должно получиться?

    - конфиг: хранится вне контейнера (/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