이 챕터에서는 Docker Compose 파일을 최적화하여 중복된 내용을 제거하고, 공통 설정을 별도의 파일로 분리하는 방법에 대해 다룹니다. 다음은 각 과정별로 상세히 정리한 내용입니다.
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에 대한 의존성을 정의합니다.
기존 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 Server
는 micro-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
중복된 설정을 제거한 후 최종적으로 간결하고 관리하기 쉬운 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 파일을 최적화하여 중복된 내용을 줄이고, 유지 관리의 편리성을 높일 수 있습니다.