반응형
해당 글에서는 Dockefile을 이용하여 RabbitMQ를 구축하는 환경 구성과 실행방법에 대해 알아봅니다.
💡 [참고] RabbitMQ에 대해 궁금하시면 아래의 글이 도움이 됩니다.
분류 | 링크 |
Spring Boot AMQP RabbitMQ -1 : 구조 및 종류 이해하기 | https://adjh54.tistory.com/284 |
Spring Boot AMQP RabbitMQ -2 : 로컬 환경 구성하기 | https://adjh54.tistory.com/285 |
Spring Boot AMQP RabbitMQ -3 : Java 환경 구축 및 간단 예시 | https://adjh54.tistory.com/292 |
Spring Boot AMQP RabbitMQ -4 : Exchange 종류 별 이해 및 사용예시 | https://adjh54.tistory.com/497 |
Spring Boot AMQP RabbitMQ -5 : TTL 및 데드 레터링 사용예시 | https://adjh54.tistory.com/501 |
Spring Boot AMQP RabbitMQ -6 : 메시지 큐 종류, 큐 우선순위 | https://adjh54.tistory.com/518 |
Docker : Docker를 이용하여 RabbitMQ 구축하기 | https://adjh54.tistory.com/496 |
Docker : Docker Compose를 이용하여 RabbitMQ Node Cluster 구축하기 | https://adjh54.tistory.com/517 |
API Document : QueueBuilder API Document | https://adjh54.tistory.com/505 |
API Document : ExchangeBuilder API Document | https://adjh54.tistory.com/506 |
API Document : MessageProperties, MessagePropertiesBuilder, MessageBuilderSupport | https://adjh54.tistory.com/508 |
Spring Boot AMQP RabbitMQ Github : Event Producer | https://github.com/adjh54ir/blog-codes/tree/main/spring-boot-rabbitmq |
Spring Boot AMQP RabbitMQ Github : Event Consumer | https://github.com/adjh54ir/blog-codes/tree/main/spring-boot-rabbitmq-consumer |
1) RabbitMQ
💡 RabbitMQ
- 오픈 소스 기반 메시지 브로커 소프트웨어로 분산 시스템에서 ‘메시지나 데이터’를 전달하기 위한 중간 매개체로 사용됩니다.
- AMQP(Advanced Message Queuing Protocol)를 기반으로 하며 다양한 프로그래밍 언어와 플랫폼에서 사용할 수 있습니다.
- 메시지 큐를 사용하여 메시지의 생산자와 소비자 사이에 '비동기적인 통신'함으로써 메시지는 큐에 저장되어 생산자와 소비자가 독립적으로 작동할 수 있습니다. 또한 RabbitMQ를 이용하여 메시지를 안전하게 전달하고 처리하는데 중점을 둡니다.
💡 [참고] RabbitMQ에 대해 궁금하시면 아래의 글이 도움이 됩니다.
2) Dockerfile
💡 도커 파일(Dockerfile)
- 도커 이미지를 만들고 빌드하기 위한 ‘텍스트 파일’을 의미합니다. 이는 컨테이너 이미지를 구성하는데 필요한 모든 단계와 명령을 정의합니다.
1. Dockerfile 수행과정
💡 Dockerfile 수행과정
1. Dockerfile
- 도커파일에서 일련의 명령을 작성하여 이미지를 빌드하는 방법을 지정합니다. 또한 이미지를 지정하고 필요한 패키지를 설치하고 파일을 복사하여 명령을 실행하는 등의 작업을 수행합니다.
2. Dockerfile → (Build) → Docker Image
- 도커 엔진이 도커 파일을 한 줄씩 읽어서 이미지를 빌드합니다 : Dockerfile Layer
3. Docker Image → (Run) → Docker Container
- 빌드된 이미지를 실행하여 도커 컨테이너를 구성합니다.
3) Docker Desktop
💡 Docker Desktop
- 해당 글에서는 Docker Desktop을 이용하여서 Dockefile을 생성하고 이미지를 생성하여 최종 컨테이너를 실행하는 환경으로 구성이 되어 있기에 아래와 같이 설치가 필요합니다.
4) RabbitMQ 환경 구성 : Docker 명령어로 구성
💡 RabbitMQ 환경 구성 : Docker 명령어로 구성
- Docker Desktop이 설치가 되었다는 가정하에 해당 환경 구성을 수행합니다.
1. 명령어로 구성하기
💡 명령어로 구성하기
- Dockerfile로 관리되는 것이 아닌, 명령어를 통해서 RabbitMQ의 컨테이너 이미지 다운로드하고 생성하며 컨테이너를 띄우는 과정을 구성합니다.
💡 명령어 설명
- docker를 생성하는데, rabbitmq:3.13 버전의 관리 버전을 받아옵니다. 또한 이름은 “rabbitmq”라는 형태로 컨테이너 이미지를 지정합니다.
- 5672 포트와 15672 포트를 연결하는데 5672 포트는 AMQP(Advanced Message Queuing Protocol) 클라이언트 연결을 위한 기본 포트이며 15672 포트는 RabbitMQ의 관리 플러그인을 위한 기본 포트입니다. 이를 통해 웹 브라우저에서 RabbitMQ의 관리 인터페이스를 접근할 수 있습니다.
1. docker -name rabbitmq : 생성되는 컨테이너 이름을 “rabbbitmq”로 지정합니다.
2. docker -p 5672:5672 -p 15672:15672 : 호스트와 컨테이너 사이에 네트워크 포트를 매핑합니다. 즉, 컨테이너의 5672와 15672 포트를 연결하는 의미입니다.
3. docker rabbitmq:3.13-management : 관리 기능이 포함된 Docker 이미지를 사용합니다.
# latest RabbitMQ 3.13
$ docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management
💡 [참고] Docker RabbitMQ 버전은 아래에서 확인이 가능합니다.
2. 수행 결과 확인 : Docker Desktop
💡 수행 결과 확인
- 아래와 같이 rabbitmq의 컨테이너 이미지가 생성되었습니다.
💡 수행 결과 확인
- 아래와 같이 rabbitmq의 컨테이너가 생성되었습니다.
3. 수행 결과 확인 : RabbitMQ Management
💡 수행 결과 확인 : RabbitMQ Management
- 아래와 같이 http://localhost:15672로 접근하여 관리형 페이지에 접근이 가능한 것을 확인하였습니다.
- 참고 : 초기 비밀번호 설정이 없었기에 사용자 이름과 비밀번호는 id : guest / pw: guest입니다.
💡 수행 결과 확인 : RabbitMQ Management
- 로그인이 완료되면 아래와 같이 관리 페이지가 출력됨을 확인할 수 있습니다.
5) RabbitMQ 환경 구성 : Dockerfile 파일을 이용한 경우
1. 패키지 구조
💡 패키지 구조
- Dockerfile 기반 RabbitMQ를 구축하기 위해 아래와 같은 패키지를 구성하였습니다.
2. config/rabbitmq.config
💡 config/rabbitmq.config
- RabbitMQ 서버의 설정을 담고 있습니다. 여기에는 메시지 브로커의 동작을 제어하는 설정이 포함될 수 있으며, 예를 들어 사용할 포트, 클러스터링 설정, 가상 호스트 설정 등이 있습니다.
- 아래 예시에서는 제일 기본적인 설정에 대해서만 적용하였습니다.
💡 rabbitmq.config 설정 예시
설정 정보 | 설명 |
loopback_users.guest | loopback 사용자를 비활성화합니다. false로 설정하면, loopback 연결을 통해 'guest' 사용자가 접속하는 것을 제한합니다. |
listeners.tcp.default | TCP 리스너의 기본 포트를 지정합니다. 포트 5672는 RabbitMQ의 기본 클라이언트 연결 포트입니다. |
management.listener.port | 관리 플러그인의 HTTP API를 위한 포트를 지정합니다. 포트 15672는 RabbitMQ 관리 플러그인의 기본 포트입니다. |
management.listener.ssl | 관리 인터페이스에 SSL을 사용할지 여부를 설정합니다. false로 설정하면, 관리 인터페이스에 SSL이 적용되지 않습니다. |
loopback_users.guest = false
listeners.tcp.default = 5672
management.listener.port = 15672
management.listener.ssl = false
💡 [참고] RabbitMQ의 공식사이트의 설정 예시입니다. 위에 간단한 설정 외에 설정을 알고 싶으시면 아래의 링크를 참고하시면 도움이 됩니다.
3. Dockerfile
💡 Dockerfile
- 도커 이미지를 생성하기 위한 명세서라고 볼 수 있습니다. 이 파일에는 이미지를 생성하는 데 필요한 명령들이 순서대로 기록됩니다.
- 예를 들어, 어떤 베이스 이미지를 사용할지, 어떤 파일들을 이미지 안으로 복사할지, 어떤 명령을 실행할지 등이 포함됩니다.
- 이를 통해 RabbitMQ를 구동하는 데 필요한 모든 환경을 구성할 수 있습니다.
💡 Dockerfile 설정 예시
1. 관리형 이미지를 설정합니다. 여기서는 RabbitMQ 이미지를 선택했습니다.
2. rabbitmq.conf에서 구성한 RabbitMQ 설정 파일을 복사합니다.
3. RabbitMQ 플러그인을 활성화합니다.
4. RabbitMQ 관리자 계정, 비밀번호를 지정합니다.
5. 컨테이너가 시작될 때 실행될 명령을 설정합니다.
# 관리형 이미지를 설정합니다. 여기서는 RabbitMQ 이미지를 선택했습니다.
FROM rabbitmq:3.13-management
# rabbitmq.conf에서 구성한 RabbitMQ 설정 파일을 복사합니다.
COPY ./config/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 admin
ENV RABBITMQ_DEFAULT_PASS 1234
# 컨테이너가 시작될 때 실행될 명령을 설정합니다.
CMD ["rabbitmq-server"]
💡 [참고] 해당 구성사항 내용은 아래의 Repository를 통해 확인이 가능합니다.
4. Dockerfile 실행
4.1. Dockerfile의 이미지 빌드
# Dockerfile을 기반으로 docker Image 빌드
$ docker build -t rabbitmq .
💡 해당 명령어를 수행하여 Docker Image가 생성이 되었습니다.
4.2. Dockerfile의 컨테이너 생성 및 실행
$ docker run -d --name simple-rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq
💡 해당 명령어를 수행하여 Docker Image를 기반으로 Docker Container가 생성되었습니다.
5. 실행 결과 확인
💡 실행 결과 확인
- RabbitMQ Management로 구성된 http://localhost:15672 경로로 접근하여, 사전에 지정한 id : admin / pw: 1234로 접근합니다.
💡 수행 결과 확인 : RabbitMQ Management
- 로그인이 완료되면 아래와 같이 관리 페이지가 출력됨을 확인할 수 있습니다.
오늘도 감사합니다. 😀
반응형
'Docker > 환경설정 및 구성' 카테고리의 다른 글
[Docker] Docker Compose를 이용한 RabbitMQ 노드 클러스터링 구성하기 (0) | 2024.06.28 |
---|---|
[Docker] Dockerfile을 이용한 Redis 환경 구성 및 실행방법 (0) | 2024.03.16 |
[Docker] Dockerfile을 이용한 Spring Boot App 환경 구성 및 실행방법 (1) | 2024.02.05 |
[Docker] Dockerfile을 이용한 React App 배포 환경 구성 및 실행방법 (0) | 2024.02.03 |
[Docker] Dockerfile을 이용한 Vault 배포 환경 구성 및 실행방법 (0) | 2024.02.03 |