티스토리 뷰

이제 가장 기본적인 Service중 하나인 Config-Service를 배포하려 합니다.

 


#사전 준비 & Dockerfile 생성

먼저 해야할 작업으로 Config-Service에서 저희는 인증을 위한 apiEncrytionKey라는 key-store를 제작한적 있는데, 해당 파일을 복사하는 작업을 먼저 진행해야 합니다. 참조할 Key 파일이 없다면, 당연히 시작부터 막히게 됩니다. 

Bootstrap.yml 파일을 보시면 다음과 같이 해당 키의 위치가 명시되어 있습니다.

 

다음과 같이 복사한 JKS파일을 config-service에 붙혀넣기 해줍니다.

다음으로는 Dockerfile 생성을 해줍니다. 확장자에 주의해주세요. 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"]

다음으로는 Jar File의 이름의 길이를 줄이기 위해서 

version 1.0으로 변경해줍니다. Pom.xml에 상단에 groupId 탭 아래에 있습니다.

<groupId>com.example</groupId>
<artifactId>config-service</artifactId>
<version>1.0</version>
<name>config-service</name>

#Jar Compile

가장 먼저 Config-Service 프로젝트로 이동을 해준 뒤 

Compile Command를 통해서 JarFile을 생성해줍니다.

mvn clean compile package -DskipTests=true

-DskipTests 옵션은 Compile 시 테스트를 스킵하는 옵션입니다. 

 

정상생성시 Target폴더에 jar파일이 생성된다.


#Docker Build

다음으로는 Build를 통해서 Docker File을 Build하려 합니다. 마찬가지로 cmd의 위치가 해당하는 Service와 일치해야 합니다. Build를 통해서 Image를 생성해줍니다. 맨뒤에 . 은 위치를 표시합니다. 무조건 붙혀야해요!!

docker build -t ggpark0315/config-service:1.0 .

그럼 다음과 같이 config-service가 Image 등록되었음을 확인할 수 있습니다.


 

#Docker Run

그리고 다음과 같은 명령어로 Docker Container를 생성합니다.

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

-p 옵션이 핵심인데, 외부에서도 해당 포트에서 접속 할 수 있도록 8888포트를 개방하는 작업정도로 생각해줍니다. 8888포트는 저희가 지정한 Default Port입니다. Application.yml 파일에서 확인 할 수 있어요!

그리고 Configuration Service에서는 직접 RabbitMQ의 Port로 접속하는 부분이 있습니다.

마찬가지로 Application.yml 파일에서 작성되었는데, 현재 RabbitMQ IP는 172.18.0.2 입니다. Application의 참조 아이피를 보면 127.0.0.1 이네요...? 

spring:
   application:
      name: config-server
   profiles:
      active: native
   rabbitmq:
      host: 127.0.0.1
      port: 5672
      username: guest
      password: guest

변경이 필요해보입니다. 하지만 바꾸지 않아도 됩니다! 왜냐면 저희가 옵션에서 -e"spring.rabbitmq.host=rabbitmq" 옵션을 통해서 이미 변경된 상태로 실행이 되거든요! 이렇게 하면 Docker에서 어떤 IP를 할당해주든 rabbitmq의 IP를 자동으로 할당해주기에 일일히 확인할 필요도 없습니다!! 필수적인 옵션 중 하나입니다. 

그럼 언급한 김에 rabbitmq라는 값은 어디서 가져올까요?

아래의 커맨드를 활용해 RabbitMQ의 주소정보를 불러옵니다.

docker network inspect ecommerce-network

여기서 Name값을 활용해 해당 IP값을 불러왔던 거에요! 


근데 여기서 한가지 문제가 발생합니다.

keystore를 찾지 못함..

application.yml 과 bootstrap.yml파일을 참조하시면 아시겠지만, 기준자체가 아예 다른 OS라고 봐도 되기 때문에 절대 참조하지 못합니다. 그렇기에 수정이 필요합니다. 먼저 KeyFile은 복사를 통해 Container가 실행된 시점에 있는 폴더에 생성이 됩니다. 그래서 아래와 같이 bootstrap.yml을 수정하면 됩니다.

#bootstrap.yml

encrypt:
   key-store:
#     location: file:///${user.home}/Desktop/Work/keystore/apiEncryptionKey.jks
      location: file:/apiEncryptionKey.jks
      password: test1234
      alias: apiEncryptionKey

그리고 Application.yml에서 Repo는 Git과 연동을 통해서, Git에서 받아오게하면 어디서든 같은 주소로 접속 할 수 있습니다. 하지만 조금 오래전에 작성했기에 최신화가 필요한데... 이미 Native에 절여져 버려서, 저 자신의 도움을 빌렸습니다. 

Git Hub Repository 활용방법

 

[MSA] 잠깐 쉬어가는 Remote Git Repository (Config - Service)

-해당 포스팅은 Git Hub 회원가입이 선행되어야 합니다. -해당 포스팅은 인프런의 Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)을 참고했습니다. 기존에 Repository는 Local이었지만 Local 환

ggparkitbank.tistory.com

처음으로 아래와 같은 순서로 add와 커밋을 해줍니다.

git add

git commit -m "update"​

일단 repo가 연결이 되어있는지 확인하고 Native-Repository에 있는 파일을 모두 복사한 뒤 git-local-repo에 붙혀넣기 해줍니다.  마지막으로 Push를 하게된다면, git hub에 Push가 됩니다.

다만 Native-Repository도 없다면, 제 repositoryPublic으로 되어 있을테니 제 Repository의 주소를 활용해도 됩니다

 

https://github.com/ggpark9703/spring-cloud-config

 

GitHub - ggpark9703/spring-cloud-config

Contribute to ggpark9703/spring-cloud-config development by creating an account on GitHub.

github.com

#application.yml

다음과 같이 주석처리되어있던 git-hub연동 부분을 다시 주석해제한 뒤 연동이 되도록 활성화를 시켜줍니다.

spring:
   application:
      name: config-server
   profiles:
      active: native
   rabbitmq:
      host: 127.0.0.1
      port: 5672
      username: guest
      password: guest
   cloud:
      config:
         server:
            native:
               search-locations: D:\native-file-repo
            git:
               uri: https://github.com/ggpark9703/spring-cloud-config.git
#               username:
#               password:

application.ymlbootstrap.yml 파일이 변경이 됐으므로 imageRebuild 해줘야합니다. 번거롭지만 이렇게 했던 이유는 어디서 문제가 발생하는지 정확히 알기 위해서 입니다.

mvn clean compile package -DskipTests=true

docker build --tag ggpark0315/config-service:1.1

//Container ID 확인 
docker ps -a 
// 기존 Container 제거
docker rm -f [Container ID]
// 새롭게 Rebuild
docker run -d -p 8888:8888 --network ecommerce-network  -e "spring.rabbitmq.host=rabbitmq"  -e "spring.profiles.active=default"   --name config-service ggpark0315/config-service:1.1

 

다음과 같이 정상실행되는 것을 확인 할 수 있습니다.


#마치며 ..

이번시간에는 Config-Server를 Container화를 시켜봤습니다.

그 과정에서 발생한 이슈까지 처리해 봤는데, 처음부터 정답이 아닌, 오답으로 진행한 이유는 Docker의 특성을 알아야 될 것 같아서 입니다. Docker는 독립된 Container입니다.

일반적으로 D드라이브나 C드라이브안에 있는 파일을 참조할 수 없고, 자신만의 저장공간이 존재하기 때문에 해당 공간에 위치를 시켜줘야합니다. 그렇기에 저번에 배웠던 git이 유용하게 작용하기 시작합니다. git의 주소는 Cloud와 비슷하기에 제약을 받지 않으니 어디서든 활용이 가능하니까요!

 

감사합니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함