[windows] 네트워크 세팅, rabbitmq 세팅, config server 세팅
환경: 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 라는 이미지가 없으므로 다운로드하는 작업이 포함됨
실행 후 네트워크 안에 잘 포함되었는지 확
잘 떴는지 확인
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에서는 본 파일로 실행해야 하기 때문에 아래처럼 설정파일 경로도 수정해야 함.
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의 대소문자 주의..