
원래는 RabbitMQ를 설치하는 방법만 설명하려고 했으나 제가 근무하고 있는 회사도 그렇고 타 기업들도 보면 RabbitMQ를 사용하는 방법이 다양했습니다. EC2에 docker 컨테이너로 운영하는 회사, AWS자체에 존재하는 Amazon MQ 라는 메시지 브로커를 사용하는 등 다양한 방법으로 사용하고 있었습니다. 이번 게시글에서는 EC2기반에 docker 컨테이너로 RabbitMQ를 운영하고 RabbitMQ 관리 페이지에 접속하는 시간을 가져보겠습니다.
(docker 설치는 이전에 작성한 게시글이 있어서 그걸로 대체 하겠습니다.)
해당 내용은 이전에 작성한 게시글을 사용하겠습니다.
해당 내용 또한 이전에 작성한 게시글을 사용하겠습니다.
Docker 환경에서 RabbitMQ를 실행시키는 방법은 2가지가 있습니다.
📗 docker 명령어로 운영
해당 방법은 명령어를 통해 RabbitMQ이미지 다운로드, 컨테이너 실행하는 방법입니다.
# latest RabbitMQ 4.x
docker run -d -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4-management
# 기존 명령어에는 -d 없습니다, 백그라운드로 로딩시키기 위해 추가했습니다.
만약 RabbitMQ 컨테이너를 생성한다면 5672, 15672, 25672 포트와 함께 등록되는데 포트별로 의미는 다음과 같습니다.
🖼️ 실행 이미지
명령어를 실행하면 RabbitMQ의 이미지를 다운로드하고 백그라운드 상태로 컨테이너를 실행합니다.
docker ps -a 명령어를 실행시키면 다음과 같이 RabbitMQ가 실행되는 것을 확인할 수 있습니다.
직접 docker 명령어를 사용하면 빠르게 이미지를 다운로드하고 바로 실행시킬 수 있지만 상세 설정이 불편하다는 단점이 있습니다. 그렇기에 필요한 자잘한 설정들을 Dockerfile에 작성한 후 이미지로 빌드하여 컨테이너로 실행시키는 방법이 있습니다.
(해당 방법은 adjh54님의 방법을 사용했습니다.)
폴더구조는 다음과 같습니다.

rabbitmq.conf : 해당 파일에는 RabbitMQ 메세지 브로커의 설정을 담고 있습니다. 예를 들어 사용할 포트, 클러스터링 설정, 가상 호스트 설정 등이 있습니다.
1. rabbitmq.conf 설정파일 작성
# guest계정으로 접근 못하도록 막을 때 사용하는 설정입니다.
loopback_users.guest = false
# 해당 메세지 큐를 단일노드로 사용한다는 의미인데 경우에따라서 classic 혹은 milti로 설정이 가능합니다. (기본값은 single 입니다.)
distribution.mode = single
# 디스크 노드를 설정하는 의미 입니다.
# 만약 디스크와 메모리에 공간이 1GB만 남아있으면 메세지 발생을 중단시킵니다.
disk_free_limit.absolute = 1GB
# 디스크에 남은 여유 공간이 1.0배 정도면 메세지 발생을 중단시킨다는 의미입니다.
# 다른말로 하면 1.0으로 설정하면 여유 공간 한계를 두지않는다는 의미 입니다.
# 3.7.x 이전 버전은 0.5가 그런 이유 였지만 3.7.x 버전 이후 부터는 1.0이 비활성화를 의미합니다.
disk_free_limit.relative = 1.0
# 로깅설정 부분입니다.
log.dir = /var/log/rabbitmq # 로그 저장 경로
log.file = rabbitmq.log # 저장할 로그 이름
log.file.rotation = daily # 로그파일의 로테이션 (daily : 매일, weekly : 매주, size : 특정크기)
log.file.keep_count = 7 # 로테이션 된 로그파일의 최대 수량
# 클러스터 이름을 설정합니다.
cluster.name = rabbit@node1
# TCP 리스너의 기본 포트를 지정합니다.
listeners.tcp.default = 5672
management.listener.port = 15672 # 관리 인터페이스 접근 HTTP API 포트 지정
management.listener.ssl = false # 관리 인터페이스 SSL 사용여부
위의 설정을 반드시 따를 필요는 없고 용도에 맞게 설정하면 됩니다.
2. Dockerfile 작성예시
# 관리형 이미지를 설정합니다. 여기서는 RabbitMQ 이미지를 선택했습니다.
FROM rabbitmq:4-management
# rabbitmq.conf에서 구성한 RabbitMQ 설정 파일을 복사합니다.
COPY ./conf/rabbitmq.conf /etc/rabbitmq
# RabbitMQ 플러그인을 활성화합니다.
RUN rabbitmq-plugins enable --offline rabbitmq_management
# or 플러그인 추가 가능
# RUN rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_federation_management rabbitmq_stomp
# RabbitMQ 관리자 계정, 비밀번호를 지정합니다.
ENV RABBITMQ_DEFAULT_USER dev
ENV RABBITMQ_DEFAULT_PASS dev1234
# 컨테이너가 시작될 때 실행될 명령을 설정합니다.
CMD ["rabbitmq-server"]
3. Docker image 빌드
docker build -t rabbitmq-test .
명령어를 실행하면 rabbitmq-test이름의 Docker 이미지가 생성되는 것을 확인할 수 있습니다.

4. Docker 컨테이너 생성 및 실행
docker run -d --name rabbitmq-dev-test -p 5672:5672 -p 15672:15672 rabbitmq-test
명령어를 실행하면 다음과 같이 컨테이너가 생성되는 것을 확인할 수 있습니다.

컨테이너가 올라갔으면 RabbitMQ 관리 페이지에 접속이 가능해집니다.
만약 본인 Local PC가 아니라 AWS EC2로 접근했으면 해당사항을 주의해야 합니다.
- EC2 보안그룹에서 15672 포트를 인바운드 규칙추가
- 접속할 때에는 해당 서버주소 뒤에 포트 붙여서 접속하기
| localhost | AWS EC2 |
|---|---|
| localhost:15672 | <EC2 서버 포트>:15672 |
주의사항을 지켰다면 RabbitMQ 관리 페이지에 접속합니다.

이렇게 위와 같은 페이지가 로딩되었고 Dockerfile에 작성한 내용도 같으면 dev/dev1234 계정으로 로그인합니다.

접속하면 다음과 같은 페이지를 확인할 수 있겠습니다.
지난 글에서도 이야기했지만 처음 배운 기술이다 보니 익숙하지 않습니다. 하지만 이렇게 실제로 페이지를 구동시켜 보니 점점 익숙해지는 것 같은 기분이 듭니다, 다음 게시글에는 RabbitMQ 관리 페이지에서 메시지를 보내보는 실습을 진행해 보겠습니다.
https://adjh54.tistory.com/496#1.%20Dockerfile%20%EC%88%98%ED%96%89%EA%B3%BC%EC%A0%95-1-2