Docker Compose 파일 업데이트 및 마이크로서비스와 MySQL 컨테이너 간의 연결 설정

날아올라돼지야·2024년 8월 27일
0

이 챕터에서는 마이크로서비스를 Docker Compose 환경에서 실행하고 MySQL 데이터베이스와의 연결을 설정하는 방법에 대해 다룹니다. 로컬 시스템에서 사용하던 데이터베이스 설정을 Docker Compose 환경에 맞게 수정하며, Docker Compose 파일을 업데이트하여 MySQL 컨테이너와 마이크로서비스 간의 통신을 설정합니다.

1. 기존 Docker 컨테이너 중지 및 삭제

  • Docker Compose 파일을 수정하기 전에, 현재 실행 중인 모든 마이크로서비스와 데이터베이스 컨테이너를 중지하고 삭제합니다.
  • Docker Desktop에서 실행 중인 컨테이너를 모두 삭제하여 클린한 환경을 만듭니다.

2. Docker 이미지 재생성

  • 이전 강의에서 H2 데이터베이스를 제거하고 MySQL로 전환한 후, 해당 변경 사항을 반영하여 마이크로서비스의 Docker 이미지를 재생성합니다.
  • 모든 마이크로서비스(accounts, cards, loans)와 config-serverpom.xml 파일에서 Docker 이미지 태그를 S6에서 S7로 변경합니다.
<configuration>
  <to>
    <image>eazybytes/${project.artifactId}:s7</image>
  </to>
</configuration>
  • 각각의 마이크로서비스에 대해 Maven을 사용해 새로운 Docker 이미지를 생성합니다:
    mvn compile jib:dockerBuild

3. Docker Compose 파일 업데이트

  • Docker-compose.yml 파일을 수정하여 각 마이크로서비스와 데이터베이스 간의 연결을 설정합니다.
  • 각 마이크로서비스의 데이터베이스 컨테이너를 정의하고, 마이크로서비스와 데이터베이스 간의 의존성을 설정합니다.

Accounts DB 서비스 설정

  • accountsDB라는 이름으로 MySQL 데이터베이스 컨테이너를 정의합니다:
    accountsDB:
      image: mysql
      container_name: accountsDB
      ports:
        - "3306:3306"
      healthcheck:
        test: ["CMD-SHELL", "mysqladmin ping -h localhost"]
        interval: 10s
        timeout: 10s
        retries: 10
        start_period: 10s
      environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: accountsDB
      extends:
        file: common-config.yml
        service: network-deploy-service
  • 이와 유사하게, loansDBcardsDB 서비스도 정의합니다.

마이크로서비스와 데이터베이스 간의 연결 설정

  • 각 마이크로서비스(accounts, loans, cards)에 대해 데이터베이스 URL, 사용자 이름, 비밀번호를 환경 변수로 설정합니다:
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://accountsDB:3306/accountsDB
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: root
  • 데이터베이스와 마이크로서비스 간의 의존성을 설정하여, 데이터베이스가 완전히 시작된 후에 마이크로서비스가 시작되도록 합니다:
    depends_on:
      accountsDB:
        condition: service_healthy

4. 중복 정보 제거 및 공통 설정으로 이동

  • common-config.yml 파일에 반복되는 설정을 이동시켜, Docker Compose 파일을 간소화합니다.
  • 예를 들어, image, healthcheck, MYSQL_ROOT_PASSWORD 등의 설정을 common-config.yml에 정의하고, 각 데이터베이스 서비스에서 이를 확장합니다:
    microservice-db-config:
      extends: network-deploy-service
      image: mysql
      healthcheck:
        test: ["CMD-SHELL", "mysqladmin ping -h localhost"]
        interval: 10s
        timeout: 10s
        retries: 10
        start_period: 10s
      environment:
        MYSQL_ROOT_PASSWORD: root

5. QA 및 Prod 환경용 Docker Compose 파일 업데이트

  • QA와 Prod 환경에 맞게 Docker Compose 파일을 수정합니다.
  • 필요한 경우, common-config.yml 파일을 업데이트하여 다른 환경에서 사용될 수 있는 설정을 추가합니다.

6. Docker Compose 파일 검증

  • 수정된 Docker Compose 파일을 사용하여 마이크로서비스 및 데이터베이스를 실행하고, 정상적으로 연결되는지 확인합니다.
  • Docker Compose 명령어를 사용하여 모든 컨테이너를 실행합니다:
    docker-compose up -d
  • 모든 컨테이너가 올바르게 시작되고, 데이터베이스와 마이크로서비스 간의 연결이 정상적으로 이루어졌는지 확인합니다.

이 과정을 통해, Docker Compose 환경에서 MySQL 데이터베이스와 마이크로서비스 간의 통신을 설정하고, 설정이 올바르게 작동하는지 검증할 수 있습니다. 이를 통해 로컬 개발 환경뿐만 아니라, Docker Compose 또는 Kubernetes와 같은 컨테이너화된 환경에서도 마이크로서비스를 원활하게 운영할 수 있습니다.

profile
무슨 생각하며 사니

0개의 댓글