[Docker] Docker Compose로 RabbitMQ, Redis 함께 구동하기

아무튼 간에·2022년 6월 24일
0

개발환경
OS: Windows 11


* [Docker]RabbitMQ, Redis 설치, Docker Compose 실습에서 이어지는 글입니다.

1. 하나의 docker compose로 RabbitMQ, Redis 서비스 구동하기

-> RabbitMQ를 먼저 구동시켜보고 성공 시 Redis를 추가해서 구동시켜볼 예정

1. RabbitMQ 도커 컴포즈로 띄워보기.

C:\Users\letsj\docker-compose.yml 실행 (실행하려는 컨테이너들이 있는 경로)
→ 오류남…

오류내용

ERROR: for compose-training  Cannot start service compose-training: driver failed programming external connectivity on endpoint letsj_compose-training_1 (dee57ae3d957030415cdf2b5a776d99ac7f4e28948516f226b519eb437433c4b): Bind for 0.0.0.0:15672 failed: **port is already allocated**
ERROR: Encountered errors while bringing up the project.
  • port is already allocated: 15672 포트가 이미 할당되었다…? 흠…

    → yml의 port를 지우고 실행시켜 봄.

telnet으로 접속 확인

→ 성공한 것 같이 보이지만 웹 접속이 안됨..

아무래도 기존에 생성해놓은 rabbitmq:management의 포트와 겹쳐서 안되는 것 같음.
일단 기존 컨테이너를 완전히 종료시키고, yml에도 다시 포트를 명시하고 실행시켜봄.

version: "3"
services:
  compose-training:
    image: rabbitmq:management
    ports:
      - 5672:5672
      - 15672:15672
      - 25672:25672
  1. 모든 컨테이너 종료 후 확인

  2. 다시 실행

  3. 확인

드디어 성공!!~!!

2. 도커 컴포즈에 Redis 추가하여 띄워보기

  1. yml 파일에 서비스 추가 및 수정

    • 컨테이너 구분을 위해 앞서 지정한 컨테이너명을 수정
    version: "3"
    services:
        compose-rmq:
            image: rabbitmq:management
            ports:
              - 5672:5672
              - 15672:15672
              - 25672:25672
    
        compose-redis:
          image: redis
          command: -it --network redis-net --rm redis:latest redis-cli -h redis
          container_name: redis
          hostname: redis
          labels:
            - "name=redis"
            - "mode=standalone"
          ports:
            - 6379:6379

    → rabbitmq는 compose-rmq로, redis는 compose-redis로.
    command: 기본 예제 실습의 커맨드를 그대로 씀.
    labels: 이미지 구성이나 라이센스 기록, 컨테이너, 볼륨 및 네트워크간의 관계에 주석을 달거나 할때에 사용.
    * 참고: https://basketdeveloper.tistory.com/85

  2. 컨테이너 중지
    docker container stop [container id]

  3. yml 실행
    → 오류남

    WARNING: Found orphan containers (letsj_compose-training_1) for this project.
    → 기존에 저장된 yml 내용을 찾을 수 없음.

    for redis Cannot create container for service compose-redis: Conflict. The container name "/redis" is already in use by container
    → 컨테이너명 충돌.
    → yml의 container_name을 redis에서 redis2로 수정해봄

    compose-redis:
          image: redis
          command: -it --network redis-net --rm redis:latest redis-cli -h redis
          container_name: redis2
          hostname: redis
          labels:
            - "name=redis"
            - "mode=standalone"
          ports:
            - 6379:6379
    1. 다시 실행
      docker-compose up --remove-orphans

      • —remove-orphans: 정의되지 않은 서비스에 대한 컨테이너 제거

      → orphan 경고 사라짐.
      → redis2 -it 옵션 오류.
      → 해당 옵션 제거 후 재실행

      1. 컴포즈 종료
        docker-compose down

      2. 재실행

        엥?
        재실행

        이번엔 network “redis-net” 이 잘못됐다고 함.
        → 옵션 다 지우고 재실행해봄

        compose-redis:
              image: redis
              ports:
                - 6379:6379

        되긴 됨..

cli 접속
docker exec -it ***letsj_compose-redis_1*** redis-cli
컨테이너 명은 docker container ps -a로 조회해보거나…
애초에 yml 파일에서 container_name을 지정해주면 될듯

정상접속 확인 완.

휴.. 힘들었다

profile
armton garnet

0개의 댓글