[E-commerce App] Docker Container를 이용한 애플리케이션 배포 - 2. Discovery Service & Gateway Service
이전 글에 이어서 진행해보자.
Docker Container
3. Discovery Service
1) application.yml
수정
유레카 서버에서 configuration 서버에 있는 구성 정보를 사용할 수도 있으니 configuration 서버의 정보를 명시해놓자.
이따가 docker run
할 때에는, 이전과 마찬가지로 도커 IP Address를 옵션으로 부여할 것이다.
server:
port: 8761
spring:
application:
name: discoveryservice
cloud:
config:
uri: http://127.0.0.1:8888 # 🌟 추가
name: ecommerce # 🌟 추가
eureka:
client:
register-with-eureka: false
fetch-registry: false
2) Dockerfile을 통해 이미지 만들기
이번에는 service-discovery
를 Dockerfile을 통해 이미지화 해보자.
Dockerfile
FROM openjdk:17-ea-11-jdk-slim
VOLUME /tmp
COPY target/service-discovery-0.0.1-SNAPSHOT.jar ServiceDiscovery.jar
ENTRYPOINT ["java","-jar","ServiceDiscovery.jar"]
3) 이미지 빌드 및 도커 허브에 업로드
인텔리제이 터미널을 사용해도 되고, iTerm을 사용해도 된다.
# 최신 버전으로 컴파일
$ mvn clean compile package -DskipTests=true
# clean은 기존 파일을 지운다.
# package 옵션으로 jar 파일까지 생성할 수 있다.
# 테스트 코드는 skip
# 이미지 파일 빌드
$ docker build -t ln8847/service-discovery:1.0 .
# 생성된 이미지 확인
$ docker images | grep service-discovery
# 도커 허브에 업로드
$ docker push ln8847/service-discovery:1.0
4) 도커 컨테이너 실행
# 컨테이너 실행
$ docker run -d -p 8761:8761 --network ecommerce-network \
-e "spring.cloud.config.uri=http://config-service:8888" \
--name service-discovery \
ln8847/service-discovery:1.0
# 로그 확인
$ docker logs service-discovery
이전과 마찬가지로 네트워크를 확인해보자.
$ docker network inspect ecommerce-network
웹 브라우저에서도 확인해보면, 도커로 잘 실행되고 있음을 확인할 수 있다.
4. Gateway Service
1) Dockerfile을 통해 이미지 만들기
Dockerfile
FROM openjdk:17-ea-11-jdk-slim
VOLUME /tmp
COPY target/gateway-service-0.0.1-SNAPSHOT.jar GatewayService.jar
ENTRYPOINT ["java","-jar","GatewayService.jar"]
2) 이미지 빌드 및 도커 허브에 업로드
인텔리제이 터미널을 사용해도 되고, iTerm을 사용해도 된다.
# 최신 버전으로 컴파일
$ mvn clean compile package -DskipTests=true
# clean은 기존 파일을 지운다.
# package 옵션으로 jar 파일까지 생성할 수 있다.
# 테스트 코드는 skip
# 이미지 파일 빌드
$ docker build -t ln8847/gateway-service:1.0 .
# 생성된 이미지 확인
$ docker images | grep gateway-service
# 도커 허브에 업로드
$ docker push ln8847/gateway-service:1.0
3) 도커 컨테이너 실행
# 컨테이너 실행
$ docker run -d -p 8000:8000 --network ecommerce-network \
-e "spring.cloud.config.uri=http://config-service:8888" \
-e "spring.rabbitmq.host=rabbitmq" \
-e "eureka.client.serviceUrl.defaultZone=http://service-discovery:8761/eureka/" \
--name gateway-service \
ln8847/gateway-service:1.0
# 로그 확인
$ docker logs gateway-service
application.yml
혹은 bootstrap.yml
파일을 확인해보면,
게이트웨이 서비스는 두 가지 다른 서비스를 사용하는 것을 볼 수 있다.
하나는 configuration service의 정보를 사용하는 부분이고,
다른 하나는 유레카 서버에 자기 자신을 등록하기 위해 유레카 서비스의 url을 지정하는 부분이다.
각각의 정보를 docker run
명령을 실행할 때 옵션으로 부여한다.
도커 컨테이너 기동 후, 네트워크를 확인해보자.
$ docker network inspect ecommerce-network
그리고 유레카 대시보드에서 새로고침을 해보자.
게이트웨이 서비스까지 잘 등록되었다.
💛 개인 공부 기록용 블로그입니다. 👻