⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

Docker 환경 준비 및 docker-mailserver 설치 - 슬라이드 1/7
A

AI Generated

2025. 11. 26. · 5 Views

Docker 환경 준비 및 docker-mailserver 설치

나만의 메일 서버를 Docker로 구축하는 방법을 처음부터 끝까지 안내합니다. docker-mailserver를 활용하여 실무에서 바로 사용할 수 있는 메일 시스템을 단계별로 설정해봅니다.


목차

  1. docker-mailserver 프로젝트 소개
  2. Docker Compose 파일 작성
  3. 환경 변수 설정 (.env)
  4. 볼륨 마운트 구성
  5. 첫 번째 메일 계정 생성
  6. 컨테이너 실행 및 로그 확인

1. docker-mailserver 프로젝트 소개

김개발 씨는 스타트업에서 일하는 주니어 개발자입니다. 어느 날 팀장님이 다가와 말했습니다.

"우리도 이제 회사 도메인으로 메일을 보내야 할 것 같아요. 외부 서비스 쓰면 비용이 만만치 않은데, 직접 구축할 수 있을까요?"

docker-mailserver는 Docker 컨테이너로 완전한 메일 서버를 구축할 수 있게 해주는 오픈소스 프로젝트입니다. 마치 레고 블록처럼 필요한 기능들이 미리 조립되어 있어서, 복잡한 설정 없이도 SMTP, IMAP, 스팸 필터, 바이러스 검사까지 갖춘 메일 서버를 운영할 수 있습니다.

Postfix, Dovecot, Amavis 같은 검증된 소프트웨어들이 하나의 컨테이너 안에 통합되어 있습니다.

다음 코드를 살펴봅시다.

# docker-mailserver 공식 저장소 구조 살펴보기
# GitHub: https://github.com/docker-mailserver/docker-mailserver

# 프로젝트 디렉토리 생성
mkdir -p ~/mailserver
cd ~/mailserver

# 공식 설정 스크립트 다운로드
curl -o setup.sh https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/setup.sh
chmod +x setup.sh

# 도움말 확인
./setup.sh help

김개발 씨는 잠시 고민에 빠졌습니다. 메일 서버라니, 뭔가 대단히 복잡할 것 같았습니다.

예전에 학교에서 Postfix를 설치하다가 포기했던 기억이 떠올랐습니다. 그때 옆자리의 박시니어 씨가 말했습니다.

"docker-mailserver 써봤어요? 요즘은 이걸로 많이 구축하더라고요." docker-mailserver란 정확히 무엇일까요?

쉽게 비유하자면, docker-mailserver는 마치 조립형 가구와 같습니다. 이케아에서 책장을 사면 나사부터 선반까지 필요한 부품이 모두 들어있고, 설명서대로 조립하면 완성됩니다.

docker-mailserver도 마찬가지입니다. 메일 서버에 필요한 모든 소프트웨어가 하나의 패키지로 제공되고, 설정 파일 몇 개만 작성하면 완전한 메일 서버가 완성됩니다.

전통적으로 메일 서버를 구축하려면 어떤 과정을 거쳐야 했을까요? 먼저 Postfix를 설치해서 SMTP 서버를 구성해야 합니다.

메일을 받으려면 Dovecot으로 IMAP 서버도 필요합니다. 스팸 메일을 걸러내려면 SpamAssassin을, 바이러스를 검사하려면 ClamAV를 따로 설치하고 연동해야 합니다.

이 모든 소프트웨어의 설정 파일을 하나하나 맞춰가며 작업해야 했습니다. docker-mailserver는 이 모든 것을 단일 컨테이너에 담았습니다.

컨테이너 하나만 실행하면 SMTP, IMAP, 스팸 필터, 바이러스 검사가 모두 작동합니다. 설정도 환경 변수와 간단한 설정 파일로 관리됩니다.

무엇보다 Docker를 사용하기 때문에 서버를 옮기거나 백업하기가 매우 쉽습니다. 위의 코드를 살펴보겠습니다.

먼저 mailserver라는 디렉토리를 만들고 그 안으로 이동합니다. 모든 설정 파일과 데이터가 이 디렉토리에 저장될 것입니다.

그 다음 공식 setup.sh 스크립트를 다운로드합니다. 이 스크립트는 메일 계정 생성, DKIM 설정 등 다양한 관리 작업을 도와주는 도구입니다.

실제 기업에서는 어떻게 활용할까요? 스타트업이나 중소기업에서 자체 메일 서버를 운영할 때 docker-mailserver를 많이 선택합니다.

AWS EC2나 DigitalOcean 같은 클라우드 서버에 Docker만 설치하면 바로 메일 서버를 띄울 수 있기 때문입니다. 비용도 월 5~10달러 수준의 서버면 충분합니다.

하지만 주의할 점도 있습니다. 메일 서버는 보안이 매우 중요합니다.

잘못 설정하면 스패머들이 내 서버를 통해 스팸을 발송하는 오픈 릴레이 서버가 될 수 있습니다. docker-mailserver는 기본적으로 안전하게 설정되어 있지만, 추가 보안 설정을 반드시 검토해야 합니다.

김개발 씨는 고개를 끄덕였습니다. "생각보다 어렵지 않을 것 같네요.

일단 시작해볼게요!"

실전 팁

💡 - docker-mailserver는 최소 1GB RAM을 권장합니다. ClamAV 바이러스 검사를 활성화하면 2GB 이상이 필요합니다.

  • 메일 서버 운영 전 도메인의 MX, SPF, DKIM, DMARC 레코드를 반드시 설정해야 합니다.

2. Docker Compose 파일 작성

김개발 씨는 docker-mailserver 공식 문서를 열었습니다. 가장 먼저 해야 할 일은 docker-compose.yml 파일을 작성하는 것이었습니다.

Docker Compose를 사용하면 복잡한 컨테이너 설정을 파일 하나로 관리할 수 있습니다.

Docker Compose는 여러 컨테이너를 정의하고 관리하는 도구입니다. docker-mailserver를 실행하려면 포트 매핑, 볼륨 마운트, 환경 변수 등 많은 설정이 필요한데, 이 모든 것을 docker-compose.yml 파일 하나에 담을 수 있습니다.

마치 요리 레시피처럼, 한 번 작성해두면 언제든 같은 환경을 재현할 수 있습니다.

다음 코드를 살펴봅시다.

# docker-compose.yml
services:
  mailserver:
    image: ghcr.io/docker-mailserver/docker-mailserver:latest
    container_name: mailserver
    hostname: mail
    domainname: example.com
    ports:
      - "25:25"    # SMTP
      - "465:465"  # SMTPS
      - "587:587"  # Submission
      - "993:993"  # IMAPS
    volumes:
      - ./docker-data/dms/mail-data/:/var/mail/
      - ./docker-data/dms/mail-state/:/var/mail-state/
      - ./docker-data/dms/mail-logs/:/var/log/mail/
      - ./docker-data/dms/config/:/tmp/docker-mailserver/
      - /etc/localtime:/etc/localtime:ro
    environment:
      - ENABLE_SPAMASSASSIN=1
      - ENABLE_CLAMAV=1
      - ENABLE_FAIL2BAN=1
    restart: always

박시니어 씨가 김개발 씨의 모니터를 바라보며 말했습니다. "Docker Compose 파일부터 만들어야 해요.

이게 메일 서버의 설계도라고 생각하면 됩니다." docker-compose.yml이란 무엇일까요? 마치 건축 설계도와 같습니다.

집을 지을 때 설계도에 방의 크기, 창문 위치, 배관 경로를 모두 표시하듯이, docker-compose.yml에는 컨테이너의 이미지, 포트, 볼륨, 환경 변수 등 모든 설정이 담겨 있습니다. 파일의 구조를 하나씩 살펴보겠습니다.

먼저 image 항목은 사용할 Docker 이미지를 지정합니다. ghcr.io는 GitHub Container Registry의 주소이고, 여기서 docker-mailserver의 최신 이미지를 가져옵니다.

hostnamedomainname은 매우 중요합니다. hostname을 mail로, domainname을 example.com으로 설정하면, 이 메일 서버의 전체 주소는 mail.example.com이 됩니다.

메일 주소가 user@example.com이 되려면 domainname을 정확히 설정해야 합니다. ports 섹션을 보겠습니다.

25번 포트는 SMTP입니다. 다른 메일 서버에서 메일을 받을 때 사용합니다.

465번은 SMTPS, SSL로 암호화된 SMTP입니다. 587번은 Submission 포트로, 메일 클라이언트에서 메일을 보낼 때 사용합니다.

993번은 IMAPS, 메일 클라이언트에서 메일을 가져올 때 사용하는 암호화된 IMAP입니다. volumes 섹션은 데이터 영속성을 담당합니다.

Docker 컨테이너는 기본적으로 삭제하면 내부 데이터도 함께 사라집니다. 하지만 메일 데이터는 절대 사라지면 안 됩니다.

volumes를 사용하면 컨테이너 내부의 디렉토리를 호스트 서버의 디렉토리와 연결할 수 있습니다. 컨테이너를 삭제해도 호스트의 데이터는 그대로 남습니다.

environment 섹션에서는 메일 서버의 기능을 켜고 끕니다. ENABLE_SPAMASSASSIN=1은 스팸 필터를 활성화합니다.

ENABLE_CLAMAV=1은 바이러스 검사를 켭니다. ENABLE_FAIL2BAN=1은 무차별 대입 공격을 차단하는 보안 도구를 활성화합니다.

마지막으로 restart: always는 서버가 재부팅되거나 컨테이너가 비정상 종료되어도 자동으로 다시 시작되도록 합니다. 김개발 씨가 물었습니다.

"domainname을 우리 회사 도메인으로 바꾸면 되는 거죠?" 박시니어 씨가 고개를 끄덕였습니다. "맞아요.

그리고 반드시 DNS 설정도 맞춰야 해요."

실전 팁

💡 - 클라우드 환경에서는 25번 포트가 기본적으로 차단되어 있는 경우가 많습니다. AWS의 경우 별도로 해제 요청을 해야 합니다.

  • restart: always 대신 restart: unless-stopped를 사용하면 수동으로 멈춘 컨테이너는 자동 재시작되지 않습니다.

3. 환경 변수 설정 (.env)

docker-compose.yml 파일을 작성한 김개발 씨는 다음 단계로 넘어갔습니다. 환경 변수 파일을 만들어야 할 차례입니다.

박시니어 씨가 말했습니다. "모든 설정을 docker-compose.yml에 넣으면 관리가 어려워져요.

민감한 정보나 자주 바뀌는 값은 .env 파일로 분리하는 게 좋아요."

**환경 변수 파일(.env)**은 설정 값을 별도 파일로 분리하여 관리하는 방법입니다. docker-mailserver는 수십 개의 설정 옵션을 제공하는데, 이를 모두 docker-compose.yml에 넣으면 파일이 복잡해집니다.

.env 파일을 사용하면 설정을 체계적으로 관리할 수 있고, 환경별로 다른 설정 파일을 사용할 수도 있습니다.

다음 코드를 살펴봅시다.

# mailserver.env 파일 생성
# docker-mailserver의 모든 설정 옵션

# 기본 설정
OVERRIDE_HOSTNAME=mail.example.com
LOG_LEVEL=info

# 보안 설정
ENABLE_SPAMASSASSIN=1
SPAMASSASSIN_SPAM_TO_INBOX=1
MOVE_SPAM_TO_JUNK=1

# 바이러스 검사 (메모리 많이 사용)
ENABLE_CLAMAV=0

# 로그인 시도 제한
ENABLE_FAIL2BAN=1

# SSL/TLS 설정
SSL_TYPE=letsencrypt
SSL_DOMAIN=mail.example.com

# 추가 기능
ENABLE_QUOTAS=1
POSTMASTER_ADDRESS=postmaster@example.com

김개발 씨는 .env 파일의 개념이 조금 헷갈렸습니다. "왜 docker-compose.yml에 다 쓰면 안 되나요?" 박시니어 씨가 설명했습니다.

"지금은 개발 서버 하나지만, 나중에 스테이징 서버, 운영 서버가 생기면 어떻게 할 건가요?" 그제야 김개발 씨가 이해했습니다. 환경 변수 파일은 마치 프로필 설정과 같습니다.

게임에서 캐릭터를 만들 때 이름, 직업, 스킬 포인트를 따로 저장하듯이, .env 파일에는 메일 서버의 세부 설정을 저장합니다. 서버마다 다른 .env 파일을 사용하면 같은 docker-compose.yml로 여러 환경을 관리할 수 있습니다.

주요 설정 항목을 살펴보겠습니다. OVERRIDE_HOSTNAME은 메일 서버의 전체 호스트명을 지정합니다.

이 값이 메일 헤더에 나타나므로 정확히 설정해야 합니다. ENABLE_SPAMASSASSIN을 1로 설정하면 스팸 필터가 활성화됩니다.

MOVE_SPAM_TO_JUNK를 1로 설정하면 스팸으로 판정된 메일이 자동으로 정크 폴더로 이동합니다. ENABLE_CLAMAV는 바이러스 검사입니다.

강력한 기능이지만 메모리를 많이 사용합니다. 서버 사양이 낮다면 0으로 비활성화하는 것도 방법입니다.

SSL_TYPE은 매우 중요한 설정입니다. letsencrypt로 설정하면 Let's Encrypt 인증서를 자동으로 사용합니다.

물론 인증서는 미리 발급받아야 합니다. 다른 옵션으로는 manual(수동 인증서), self-signed(자체 서명 인증서) 등이 있습니다.

ENABLE_QUOTAS를 활성화하면 사용자별로 메일 용량 제한을 설정할 수 있습니다. 한 사용자가 디스크를 다 채우는 것을 방지할 수 있습니다.

docker-compose.yml에서 이 파일을 사용하려면 env_file 옵션을 추가해야 합니다. yaml env_file: - mailserver.env 김개발 씨가 파일을 저장하며 말했습니다.

"ClamAV는 일단 꺼두고 나중에 서버 업그레이드하면 켜는 게 좋겠네요." 박시니어 씨가 동의했습니다. "현명한 판단이에요.

처음부터 모든 기능을 켜면 리소스가 부족해질 수 있어요."

실전 팁

💡 - .env 파일은 절대 Git에 커밋하지 마세요. .gitignore에 추가하고, 예시 파일(.env.example)만 커밋하는 것이 좋습니다.

  • docker-mailserver 공식 저장소에서 전체 환경 변수 목록과 기본값을 확인할 수 있습니다.

4. 볼륨 마운트 구성

환경 변수 설정을 마친 김개발 씨에게 박시니어 씨가 물었습니다. "데이터 백업은 어떻게 할 건가요?" 김개발 씨가 잠시 멈칫했습니다.

"아, 볼륨 설정을 더 자세히 봐야겠네요."

볼륨 마운트는 Docker 컨테이너의 데이터를 호스트 시스템에 저장하는 방법입니다. 메일 서버에서는 사용자의 메일, 설정 파일, 로그 등 중요한 데이터가 많습니다.

볼륨을 제대로 구성하지 않으면 컨테이너를 재시작할 때 모든 데이터가 사라질 수 있습니다. 마치 컴퓨터의 하드디스크처럼, 볼륨은 영구적인 저장소 역할을 합니다.

다음 코드를 살펴봅시다.

# 볼륨 디렉토리 구조 생성
mkdir -p docker-data/dms/mail-data
mkdir -p docker-data/dms/mail-state
mkdir -p docker-data/dms/mail-logs
mkdir -p docker-data/dms/config

# docker-compose.yml의 volumes 섹션
volumes:
  # 사용자 메일 데이터 (가장 중요!)
  - ./docker-data/dms/mail-data/:/var/mail/

  # 서비스 상태 (Amavis, SpamAssassin 등)
  - ./docker-data/dms/mail-state/:/var/mail-state/

  # 메일 서버 로그
  - ./docker-data/dms/mail-logs/:/var/log/mail/

  # 설정 파일 (계정 정보, DKIM 키 등)
  - ./docker-data/dms/config/:/tmp/docker-mailserver/

  # 시간대 동기화 (읽기 전용)
  - /etc/localtime:/etc/localtime:ro

  # SSL 인증서 (Let's Encrypt 사용 시)
  - ./docker-data/certbot/certs/:/etc/letsencrypt/:ro

박시니어 씨가 화이트보드에 그림을 그리며 설명했습니다. "Docker 컨테이너를 아파트라고 생각해봐요." 볼륨 마운트는 마치 창고 임대와 같습니다.

아파트에 사는 동안 짐을 아파트 안에 둘 수도 있지만, 이사를 가면 다 들고 나와야 합니다. 하지만 별도의 창고를 임대해서 중요한 물건을 보관하면, 아파트를 옮겨도 창고의 물건은 그대로입니다.

볼륨도 마찬가지입니다. 각 볼륨의 역할을 자세히 살펴보겠습니다.

**/var/mail/**은 사용자의 실제 메일이 저장되는 곳입니다. 이 볼륨이 가장 중요합니다.

사용자가 받은 편지함, 보낸 편지함, 폴더 구조가 모두 여기에 있습니다. 이 볼륨을 잃어버리면 모든 메일이 사라집니다.

**/var/mail-state/**는 서비스 상태 정보를 저장합니다. SpamAssassin의 학습 데이터, Fail2ban의 차단 기록 등이 여기에 있습니다.

컨테이너를 재시작해도 스팸 필터가 처음부터 다시 학습하지 않아도 됩니다. **/var/log/mail/**은 로그 파일입니다.

문제가 발생했을 때 디버깅하려면 로그가 필수입니다. 메일이 왜 안 갔는지, 누가 로그인에 실패했는지 모두 로그에서 확인할 수 있습니다.

**/tmp/docker-mailserver/**는 설정 파일 디렉토리입니다. 메일 계정 목록, 별칭 설정, DKIM 키 등이 여기에 저장됩니다.

setup.sh 스크립트가 이 디렉토리의 파일들을 읽고 씁니다. /etc/localtime은 시간대 동기화를 위한 것입니다.

:ro는 읽기 전용(read-only)을 의미합니다. 컨테이너가 호스트의 시간대를 참조만 하고 수정하지는 못합니다.

백업은 어떻게 해야 할까요? docker-data 디렉토리 전체를 정기적으로 백업하면 됩니다.

rsync, tar, 또는 클라우드 백업 서비스를 사용할 수 있습니다. 특히 mail-data와 config 디렉토리는 반드시 백업해야 합니다.

김개발 씨가 터미널에 mkdir 명령어를 입력하며 말했습니다. "디렉토리를 미리 만들어 두는 게 좋겠네요.

권한 문제도 생길 수 있으니까요." 박시니어 씨가 덧붙였습니다. "맞아요.

그리고 mail-data 디렉토리의 권한은 컨테이너 내부 사용자에 맞춰야 해요."

실전 팁

💡 - mail-data 디렉토리는 주기적으로 백업하세요. cron 작업으로 자동화하는 것을 권장합니다.

  • 볼륨 디렉토리의 권한이 잘못되면 메일 서버가 시작되지 않을 수 있습니다. docker-mailserver 로그를 확인하세요.

5. 첫 번째 메일 계정 생성

김개발 씨는 드디어 메일 서버 설정의 핵심 단계에 도달했습니다. 이제 실제로 메일을 주고받을 계정을 만들어야 합니다.

박시니어 씨가 말했습니다. "setup.sh 스크립트를 사용하면 계정 관리가 정말 쉬워요."

메일 계정은 메일 서버에서 메일을 주고받는 사용자입니다. docker-mailserver는 setup.sh 스크립트를 통해 계정을 쉽게 관리할 수 있습니다.

계정 정보는 config 디렉토리의 postfix-accounts.cf 파일에 해시된 형태로 저장됩니다. 마치 회원가입처럼, 이메일 주소와 비밀번호를 등록하면 해당 계정으로 메일을 사용할 수 있습니다.

다음 코드를 살펴봅시다.

# 메일 계정 생성 (컨테이너 실행 중일 때)
./setup.sh email add admin@example.com

# 비밀번호 입력 프롬프트가 나타남
# Enter Password: ********
# Confirm Password: ********

# 계정 목록 확인
./setup.sh email list

# 계정 비밀번호 변경
./setup.sh email update admin@example.com

# 계정 삭제
./setup.sh email del admin@example.com

# 수동으로 계정 파일 확인
cat docker-data/dms/config/postfix-accounts.cf
# admin@example.com|{SHA512-CRYPT}$6$...해시된비밀번호...

# 메일 별칭(Alias) 추가
./setup.sh alias add info@example.com admin@example.com

박시니어 씨가 setup.sh 파일을 가리키며 말했습니다. "이 스크립트가 docker-mailserver의 스위스 아미 나이프예요.

거의 모든 관리 작업을 이걸로 할 수 있어요." setup.sh 스크립트는 마치 관리자 콘솔과 같습니다. 온라인 게임의 관리자 페이지를 떠올려 보세요.

사용자 계정을 만들고, 비밀번호를 초기화하고, 권한을 부여하는 일을 모두 할 수 있습니다. setup.sh도 마찬가지입니다.

메일 계정 관리부터 DKIM 키 생성, 설정 확인까지 다양한 기능을 제공합니다. 계정 생성 과정을 단계별로 살펴보겠습니다.

./setup.sh email add 명령을 실행하면 이메일 주소와 비밀번호를 입력받습니다. 비밀번호는 화면에 표시되지 않고, 보안을 위해 SHA512로 해시되어 저장됩니다.

해시된 비밀번호는 원본으로 복원할 수 없으므로 비밀번호를 잊어버리면 새로 설정해야 합니다. 계정 정보는 어디에 저장될까요?

postfix-accounts.cf 파일에 저장됩니다. 이 파일을 열어보면 이메일 주소와 해시된 비밀번호가 파이프(|)로 구분되어 있습니다.

이 파일을 직접 편집할 수도 있지만, setup.sh를 사용하는 것이 안전합니다. **메일 별칭(Alias)**도 중요한 기능입니다.

info@example.com으로 오는 메일을 admin@example.com으로 전달하고 싶다면 별칭을 설정합니다. 회사에서 support@, sales@, info@ 같은 대표 주소를 담당자에게 연결할 때 유용합니다.

첫 번째 계정으로는 무엇을 만들어야 할까요? 보통 admin이나 postmaster 계정을 먼저 만듭니다.

postmaster는 RFC에서 권장하는 필수 주소로, 메일 시스템 관련 문의가 이 주소로 옵니다. 환경 변수에서 POSTMASTER_ADDRESS를 설정했다면 해당 계정이 반드시 존재해야 합니다.

김개발 씨가 첫 번째 계정을 생성했습니다. "admin@example.com 계정을 만들었어요.

비밀번호는 복잡하게 설정했고요." 박시니어 씨가 조언했습니다. "좋아요.

그리고 테스트용 계정도 하나 만들어서 메일 송수신 테스트를 해보세요."

실전 팁

💡 - 비밀번호는 최소 12자 이상, 대소문자와 숫자, 특수문자를 조합하세요. 메일 서버는 공격자들의 주요 타겟입니다.

  • 계정을 만들기 전에 컨테이너가 실행 중이어야 합니다. 컨테이너가 꺼져 있으면 setup.sh가 작동하지 않습니다.

6. 컨테이너 실행 및 로그 확인

모든 준비가 끝났습니다. 김개발 씨는 긴장된 마음으로 엔터 키 위에 손가락을 올렸습니다.

"이제 진짜 실행하는 거죠?" 박시니어 씨가 웃으며 말했습니다. "네, 드디어 메일 서버를 띄우는 순간이에요."

docker compose up 명령으로 메일 서버 컨테이너를 시작합니다. 처음 실행할 때는 이미지 다운로드와 초기화에 시간이 걸립니다.

컨테이너가 정상적으로 작동하는지 확인하려면 로그를 반드시 확인해야 합니다. 마치 자동차 시동을 걸고 계기판을 확인하듯이, 로그는 메일 서버의 상태를 알려주는 중요한 지표입니다.

다음 코드를 살펴봅시다.

# 컨테이너 시작 (백그라운드 실행)
docker compose up -d

# 컨테이너 상태 확인
docker compose ps

# 실시간 로그 확인
docker compose logs -f mailserver

# 최근 100줄 로그 확인
docker compose logs --tail=100 mailserver

# 특정 서비스 로그만 필터링 (Postfix)
docker compose logs mailserver 2>&1 | grep postfix

# 컨테이너 내부 접속 (디버깅용)
docker compose exec mailserver bash

# 메일 큐 확인 (컨테이너 내부에서)
postqueue -p

# 컨테이너 중지
docker compose down

# 컨테이너 재시작
docker compose restart mailserver

김개발 씨가 docker compose up -d 명령을 입력했습니다. 화면에 여러 줄의 메시지가 지나갔습니다.

컨테이너 시작은 마치 비행기 이륙 전 점검과 같습니다. 조종사가 이륙 전에 엔진, 연료, 계기판을 하나하나 확인하듯이, 우리도 메일 서버가 제대로 시작되었는지 확인해야 합니다.

로그를 보지 않고 넘어가면 나중에 "왜 메일이 안 가지?"라는 질문에 답할 수 없게 됩니다. -d 옵션은 무엇일까요?

detached 모드를 의미합니다. 컨테이너가 백그라운드에서 실행되고, 터미널은 다른 작업에 사용할 수 있습니다.

이 옵션 없이 실행하면 로그가 터미널에 계속 출력되고, 터미널을 닫으면 컨테이너도 종료됩니다. 로그에서 무엇을 확인해야 할까요?

먼저 postfix/master가 시작되었는지 확인합니다. "daemon started" 메시지가 보이면 SMTP 서버가 정상입니다.

다음으로 dovecot이 시작되었는지 확인합니다. "Dovecot ready" 메시지가 보여야 합니다.

에러 메시지가 있다면 빨간색이나 ERROR 키워드로 찾아볼 수 있습니다. 흔히 발생하는 문제들을 살펴보겠습니다.

포트 충돌이 가장 흔합니다. 이미 다른 프로그램이 25, 587, 993 포트를 사용하고 있다면 컨테이너가 시작되지 않습니다.

netstat -tlnp 명령으로 포트 사용 현황을 확인하세요. 볼륨 권한 문제도 자주 발생합니다.

로그에 "Permission denied" 메시지가 보이면 볼륨 디렉토리의 권한을 확인해야 합니다. DNS 설정 미비로 인한 경고도 많습니다.

MX 레코드, SPF 레코드가 없으면 메일 발송 시 스팸으로 분류될 수 있습니다. docker compose exec 명령으로 컨테이너 내부에 접속할 수 있습니다.

마치 서버에 SSH로 접속하는 것처럼, 컨테이너 내부에서 직접 명령어를 실행할 수 있습니다. postqueue -p로 발송 대기 중인 메일을 확인하거나, 설정 파일을 직접 살펴볼 수 있습니다.

김개발 씨의 화면에 "mail.example.com postfix/master[1]: daemon started" 메시지가 나타났습니다. 그가 환하게 웃었습니다.

"작동하는 것 같아요!" 박시니어 씨가 어깨를 두드렸습니다. "축하해요!

이제 테스트 메일을 보내볼까요? DNS 설정까지 마치면 외부로도 메일을 보낼 수 있어요."

실전 팁

💡 - 처음 시작할 때 ClamAV 바이러스 데이터베이스 다운로드에 5-10분 정도 걸릴 수 있습니다. 로그에서 진행 상황을 확인하세요.

  • docker compose logs -f 명령은 Ctrl+C로 종료할 수 있습니다. 컨테이너는 계속 실행됩니다.
  • 문제 해결이 어려우면 docker-mailserver GitHub의 Discussions에서 도움을 받을 수 있습니다.

이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!

#Docker#docker-mailserver#DockerCompose#EmailServer#DevOps#Docker,Installation

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.