Docker 이미지 생성 및 배포 과정

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

이 챕터에서는 모든 마이크로서비스와 Config 서버의 Docker 이미지를 생성하고 이를 Docker Hub에 배포하는 과정을 다룹니다. 각 과정별로 상세히 들어가 보겠습니다.

1. Docker 이미지 생성

각 마이크로서비스와 Config 서버의 Docker 이미지를 생성하기 위해 Jib 플러그인을 사용합니다. Jib는 Maven 또는 Gradle 프로젝트에서 컨테이너 이미지를 쉽게 빌드할 수 있도록 도와주는 도구입니다.

1.1. Accounts 마이크로서비스의 Docker 이미지 생성:

  • accounts 마이크로서비스의 pom.xml 파일이 위치한 디렉터리에서 터미널을 열고 다음 명령어를 실행합니다.
  • 명령어: mvn compile jib:dockerBuild
  • 이 명령어는 accounts 마이크로서비스의 Docker 이미지를 생성하며, 태그는 S6으로 지정됩니다.

1.2. Cards 마이크로서비스의 Docker 이미지 생성:

  • cards 마이크로서비스의 pom.xml 파일이 위치한 디렉터리에서 터미널을 열고 동일한 명령어를 실행합니다.
  • 명령어: mvn compile jib:dockerBuild
  • 이 명령어는 cards 마이크로서비스의 Docker 이미지를 생성하며, 태그는 S6으로 지정됩니다.

1.3. Loans 마이크로서비스의 Docker 이미지 생성:

  • loans 마이크로서비스의 pom.xml 파일이 위치한 디렉터리에서 동일한 명령어를 실행합니다.
  • 명령어: mvn compile jib:dockerBuild
  • 이 명령어는 loans 마이크로서비스의 Docker 이미지를 생성하며, 태그는 S6으로 지정됩니다.

1.4. Config 서버의 Docker 이미지 생성:

  • Config 서버는 처음으로 Docker 이미지를 생성하므로, 먼저 pom.xml 파일에 Jib 플러그인을 추가합니다.
  • 기존 마이크로서비스에서 사용된 Jib 플러그인 설정을 복사하여 Config 서버의 pom.xml에 추가합니다.
  • 그 후, Config 서버의 pom.xml 파일이 위치한 디렉터리에서 동일한 명령어를 실행합니다.
  • 명령어: mvn compile jib:dockerBuild
  • 이 명령어는 Config 서버의 Docker 이미지를 생성하며, 태그는 S6으로 지정됩니다.

2. Docker 이미지 확인 및 정리

2.1. 생성된 Docker 이미지 확인:

  • Docker CLI에서 docker images 명령어를 실행하여 생성된 이미지를 확인할 수 있습니다.
  • Docker Desktop을 사용하여 Docker Dashboard에서도 생성된 이미지를 확인할 수 있습니다.

2.2. 불필요한 Docker 이미지 제거:

  • Docker Dashboard에서 불필요한 이미지를 선택하고 삭제하여 로컬 시스템의 저장 공간을 확보합니다.
  • 예를 들어, 이전 섹션(S4)에서 사용된 Docker 이미지를 삭제합니다.

3. Docker Hub에 이미지 푸시

3.1. Docker Hub에 이미지 푸시:

  • 생성된 Docker 이미지를 Docker Hub에 푸시하여 원격 저장소에 저장합니다. 이를 통해 Docker Compose가 이미지를 로컬에서 찾지 못할 경우 원격 저장소에서 자동으로 가져올 수 있습니다.
  • Docker Hub에 이미지를 푸시하기 위해 다음 명령어를 사용합니다.
  • 명령어: docker image push docker.io/eazybytes/accounts:S6
  • 이 명령어는 accounts 마이크로서비스의 Docker 이미지를 Docker Hub에 푸시합니다.
  • 동일한 방법으로 loans, cards, config-server 이미지를 차례로 푸시합니다.

3.2. Docker Hub에서 푸시된 이미지 확인:

  • Docker Hub 웹사이트에 접속하여 해당 Docker 이미지를 확인합니다.
  • 각 이미지에 대해 S6 태그가 올바르게 적용되었는지 확인합니다.

4. 최종 결과

  • 모든 마이크로서비스와 Config 서버의 Docker 이미지를 성공적으로 생성하고, Docker Hub에 푸시하였습니다.
  • 다음 단계에서는 Docker Compose 파일을 사용하여 생성된 이미지를 기반으로 마이크로서비스들을 실행하고, 설정이 올바르게 적용되었는지 테스트합니다.

이와 같은 과정을 통해 Docker 이미지를 생성하고, 원격 저장소에 저장하여 Docker Compose로 쉽게 관리하고 배포할 수 있습니다.

Docker Compose를 사용한 컨테이너 실행 및 설정 테스트

이제 Docker Compose 파일을 사용하여 모든 컨테이너를 실행하고, 설정 변경이 Docker 환경에서도 정상적으로 작동하는지 확인하는 과정을 자세히 설명하겠습니다.

1. 사전 준비

  • Docker Compose 명령을 실행하기 전에, 현재 실행 중인 모든 Docker 컨테이너를 중지하고 삭제해야 합니다.
  • Docker Desktop을 열고 Containers 탭에서 실행 중이거나 중지된 컨테이너가 없는지 확인합니다. 만약 있다면 이를 삭제합니다. 다섯 개의 컨테이너(예: RabbitMQ, Config 서버, Accounts, Loans, Cards)를 실행하기 위해 충분한 공간과 메모리가 필요합니다.

2. Docker Compose 파일 실행

  • 터미널을 열고 Docker Compose 파일이 위치한 디렉토리로 이동합니다. 이 강의에서는 기본 설정 파일이 있는 default 폴더로 이동합니다.
  • Docker Compose 파일을 사용하여 컨테이너를 실행하기 위해 다음 명령어를 실행합니다:
  • 명령어: docker-compose up -d
  • 이 명령어를 실행하면 RabbitMQ 서비스가 먼저 시작되고, 그 후 Config 서버가 시작됩니다. Config 서버가 시작된 후에 Accounts, Loans, Cards 관련 컨테이너들이 시작됩니다.
  • Docker 컨테이너가 모두 시작될 때까지 기다립니다.

3. 컨테이너 상태 확인

  • 새로운 터미널을 열어 다음 명령어를 실행하여 실행 중인 컨테이너의 상태를 확인합니다:
  • 명령어: docker ps
  • 이 명령어는 현재 실행 중인 모든 컨테이너를 표시합니다.
  • RabbitMQ와 Config 서버의 상태가 healthy로 표시되어야 하며, Accounts, Loans, Cards 컨테이너는 상태 정보가 표시되지 않을 수 있습니다. 이는 이들 컨테이너에 대해 건강 상태를 체크하는 명령어를 제공하지 않았기 때문입니다.

4. Postman을 사용한 테스트

  • Postman을 열고 각 마이크로서비스의 API를 호출하여 정상적으로 동작하는지 확인합니다.

  • 예를 들어, Accounts 마이크로서비스의 /api/build-info 엔드포인트를 호출하여 3.0 버전 정보가 반환되는지 확인합니다. 이는 기본 프로파일이 활성화되어 있음을 의미합니다.

  • 또한, /api/contact-info 엔드포인트를 호출하여 기본 프로파일에서 제공하는 설정 정보가 반환되는지 확인합니다.

  • 필요에 따라 Loans 및 Cards 마이크로서비스에 대해서도 동일한 테스트를 수행합니다.

5. 자동 리프레시 기능 테스트

  • 설정 변경이 자동으로 반영되는지 확인하기 위해 GitHub Webhook을 재설정합니다.
  • 이전 세션이 종료되었기 때문에 새로운 Webhook 세션을 생성합니다.
  • Hookdeck.com 웹사이트를 열고 Test Webhook을 클릭하여 새 세션을 생성합니다.
  • 터미널에서 hookdeck listen 명령어를 실행하여 Webhook을 청취하도록 설정합니다.
  • 새 Webhook URL을 복사하여 GitHub 저장소 설정의 Webhook URL로 업데이트합니다.
  • Webhook이 설정된 후, GitHub 저장소에서 accounts.yml 파일의 설정을 변경합니다. 예를 들어, docker 값을 local로 변경하고 커밋합니다.
  • 터미널에서 Config 서버 로그를 확인하여 Webhook이 정상적으로 작동했는지 확인합니다. 성공적으로 작동했다면 200 상태 코드를 확인할 수 있습니다.

6. 문제 해결 및 설정 수정

  • Config 서버 로그에서 RabbitMQ 연결 오류가 발생했는지 확인합니다. 만약 Config 서버가 localhost를 사용하여 RabbitMQ에 연결하려고 시도하면 실패할 수 있습니다.
  • 이 문제를 해결하기 위해, Docker Compose 파일에서 모든 컨테이너가 RabbitMQ에 연결할 수 있도록 spring.rabbitmq.host 설정을 localhost 대신 rabbit 서비스 이름으로 설정합니다.
  • 설정을 수정한 후 docker-compose down 명령어를 사용하여 모든 컨테이너를 중지하고 삭제한 뒤, docker-compose up -d 명령어로 다시 컨테이너를 실행합니다.

7. 결과 확인

  • Postman에서 /api/contact-info 엔드포인트를 다시 호출하여 변경된 설정이 자동으로 반영되었는지 확인합니다.
  • 설정 변경이 자동으로 반영되었다면, 이전에 설정한 docker 값이 local 값으로 변경된 것을 확인할 수 있습니다.
  • 이로써 Docker Compose 설정이 기본 프로파일에서도 정상적으로 작동함을 확인할 수 있습니다.

이 과정을 통해 Docker Compose를 사용하여 컨테이너화된 마이크로서비스의 설정 변경이 Docker 환경에서 자동으로 반영되는지 확인할 수 있습니다.

profile
무슨 생각하며 사니

0개의 댓글