쵼쥬
쵼쥬의 개발공부 TIL
쵼쥬
전체 방문자
오늘
어제
  • 분류 전체보기 (276)
    • 코딩테스트 (192)
      • [알고리즘] 알고리즘 정리 (7)
      • [백준] 코딩테스트 연습 (126)
      • [프로그래머스] 코딩테스트 연습 (59)
    • Spring (71)
      • [인프런] 스프링 핵심 원리- 기본편 (9)
      • [인프런] 스프링 MVC 1 (6)
      • [인프런] 스프링 MVC 2 (4)
      • [인프런] 실전! 스프링 부트와 JPA 활용1 (7)
      • [인프런] 실전! 스프링 부트와 JPA 활용2 (5)
      • [인프런] 실전! 스프링 데이터 JPA (7)
      • [인프런] 실전! Querydsl (7)
      • JWT (5)
      • [인프런] Spring Cloud (17)
      • [인프런] Spring Batch (4)
    • Java (6)
      • [Java8] 모던인자바액션 (4)
      • [부스트코스] 웹 백엔드 (2)
      • [패스트캠퍼스] JAVA STREAM (0)
    • CS (6)
      • 디자인 패턴과 프로그래밍 패터다임 (2)
      • 네트워크 (4)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 위클리 챌린지
  • 부스트코스
  • 백준
  • Spring Data JPA
  • spring
  • 백분
  • 비트마스킹
  • 구현
  • 프로그래머스
  • 타임리프
  • 인프런
  • querydsl
  • 자바
  • 알고리즘
  • jpa
  • 누적합
  • BFS
  • MVC
  • 스프링
  • 코딩테스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쵼쥬

쵼쥬의 개발공부 TIL

어플리케이션 배포 - Docker Container (1)
Spring/[인프런] Spring Cloud

어플리케이션 배포 - Docker Container (1)

2022. 7. 24. 22:20

Microservices 실행

  • Intellij IDEA
  • Exported JAR file
  • Docker Container

 

여기선 Docker + Local에 배포하겠다.

 

 

Docker network

Bridge network

  • 아무런 설정없이 사용하는 네트워크
  • 호스트와 별로로 가상의 네트워크를 만들고 가상의 네트워크에서 만든 컨테이너들을 배치해두고 사용하는 것

 

Host network

  • 네트워크를 호스트로 설정하면 호스트의 네트워크 환경 그대로 사용
  • 포트 포워딩 없이 내부 어플리케이션 사용

 

None network

  • 네트워크를 사용하지 않는 것

 

 

 

docker 네트워크 확인

 

docker 네트워크 생성

gateway와 subnet 마스크를 지정하지 않고 만들수 있지만 그럴 경우 나중에 자동으로 container의 ip가 할당되게 하는 방식말고 직접 지정해서 container를 띄울 경우 오류가 발생할 수 있다. 가급적이면 ip를 수동으로 할당할 경우를 대비해서 gateway와 subnet 마스크를 지정하는 것을 추천한다.

 

네트워크 상세정보 확인

 

container는 guestOS 라고 생각하면 편하다. container는 ip를 이용해서 통신하는데 그래서 같은 네트워크에 존재하는 container는 container id, container 이름을 통해서 통신할 수 있다. 

아래있는 마이크로 서비스 모두 각각의 ip를 가지고 있는데 이때 ip 로 통신했을 경우 문제는 없다. 하지만 순차적으로 할당되기 때문에 어떤 ip 로 할당될지 알지 못한다. 그래서 같은 네트워크를 사용하게 한다면 id, name으로 사용할 수 있어서 이 문제를 해결할 수 있다.

 

 

RabbitMQ를 도커 컨테이너화

docker run -d --name rabbitmq --network ecommerce-network \

 -p 15672:15672 -p 5672:5672 -p 15671:15671 -p 5671:5671 -p 4369:4369 \

 -e RABBITMQ_DEFAULT_USER=guest \

 -e RABBITMQ_DEFAULT_PASS=guest rabbitmq:management
 
 
 -d : background 모드
 --name : 이름 부여
 --network : docker network 지정 
 -p : 포트 포워딩
 -e : 환경 변수
 rabbitmq:management : 실제로 호출하고자 하는 이미지 이름

 

기존에 이미지가 존재하지 않아서 자동으로 다운

 

ecommerce-network 에 rabbitmq 컨테이너 포함된거 확인

172.18.0.2 ip 할당되었다.

 

 

http://127.0.0.1:15672 -> rabbitMQ 확인

  • id : guest 
  • pw : guest

 

Config-service 를 docker 이미지화

-> Docker Image 파일 생성 

필요한 키파일(apiEncryptionKey)을 복사 해줘야한다.

 

키파일의 위치를 변경해준다.

Dockerfile 생성

FROM openjdk:17-ea-11-jdk-slim
VOLUME /tmp
COPY apiEncryptionKey.jks apiEncryptionKey.jks
COPY target/config-service-1.0.jar ConfigServer.jar
ENTRYPOINT ["java", "-jar", "ConfigServer.jar"]

FROM openjdk:17-ea-11-jdk-slim -> 베이스 이미지

VOLUME /tmp -> 가상의 디렉터리

COPY apiEncryptionKey.jks apiEncryptionKey.jks -> Dockerfile과 같은 위치의 apiEncryptionKey.jks를 컨테이너 루트에 복사

COPY target/config-service-1.0.jar ConfigServer.jar -> target/config-service-1.0.jar를 ConfigServer.jar로 복사
ENTRYPOINT ["java", "-jar", "ConfigServer.jar"] -> 실행 명령

 

 

프로젝트 빌드

> mvn clean compile package

 

docker 빌드

> docker build -t cjswltjr159/config-service:1.0   

 

생성된 이미지 확인

 

이미지 실행

환경변수 설정을 application.yml 파일내부 설정이 가능하다.

spring.rabbitmq.host를 rabbitmq ip주소로 변경해야 하는데 기존의 127.0.0.1은 config-service의 로컬 ip를 의미한다. 그래서 rabbitmq의 ip를 사용해줘야 하는데 docker network에서 ip를 입력해도 되지만 rabbitmq로 등록되어 있는 컨테이너 이름을 사용할 수 있다. 컨테이너 이름을 사용하게 되면 ip가 변경되더라도 문제가 없다.

 

docker logs 명령어로 해당 컨테이너 log 확인 가능

 

config-service도 network에 추가된거 확인

 

'Spring > [인프런] Spring Cloud' 카테고리의 다른 글

어플리케이션 배포를 위한 컨테이너 가상화  (0) 2022.07.09
Mircroservice 모니터링  (0) 2022.07.08
장애 처리와 Microservice 분산 추적  (0) 2022.07.05
데이터 동기화를 위한 Kafka 활용 2  (0) 2022.07.04
데이터 동기화를 위한 Kafka 활용 1  (0) 2022.06.30
    'Spring/[인프런] Spring Cloud' 카테고리의 다른 글
    • 어플리케이션 배포를 위한 컨테이너 가상화
    • Mircroservice 모니터링
    • 장애 처리와 Microservice 분산 추적
    • 데이터 동기화를 위한 Kafka 활용 2
    쵼쥬
    쵼쥬

    티스토리툴바