2 분 소요

이전 글에 이어서 진행해보자.
우선, 지금까지 도커 컨테이너를 이용해 배포한 서비스들은 아래와 같다.
스크린샷 2022-10-18 오후 7 33 51

Docker Container

10. user-service

1) 구성 정보 파일(.yml) 변경

review
이전에 config-service를 도커 컨테이너로 실행할 때 커맨드는 아래와 같았다.

$ docker run -d -p 8888:8888 --network ecommerce-network \
-e "spring.rabbitmq.host=rabbitmq" \
-e "spring.profiles.active=default" \
--name config-service ln8847/config-service:1.0

이 때, -e 옵션을 이용해 spring.profiles.activenative가 아닌 default로 설정했기 때문에
현재 구성 정보는 remote repository(깃허브)에서 읽어오고 있다.

그럼 이제 user-service를 인텔리제이로 열어 application.ymlbootstrap.yml 파일을 확인해보자.
스크린샷 2022-10-18 오후 9 22 02
따라서 현재 구성 정보는 remote repository(깃허브)에 있는 user-service.yml 파일에서 읽어오고 있다.

이를 웹 브라우저에서 확인해보면,
스크린샷 2022-10-18 오후 9 23 34
위 사진처럼 해당 깃 레포지토리에 있는 user-service.yml에서 읽어오고 있음을 알 수 있다.

그런데, 위 사진에서 보면 gateway.ip127.0.0.1이다.
🌟 이를 gateway-service 컨테이너가 사용하고 있는 IP Address로 바꿔야 한다!

gateway-service 컨테이너가 사용 중인 IP Address는 아래 커맨드로 확인할 수 있다.

$ docker network inspect ecommerce-network

스크린샷 2022-10-18 오후 9 11 49

이제 user-service.yml 파일의 gateway.ip를 아래처럼 172.18.05로 변경한 뒤에 깃 레포지토리에 push 하자.

user-service.yml

spring:
  datasource:
  driver-class-name: org.h2.Driver
  url: jdbc:h2:mem:testdb
  username: sa
  password: '{cipher}AQCgo+KT8kG9ISz3Rr0FEG2uoOR9jJXhjMzbTWgcDQtTh4rShUrj3KtiOfFaN8Gk/MoJeyszPKouvCrQihy1SyVjNiZuGaIXkk2bf4HTMayE4IP1xvLF7nOEHbvxuZR6dv2UUVK2eJcQ+bskIk9+fBjVL9C4t1Gw/VDA9rMVzu55VYcsdsRSEnIfSCUlOzaWaH0XsuiDbZ5UI1LxqEB3hXLkazCWkahj2jFoKElzZ1kZ/QRnOFQTtXrv3jtf0P0ytwTVBqEa5Gjz4JJLr3tybc7i0avs+tqXjWKj35C/3Aq+sDH1L3sl+JNns4QiDclTpHTt+wDg/pqlg2MhZ0HAOIJNBtuP5P/qk6Pwk0fCUyWhuifmOMo9OuBBZowXsMk0Hqg='

token:
  expiration_time: 864000000
  secret: '{cipher}AQA4EotojUaSDNpQ5raB7YyPaZ+kOFdojsDz4UCo/cjHnAjQgZDrZFFvJxFPvYgNAUzQb2RJENdTsMai3WOhWxSJPWaWG/0l4qD3El0/eslslIfuvGMyrwTBaE97M05q/wRmjfBL/uW0pKmjAzNXX3NkGlVezq5HoNr+k9f4FEhz6CEdSnRsOndLkMr9AwOZFFzp1E/jCHdrQ80AZKdMPpCZLR8sSU/NZa28jL9odkKKGggJ6IFKTEBAIRbUwuHZX1jS+j9ugv+U6sD+QtzGEiNl0yoqoAeC52kfLJRsWS9JpA1HEJ0m+J2Bk4v7M37TtOXtPXJmsqEPuBNhLLuK48zN1nz9HKIqlMCc6J6Lr4v479l9c/73dtXNZNCgV609uzwWqTqa6/p1TiuH4NJszJyp'

gateway:
  ip: 172.18.0.5 # 🌟 127.0.0.1 -> 172.18.0.5 변경

order-service:
  url: http://ORDER-SERVICE/order-service/%s/orders
  exception:
    order-is-empty: User's order is empty.

변경 후 add - commit - push 까지 마쳤다.

다시 웹 브라우저에서 확인해보면, 아래와 같이 변경되어 있을 것이다.
스크린샷 2022-10-18 오후 9 32 12

2) Dockerfile을 통해 이미지 만들기

FROM openjdk:17-ea-11-jdk-slim

VOLUME /tmp

COPY target/user-service-0.0.1-SNAPSHOT.jar UserService.jar

ENTRYPOINT ["java","-jar","UserService.jar"]

3) 이미지 빌드 및 도커 허브에 업로드

# 최신 버전으로 컴파일
$ mvn clean compile package -DskipTests=true
# clean은 기존 파일을 지운다.
# package 옵션으로 jar 파일까지 생성할 수 있다.
# 테스트 코드는 skip

# 이미지 파일 빌드
$ docker build -t ln8847/user-service:1.0  .

# 생성된 이미지 확인
$ docker images | grep user-service

# 도커 허브에 업로드
$ docker push ln8847/user-service:1.0

4) 도커 컨테이너 실행

기존의 application.yml에서 127.0.0.1 혹은 localhost를 사용하고 있는 부분을 -e 옵션을 통해 도커 컨테이너의 이름으로 바꿔서 실행하자.

$ docker run -d --network ecommerce-network \
-e "spring.cloud.config.uri=http://config-service:8888" \
-e "spring.rabbitmq.host=rabbitmq" \
-e "spring.zipkin.base-url=http://zipkin:9411" \
-e "eureka.client.serviceUrl.defaultZone=http://service-discovery:8761/eureka/" \
-e "logging.file=/api-logs/users-ws.log" \
--name user-service \
ln8847/user-service:1.0

스크린샷 2022-10-18 오후 9 49 30

logging.file을 지정함으로써, user-service 도커 컨테이너 내부에 /api-logs/users-ws.log 위치에 로그를 저장할 수 있다.

네트워크를 확인해보자.

$ docker network inspect ecommerce-network

스크린샷 2022-10-18 오후 9 50 51

로그를 확인해보자.

$ docker logs user-service

스크린샷 2022-10-18 오후 9 54 48
bootstrap 정보도 잘 가지고 오고 별다른 에러도 발생하지 않는다.

참고
로그를 확인할 때 -f 옵션을 붙이게 되면, 로그가 실시간으로 콘솔에 찍힌다.
(종료할 때에는 ctrl+c)

$ docker logs -f user-service

http://127.0.0.1:8761에 접속해 user-service가 잘 기동되었는지 확인해보자.
스크린샷 2022-10-18 오후 10 00 12

🌟 참고
만약, 도커 컨테이너를 이용해 user-service 기동한 후에 구성 정보(user-service.yml)를 변경했다면,
Spring Cloud Bus를 이용해 변경 사항을 일괄 적용할 수 있다.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기