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 |