Docker Compose 파일 최적화

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

이 챕터에서는 Docker Compose 파일을 최적화하여 중복된 내용을 제거하고, 공통 설정을 별도의 파일로 분리하는 방법에 대해 다룹니다. 다음은 각 과정별로 상세히 정리한 내용입니다.

1. 공통 설정 파일 생성 (common-config.yml)

  • Docker Compose 파일의 최적화를 위해 공통 설정을 별도의 Yaml 파일로 분리합니다.

  • 기본 Docker Compose 파일에서 중복되는 네트워크 설정, 환경 변수, 배포 설정 등을 공통 설정 파일로 이동합니다.

    공통 설정 파일 생성:

  • common-config.yml 파일을 생성하고, 그 안에 공통으로 사용할 설정을 정의합니다.

    코드 예시:

    services:
    network-deploy-service:
     networks:
       - eazybank
    
    microservice-base-config:
     extends:
       service: network-deploy-service
     deploy:
       resources:
         limits:
           memory: 700m
     environment:
       SPRING_RABBITMQ_HOST: "rabbit"
    
    microservice-configserver-config:
     extends:
       service: microservice-base-config
     environment:
       SPRING_PROFILES_ACTIVE: default
       SPRING_CONFIG_IMPORT: configserver:http://configserver:8071/

    서비스별 설명:

  • network-deploy-service: 네트워크 관련 설정을 포함하고 있습니다. 모든 서비스에서 공통으로 사용할 네트워크 설정을 정의합니다.

  • micro-service-base-config: network-deploy-service를 확장하고 배포 설정과 환경 변수를 추가로 포함합니다.

  • micro-service-config-server-config: micro-service-base-config를 확장하고, 추가로 Config Server에 대한 의존성을 정의합니다.

2. 기존 Docker Compose 파일에서 중복된 설정 제거

  • 기존 docker-compose.yml 파일에서 반복적으로 사용되는 네트워크, 배포, 환경 변수 설정 등을 제거합니다.

  • 제거된 설정은 공통 설정 파일(common-config.yml)로 이동되며, 각 서비스는 필요한 공통 설정을 확장하여 사용합니다.

    설정 예시:

  • RabbitMQ 서비스:

    • RabbitMQ 서비스는 네트워크 설정만 공통 설정에서 확장합니다.

    코드 예시:

    rabbitmq:
      image: "rabbitmq:management"
      container_name: rabbitmq
      hostname: rabbitmq
      ports:
        - "5672:5672"
        - "15672:15672"
      extends:
        file: common-config.yml
        service: network-deploy-service
      healthcheck:
        test: ["CMD-SHELL", "rabbitmq-diagnostics -q ping"]
        interval: 10s
        timeout: 5s
        retries: 10
        start_period: 10s
  • Config Server 서비스:

    • Config Servermicro-service-base-config를 확장하여 네트워크 설정과 배포 설정을 가져옵니다.

    코드 예시:

    config-server:
      image: eazybytes/configserver:S6
      container_name: configserver-ms
      ports:
        - "8071:8071"
      extends:
        file: common-config.yml
        service: micro-service-base-config
      healthcheck:
        test: ["CMD-SHELL", "curl -f http://localhost:8071/actuator/health/readiness | grep 'UP'"]
        interval: 10s
        timeout: 5s
        retries: 10
        start_period: 10s
  • Accounts, Loans, Cards 서비스:

    • 이들 서비스는 micro-service-config-server-config를 확장하여 네트워크, 배포 설정, 환경 변수 설정, Config Server 의존성을 모두 가져옵니다.

    코드 예시:

    accounts:
      image: eazybytes/accounts:S6
      container_name: accounts-ms
      ports:
        - "8080:8080"
      extends:
        file: common-config.yml
        service: micro-service-config-server-config
    
    loans:
      image: eazybytes/loans:S6
      container_name: loans-ms
      ports:
        - "8090:8090"
      extends:
        file: common-config.yml
        service: micro-service-config-server-config
    
    cards:
      image: eazybytes/cards:S6
      container_name: cards-ms
      ports:
        - "9000:9000"
      extends:
        file: common-config.yml
        service: micro-service-config-server-config

3. 공통 설정을 사용한 최적화

  • 공통 설정 파일을 사용하여 Docker Compose 파일의 반복되는 설정을 줄이고, 관리의 편리성을 높입니다.
  • 모든 서비스는 필요에 따라 공통 설정을 확장하여 재사용하고, 필요한 경우 개별 설정을 추가로 정의할 수 있습니다.
  • 향후 네트워크 이름 변경, 메모리 제한 조정 등 설정을 변경할 때, 공통 설정 파일에서 한 번의 변경으로 모든 서비스에 반영할 수 있습니다.

4. 최종 Docker Compose 파일

  • 중복된 설정을 제거한 후 최종적으로 간결하고 관리하기 쉬운 Docker Compose 파일을 생성합니다.

  • 각 서비스는 필요한 공통 설정을 common-config.yml 파일에서 확장하여 사용합니다.

    최종 Docker Compose 파일 예시:

    version: '3.7'
    
    services:
      rabbitmq:
        image: "rabbitmq:management"
        container_name: rabbitmq
        hostname: rabbitmq
        ports:
          - "5672:5672"
          - "15672:15672"
        extends:
          file: common-config.yml
          service: network-deploy-service
        healthcheck:
          test: ["CMD-SHELL", "rabbitmq-diagnostics -q ping"]
          interval: 10s
          timeout: 5s
          retries: 10
          start_period: 10s
    
      config-server:
        image: eazybytes/configserver:S6
        container_name: configserver-ms
        ports:
          - "8071:8071"
        extends:
          file: common-config.yml
          service: micro-service-base-config
        healthcheck:
          test: ["CMD-SHELL", "curl -f http://localhost:8071/actuator/health/readiness | grep 'UP'"]
          interval: 10s
          timeout: 5s
          retries: 10
          start_period: 10s
    
      accounts:
        image: eazybytes/accounts:S6
        container_name: accounts-ms
        ports:
          - "8080:8080"
        extends:
          file: common-config.yml
          service: micro-service-config-server-config
    
      loans:
        image: eazybytes/loans:S6
        container_name: loans-ms
        ports:
          - "8090:8090"
        extends:
          file: common-config.yml
          service: micro-service-config-server-config
    
      cards:
        image: eazybytes/cards:S6
        container_name: cards-ms
        ports:
          - "9000:9000"
        extends:
          file: common-config.yml
          service: micro-service-config-server-config

다음 단계

  • Docker Compose 파일 최적화가 완료되었으므로, 다음 단계로 Docker 이미지를 생성하고, Docker Compose를 사용해 모든 마이크로서비스를 실행하여 설정이 올바르게 작동하는지 테스트합니다.

이와 같은 방식으로 Docker Compose 파일을 최적화하여 중복된 내용을 줄이고, 유지 관리의 편리성을 높일 수 있습니다.

profile
무슨 생각하며 사니

0개의 댓글