서버 세팅 & tool/docker

[windows] 네트워크 세팅, rabbitmq 세팅, config server 세팅

방푸린 2024. 2. 12. 16:43
반응형

환경: windows11, springboot2.7.6, java17

2024.02.10 - [서버 세팅 & tool/docker] - [windows] docker 이미지 만들고 올리고 실행

 

[windows] docker 이미지 만들고 올리고 실행

환경: windows11, 아래 설치 진행 2024.02.10 - [서버 세팅 & tool/docker] - [windows] docker; 컨테이너 가상화 [windows] docker; 컨테이너 가상화 virtualization 물리적인 컴퓨터 리소스를 다른 시스템이나 애플리케이

bangpurin.tistory.com

 

docker networks

bridge network

docker network create --driver bridge 브릿지이름
docker network is

host network

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

none network

  • 네트워크 사용하지 않음
  • IO네트워크만 사용, 외부와 단절

네트워크 세팅

docker desktop을 실행하여 docker daemon을 실행하고 초기화

docker container ls -a // 꺼진 컨테이너들까지 확인
docker system prune // 이미지와 남는 것들 까지 다 삭제

 

docker network create --gateway 172.18.0.1 --subnet 172.18.0.0/16 ecommerce-network
// docker network create ecommerce-network
// gateway와 subnet 정보를 안주면 랜덤으로 되긴하는데 설정해주는게 관리가 편함
// 이름은 꼭 주도록; 그러면 ip가 바뀌어도 이름으로 접근가능
docker network ls
// 네트워크 리스트
docker network inspect 네트워크이름
// 네트워크 상세 정보

 

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
 
 //도커를 백그라운드에서 돌리고 이름을 부여하고 특정 네트워크 안에서 돌 수 있게 지정
 //rabbitmq 내부에서 사용하는 포트 포워딩
 //환경변수
 //이미지 이름이 rabbitmq:management

run으로 실행하면 기존에  rabbitmq:management 라는 이미지가 없으므로 다운로드하는 작업이 포함됨

실행 후 네트워크 안에 잘 포함되었는지 확

port forwarding

잘 떴는지 확인

 

configuration service 도커화

기존에 사용하던 암호화 키파일 확인

jks 파일을 복사하여 프로젝트 루트로 붙여 넣고 Dockerfile 작성

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

해당 파일 경로가 바뀌고 remote에서는 본 파일로 실행해야 하기 때문에 아래처럼 설정파일 경로도 수정해야 함.

참고로 맥에서는 file:/ 의 슬래시도 지워야 된다는 말이 있는데 나는 우선 이걸로 성공..

jar 파일 빌드

 mvn clean compile package -DstkpTests=true

도커 빌드; 현재 디렉터리 안에서 실행한다는 의미의 점 꼭..!

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

기존 application.yml 설정을 확인해 보면 rabbitmq 설정이 로컬 테스트용으로 되어있음. 이를 도커에 그대로 올리면 당연히 안될 거고 도커의 rabbitmq로 바꿔줘야 함.

물론 설정 자체를 수정(docker ip를 넣고 저장)해서 그대로 jar을 말아줄 수도 있지만, docker ip는 바뀔 수 있음. 따라 jar는 그대로 말고 실행 시 도커의 이름으로 주입해 주는 게 편함.

docker run -d -p 8888:8888 --network ecommerce-network \
 -e "spring.rabbitmq.host=rabbitmq" \
 -e "spring.profiles.active=default" \
  --name config-service haileyjhbang/config-service:1.0
  // 포트 포워딩, 기존의 네트워크 안에 포함
  // 설정 변경사항 추가
  // 이름 주고 이미지 주고

실행 후 네트워크 검사하면 3번으로 실행됨 

docker network inspect ecommerce-network

잘 떠있는지 로그 확인

docker logs config-service

에러가 있음

Unsatisfied dependency expressed through method 'searchPathCompositeEnvironmentRepository' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultEnvironmentRepository' defined in class path resource [org/springframework/cloud/config/server/config/DefaultRepositoryConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: You need to configure a uri for the git repository.

??

git repository 설정하라는 이상한 에러.

구글링 해보니 property 옵션을 native로 주라고.. 하여 native로 시작해 봄.

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

성공..?

그러나 서버는 잘 뜨지만, 설정파일을 잘 읽어오지 못하는 문제가 생긴다.

왜냐면.. search-location 이 위처럼 로컬 경로이기 때문..

그래서 다시 git 정보를 가져오도록 주석을 해제한다. native이면 native.search-locations를 따라가는 것 같고 default 면 git을 바라보는 듯..

 

프로퍼티 수정 후 다시 mvn compile 하고 docker build 하고 run 하면 아래처럼 잘 나온다.

 url의 대소문자 주의..

728x90
반응형