How to docker mail server

A great topic!

Setting up a mail server with Docker is a fantastic way to create a reliable and scalable email infrastructure. Here's a step-by-step guide to help you get started:

Prerequisites

  1. Docker installed on your system (you can download it from the official Docker website).
  2. Basic understanding of Docker and containerization.
  3. A domain name (optional, but recommended for a production setup).

Choose a mail server software

There are several excellent mail server software options available, including:

  1. Postfix (a popular, open-source mail server)
  2. OpenSMTPD (another popular, open-source mail server)
  3. Mailhog (a simple, open-source mail server for testing and development)

For this example, we'll use Postfix.

Create a Docker Compose file

Create a new file named docker-compose.yml with the following content:

version: '3'

services:
  mailserver:
    image: postfix:latest
    restart: always
    ports:
      - "25:25"
      - "587:587"
      - "993:993"
    environment:
      - POSTFIX_MYDESTINATION=yourdomain.com
      - POSTFIX_MYNAME=yourdomain.com
      - POSTFIX_MYREALNAME=Your Name
    volumes:
      -./maildata:/etc/postfix
    depends_on:
      - mysql

  mysql:
    image: mysql:latest
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=yourpassword
      - MYSQL_DATABASE=postfix
      - MYSQL_USER=postfix
      - MYSQL_PASSWORD=postfix
    volumes:
      -./mysql-data:/var/lib/mysql

volumes:
  maildata:
  mysql-data:

Replace yourdomain.com with your actual domain name, and yourpassword with a strong password for the MySQL root user.

Create the mail data directory

Create a new directory named maildata and create the following files:

  1. main.cf: This file contains the Postfix configuration.
    mydestination = yourdomain.com
    myname = yourdomain.com
    myrealname = Your Name
  2. virtual: This file contains the virtual mailboxes configuration.
    @virtual mailboxes

    Create the MySQL database

Create a new directory named mysql-data and create the following files:

  1. postfix.sql: This file contains the MySQL database schema and initial data.
    CREATE DATABASE postfix;
    GRANT ALL PRIVILEGES ON postfix.* TO 'postfix'@'%' IDENTIFIED BY 'postfix';

    Start the containers

Run the following command to start the containers:

docker-compose up -d

This will start the containers in detached mode.

Configure your mail client

To test your mail server, you'll need to configure your mail client to use the Docker container's IP address and port. For example, if your container's IP address is 172.17.0.2, you can use the following settings:

Replace yourusername and yourpassword with the credentials you created in the docker-compose.yml file.

That's it! You now have a functional mail server running with Docker.