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: 테스트 목적의 가벼운 시뮬레이션 도구
연결 및 메시지 테스트 절차
- MQTTX 실행 후 새로운 연결 생성
- 호스트 주소 입력:
localhost, 포트:1883 - 인증 정보 탭에서 사용자명과 비밀번호 입력
- Subscribe:
test/topic구독 - Publish: 동일한 토픽에 메시지 전송
- 수신 측에서 메시지가 정상 도착하는지 확인
로그 확인을 통해 문제 진단도 가능하며, 로그 파일은 /home/mqtt/log/mosquitto.log에 저장됩니다.