Docker를 사용한 MQTT 브로커(eclipse-mosquitto) 서비스 배포

MQTT 이미지 다운로드

Mosquitto 기반의 MQTT 브로커를 Docker로 배포하기 위해 먼저 공식 이미지를 가져옵니다.

docker pull eclipse-mosquitto:2.0.15

설정 파일 구성

컨테이너 외부에서 설정을 관리하기 위해 호스트에 디렉터리를 생성하고 구성 파일을 작성합니다. 예시 경로는 /home/mqtt/config입니다.

mosquitto.conf 설정

기본 동작을 위한 주요 설정 항목:

listener 1883 0.0.0.0
protocol mqtt

# WebSocket 지원 (필요 시 활성화)
# listener 9001
# protocol websockets

persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
password_file /mosquitto/config/passwd
allow_anonymous false
per_listener_settings true
  • listener 1883: 일반 MQTT 클라이언트 연결 포트
  • persistence_location: 상태 및 세션 데이터 저장 위치
  • log_dest: 로그 출력 방식 지정
  • allow_anonymous: 인증 없이 접속 허용 여부 (보안 고려 시 false 권장)

비밀번호 파일 초기화

인증 계정을 저장할 비밀번호 파일을 미리 생성합니다.

mkdir -p /home/mqtt/config /home/mqtt/data /home/mqtt/log
touch /home/mqtt/config/passwd

Docker 컨테이너 실행

볼륨 마운트와 포트 매핑을 통해 영구 저장 및 외부 접근을 지원하는 방식으로 컨테이너를 시작합니다.

docker run -d \
  --name mqtt-broker \
  -p 1883:1883 \
  -p 9001:9001 \
  -v /home/mqtt/config:/mosquitto/config \
  -v /home/mqtt/data:/mosquitto/data \
  -v /home/mqtt/log:/mosquitto/log \
  eclipse-mosquitto:2.0.15
  • -p 1883:1883: 기본 MQTT 프로토콜 포트
  • -p 9001:9001: WebSocket 연결 포트 (옵션)
  • -v: 설정, 데이터, 로그 디렉터리를 호스트와 공유

사용자 계정 관리

Mosquitto는 mosquitto_passwd 유틸리티를 통해 사용자 인증 정보를 관리합니다.

방법 1: exec 명령어로 직접 추가

# 새 사용자 생성 (대화형 입력)
docker exec -it mqtt-broker mosquitto_passwd -c /mosquitto/config/passwd alice

# 비밀번호 자동 입력 방식
docker exec -it mqtt-broker sh -c "echo 'password123' | mosquitto_passwd -b /mosquitto/config/passwd bob"

# 설정 리로드 (HUP 시그널 전송)
docker exec mqtt-broker kill -HUP 1

방법 2: 컨테이너 내부 진입 후 작업

docker exec -it mqtt-broker sh
# 이후 아래 명령어를 컨테이너 내에서 실행
mosquitto_passwd -b /mosquitto/config/passwd charlie s3cr3tp@ss
exit

# 재시작으로 설정 반영
docker restart mqtt-broker

접속 테스트

외부 도구를 활용해 MQTT 브로커의 정상 동작을 검증합니다.

클라이언트 도구 추천

  • MQTTX: 크로스 플랫폼 GUI 기반 MQTT 클라이언트 (공식 사이트 제공)
  • MQTTSimulateDevice: 테스트 목적의 가벼운 시뮬레이션 도구

연결 및 메시지 테스트 절차

  1. MQTTX 실행 후 새로운 연결 생성
  2. 호스트 주소 입력: localhost, 포트: 1883
  3. 인증 정보 탭에서 사용자명과 비밀번호 입력
  4. Subscribe: test/topic 구독
  5. Publish: 동일한 토픽에 메시지 전송
  6. 수신 측에서 메시지가 정상 도착하는지 확인

로그 확인을 통해 문제 진단도 가능하며, 로그 파일은 /home/mqtt/log/mosquitto.log에 저장됩니다.

태그: docker MQTT mqtt-broker eclipse-mosquitto mosquitto-conf

6월 15일 16:15에 게시됨