이번 챕터에서는 Eureka 서버와 각 마이크로서비스(계정, 대출, 카드) 및 Config 서버에 대한 Docker 이미지를 생성하고, 이를 Docker Compose 파일에 반영하는 과정을 다룹니다.
Docker 이미지를 생성하기 전에 Docker 서버가 정상적으로 실행되고 있는지 확인합니다. 그 후, 각 마이크로서비스와 Eureka 서버의 pom.xml
파일에 Jib 플러그인을 추가합니다.
Eureka 서버 프로젝트의 pom.xml
에 Jib 플러그인 추가:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.1.4</version>
<configuration>
<to>
<image>docker.io/your_dockerhub_username/eurekaserver:S8</image>
</to>
</configuration>
</plugin>
Config 서버, 계정, 대출, 카드 마이크로서비스에도 동일하게 pom.xml
에 Jib 플러그인을 추가하고 태그 정보를 S8
로 변경합니다.
pom.xml
수정이 완료된 후, 각 서비스에 대해 Docker 이미지를 생성합니다. 이를 위해 터미널에서 각 마이크로서비스 디렉토리로 이동하여 다음 명령어를 실행합니다:
mvn compile jib:dockerBuild
이 명령어를 통해 다음과 같은 Docker 이미지가 생성됩니다:
configserver:S8
eurekaserver:S8
accountservice:S8
loanservice:S8
cardservice:S8
이전 섹션(Section 7)과 관련된 Docker 이미지를 삭제하여 로컬 시스템의 공간을 확보합니다. Docker Dashboard에서 S7
태그가 붙은 이미지를 삭제합니다.
그 후, 생성된 S8
Docker 이미지를 Docker Hub에 업로드합니다. 업로드 명령어는 다음과 같습니다:
docker image push docker.io/your_dockerhub_username/configserver:S8
docker image push docker.io/your_dockerhub_username/eurekaserver:S8
docker image push docker.io/your_dockerhub_username/accountservice:S8
docker image push docker.io/your_dockerhub_username/loanservice:S8
docker image push docker.io/your_dockerhub_username/cardservice:S8
업로드가 완료되면 Docker Hub에서 해당 이미지를 확인할 수 있습니다.
Docker 이미지가 성공적으로 업로드된 후, Docker Compose 파일을 업데이트하여 모든 서비스를 한 번에 시작할 수 있도록 합니다.
version: '3'
services:
configserver:
image: your_dockerhub_username/configserver:S8
ports:
- "8071:8071"
eurekaserver:
image: your_dockerhub_username/eurekaserver:S8
ports:
- "8070:8070"
depends_on:
- configserver
accountservice:
image: your_dockerhub_username/accountservice:S8
ports:
- "8080:8080"
depends_on:
- eurekaserver
loanservice:
image: your_dockerhub_username/loanservice:S8
ports:
- "8081:8081"
depends_on:
- eurekaserver
cardservice:
image: your_dockerhub_username/cardservice:S8
ports:
- "8082:8082"
depends_on:
- eurekaserver
이렇게 설정된 Docker Compose 파일을 통해 docker-compose up
명령어를 실행하면 모든 서비스가 Docker 환경에서 자동으로 시작됩니다.
Docker Compose 파일을 업데이트하여 Eureka 서버 및 각 마이크로서비스가 Docker 환경에서 제대로 동작하는지 테스트해보겠습니다.
Docker Compose 파일을 열어 기존의 RabbitMQ 관련 서비스를 제거하고, Eureka 서버를 추가합니다.
RabbitMQ 서비스 삭제:
Docker Compose 파일에서 RabbitMQ 관련 서비스를 제거합니다. 또한, depends_on
항목에서 RabbitMQ에 대한 의존성을 삭제합니다.
이미지 태그 업데이트:
각 서비스에 사용된 Docker 이미지 태그를 S6
에서 S8
로 업데이트합니다.
Eureka 서버 추가:
eurekaserver:
image: eazybytes/eurekaserver:s8
container_name: eurekaserver-ms
ports:
- "8070:8070"
depends_on:
- configserver
environment:
SPRING_APPLICATION_NAME: eurekaserver
healthcheck:
test: ["CMD", "curl", "-f", "http://eurekaserver:8070/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
extends:
file: common-config.yml
service: microservice-config
공통 구성 업데이트:
각 마이크로서비스가 Eureka 서버와 연결될 수 있도록 공통 설정 파일인 common-config.yml
을 업데이트합니다.
environment:
SPRING_CONFIG_IMPORT: "configserver:http://configserver:8071/"
EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: "http://eurekaserver:8070/eureka/"
모든 마이크로서비스가 Eureka 서버에 의존하도록 depends_on
항목에 Eureka 서버를 추가합니다.
depends_on:
configserver:
condition: service_healthy
eurekaserver:
condition: service_healthy
업데이트된 Docker Compose 파일을 prod 및 QA 프로파일로 복사하여 동일한 구성을 적용합니다.
prod 및 QA 프로파일로 파일 복사:
docker-compose.yml
과 common-config.yml
파일을 prod
및 QA
폴더로 복사합니다.
prod 및 QA 환경에서의 활성화 프로파일 설정:
SPRING_PROFILES_ACTIVE
값을 default
에서 prod
및 QA
로 변경합니다.
이제 Docker Compose 파일이 준비되었으므로, Docker Compose 명령을 사용하여 모든 컨테이너를 시작할 수 있습니다.
docker-compose -f docker-compose.yml up --build
이 명령어를 통해 설정된 모든 서비스가 Docker 컨테이너로 시작됩니다.
Eureka 서버 및 각 마이크로서비스에 대한 Docker Compose 설정을 업데이트하고, 이를 통해 Docker 환경에서 Eureka 서버와 마이크로서비스 간의 서비스 등록 및 탐색을 테스트하는 방법을 배웠습니다. 이렇게 설정된 Docker Compose 파일을 통해 쉽게 환경을 배포하고, 각 마이크로서비스 간의 의존성을 관리할 수 있습니다.
단일 Docker Compose 명령을 사용하여 모든 마이크로서비스, Config 서버 및 Eureka 서버를 시작하고 설정이 올바르게 작동하는지 확인합니다.
Docker Compose 파일을 실행하기 전에 다음을 확인해야 합니다:
Section8
폴더 내 default
프로필에 있는 Docker Compose 파일을 사용합니다.docker-compose -f docker-compose.yml down
모든 실행 중인 컨테이너를 중지 및 제거한 후, 다음 명령을 실행하여 컨테이너를 시작합니다:
docker-compose -f docker-compose.yml up -d
Eureka 서버가 Config 서버와 연결되지 않아 시작에 실패할 수 있습니다. 이 문제를 해결하기 위해 다음을 확인해야 합니다:
environment
속성 아래에 올바르게 설정되어 있어야 합니다.environment
아래에 자식 요소로 지정되어야 합니다.예를 들어:
eurekaserver:
image: eazybytes/eurekaserver:s8
container_name: eurekaserver-ms
ports:
- "8070:8070"
depends_on:
configserver:
condition: service_healthy
environment:
SPRING_APPLICATION_NAME: eurekaserver
SPRING_PROFILES_ACTIVE: default
SPRING_CONFIG_IMPORT: "configserver:http://configserver:8071/"
healthcheck:
test: ["CMD", "curl", "-f", "http://eurekaserver:8070/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
모든 설정이 올바르게 적용되면, Eureka 서버와 다른 마이크로서비스가 성공적으로 시작되고 등록됩니다.
http://localhost:8070
으로 이동하여 모든 마이크로서비스가 Eureka 서버에 등록되었는지 확인합니다.fetchCustomerDetails
API를 테스트하여 Eureka 서버를 통한 서비스 검색이 올바르게 작동하는지 확인할 수 있습니다.prod
및 QA
프로파일로 복사하고, 프로필 이름을 각각 prod
및 QA
로 변경합니다.docker-compose -f docker-compose.yml down
모든 컨테이너를 종료한 후 Docker Compose 파일을 복사합니다:
default
프로파일의 Docker Compose 파일과 공통 구성 파일(common-config.yml
)을 각각 prod
및 QA
폴더에 복사합니다.SPRING_PROFILES_ACTIVE
값을 default
에서 prod
또는 QA
로 변경합니다.이제 모든 프로필에서 Docker Compose 명령을 실행하여 설정된 서비스를 시작할 수 있습니다.
docker-compose -f docker-compose.yml up -d
이로써 모든 설정이 완료되었으며, 각 프로필 환경에서 Eureka 서버와 마이크로서비스가 올바르게 작동하는지 확인할 수 있습니다.