Docker 이미지 생성 및 Docker Compose 설정 업데이트

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

이번 챕터에서는 Eureka 서버와 각 마이크로서비스(계정, 대출, 카드) 및 Config 서버에 대한 Docker 이미지를 생성하고, 이를 Docker Compose 파일에 반영하는 과정을 다룹니다.

1. Docker 서버 확인 및 Jib 플러그인 추가

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로 변경합니다.

2. Docker 이미지 생성

pom.xml 수정이 완료된 후, 각 서비스에 대해 Docker 이미지를 생성합니다. 이를 위해 터미널에서 각 마이크로서비스 디렉토리로 이동하여 다음 명령어를 실행합니다:

mvn compile jib:dockerBuild

이 명령어를 통해 다음과 같은 Docker 이미지가 생성됩니다:

  • configserver:S8
  • eurekaserver:S8
  • accountservice:S8
  • loanservice:S8
  • cardservice:S8

3. Docker 이미지 정리 및 업로드

이전 섹션(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에서 해당 이미지를 확인할 수 있습니다.

4. Docker Compose 파일 업데이트

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 파일 업데이트 및 테스트

Docker Compose 파일을 업데이트하여 Eureka 서버 및 각 마이크로서비스가 Docker 환경에서 제대로 동작하는지 테스트해보겠습니다.

1. Docker Compose 파일 수정

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

2. Docker Compose 파일 복사 및 수정

업데이트된 Docker Compose 파일을 prodQA 프로파일로 복사하여 동일한 구성을 적용합니다.

  • prodQA 프로파일로 파일 복사:
    docker-compose.ymlcommon-config.yml 파일을 prodQA 폴더로 복사합니다.

  • prodQA 환경에서의 활성화 프로파일 설정:
    SPRING_PROFILES_ACTIVE 값을 default에서 prodQA로 변경합니다.

3. Docker Compose 파일 적용 및 컨테이너 시작

이제 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 명령을 사용하여 모든 마이크로서비스, Config 서버 및 Eureka 서버를 시작하고 설정이 올바르게 작동하는지 확인합니다.

1. Docker Compose 실행

Docker Compose 파일을 실행하기 전에 다음을 확인해야 합니다:

  • Docker Compose 파일 위치: Section8 폴더 내 default 프로필에 있는 Docker Compose 파일을 사용합니다.
  • 기존 컨테이너 정리: 명령어를 실행하기 전에 다른 실행 중이거나 중지된 컨테이너가 없어야 합니다. 이를 통해 Docker가 충분한 메모리를 확보할 수 있습니다.
docker-compose -f docker-compose.yml down

모든 실행 중인 컨테이너를 중지 및 제거한 후, 다음 명령을 실행하여 컨테이너를 시작합니다:

docker-compose -f docker-compose.yml up -d

2. Eureka 서버 문제 해결

Eureka 서버가 Config 서버와 연결되지 않아 시작에 실패할 수 있습니다. 이 문제를 해결하기 위해 다음을 확인해야 합니다:

  • 환경 변수 위치 확인: 환경 변수가 environment 속성 아래에 올바르게 설정되어 있어야 합니다.
  • 잘못된 탭 또는 공백 확인: YAML 파일에서 잘못된 들여쓰기나 공백이 있을 경우 오류가 발생할 수 있습니다. 환경 변수는 항상 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

3. Eureka 서버 및 마이크로서비스 확인

모든 설정이 올바르게 적용되면, Eureka 서버와 다른 마이크로서비스가 성공적으로 시작되고 등록됩니다.

  • Eureka 대시보드 확인: 브라우저에서 http://localhost:8070으로 이동하여 모든 마이크로서비스가 Eureka 서버에 등록되었는지 확인합니다.
  • Postman으로 API 테스트: Postman을 사용하여 각 API가 제대로 작동하는지 확인합니다. 예를 들어, fetchCustomerDetails API를 테스트하여 Eureka 서버를 통한 서비스 검색이 올바르게 작동하는지 확인할 수 있습니다.

4. Docker Compose 파일 복사 및 최종 테스트

  • Docker Compose 파일 복사: 성공적인 테스트 후, 업데이트된 Docker Compose 파일을 prodQA 프로파일로 복사하고, 프로필 이름을 각각 prodQA로 변경합니다.
docker-compose -f docker-compose.yml down

모든 컨테이너를 종료한 후 Docker Compose 파일을 복사합니다:

  • default 프로파일의 Docker Compose 파일과 공통 구성 파일(common-config.yml)을 각각 prodQA 폴더에 복사합니다.
  • 각 프로필에 대해 SPRING_PROFILES_ACTIVE 값을 default에서 prod 또는 QA로 변경합니다.

이제 모든 프로필에서 Docker Compose 명령을 실행하여 설정된 서비스를 시작할 수 있습니다.

docker-compose -f docker-compose.yml up -d

이로써 모든 설정이 완료되었으며, 각 프로필 환경에서 Eureka 서버와 마이크로서비스가 올바르게 작동하는지 확인할 수 있습니다.

profile
무슨 생각하며 사니

0개의 댓글