알고보니 로컬에서는 1234로 설정해서 설정파일에 1234로 되어 있었는데, 도커에 마리아 세팅할 때는 다른 패스워드로 하는 바람에 실패난 것. 패스워드를 외부에서 주입받거나 하는 방식도 있겠지만, 우선 수정하고 다시 컴파일하고 도커 이미지 지우고 다시 런하니 성공하였다..
참고로 - v 이후 입력하는 파일 경로에 대문자나 띄어쓰기가 있으면 아래와 같은 에러가 나서 임시로 C아래로 이동해서 실행시켰다.
docker: invalid reference format: repository name (Downloads/prometheus-2.49.1.windows-amd64/prometheus-2.49.1.windows-amd64/prometheus.yml) must be lowercase.
그라파나
docker run -d -p 3000:3000 --network ecommerce-network --name grafana grafana/grafana
기존에 도커로 작업했던 ecommerce-network와 묶이도록 아래처럼 지정, 카프카와 주키퍼는 뜨는 ip를 지하여 후에 프로젝트에서 해당 ip로 접근하도록 수정해야 함.
저장하고 docker daemon(docker desktop)을 실행한다.
아래와 같은 명령어로 docker compose 실행
docker compose로 실행하면 그 안에 여러개의 컨테이너가 들어있어도 마치 하나의 컨테이너처럼 실행 가능하다.
docker-compose -f docker-compose-single-broker.yml up -d
위 명령어를 치면 이미지를 열심히 풀링하다가 아래와 같은 에러가 발생하면서 종료된다.
time="2024-02-25T15:00:21+09:00" level=warning msg="a network with name ecommerce-network exists but was not created by compose.\nSet `external: true` to use an existing network"
network ecommerce-network was found but has incorrect label com.docker.compose.network set to ""
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "mysqld": executable file not found in $PATH: unknown.
다른 방식으로 진행
버전 관련 문제인 듯하여 로컬에서 만들어진 데이터 베이스를 쿼리로 덤프 떠서 그걸 사용하는 방식으로 전환
docker exec -it mariadb bin/bash
// 도커 안, 디비에 붙으면
mariadb -h127.0.0.1 -uroot -p
// 디비 접속
//127.0.0.1 is not allowed to connect to ~sever 라는 에러가 뜨면 localhost로 시도
grant all privileges on *.* to 'root'@'%' identified by 'test1357';
// 모든 데이터베이스의 root라는 계정에 ip address 허용
flush privileges;
// 내용 반영
기타 명령어들로 mydb 데이터베이스 안 테이블/데이터가 덤프뜬대로 잘 나오는 것도 확인 가능
해당 config server 정보는 도커에서는 다르게 적용되어야 하므로 실행 시 정보 추가 필요
docker run -d -p 8761:8761 --network ecommerce-network \
-e "spring.cloud.config.uri=http://config-service:8888" \
--name discovery-service haileyjhbang/discovery-service:1.0
//포트 포워딩; 네트워크 설정
//설정 추가; 같은 네트워크로 묶여있기 때문에 컨테이너 이름을 명시해도 문제없음
//네임, 이미지 이름 명시
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 라는 이미지가 없으므로 다운로드하는 작업이 포함됨
해당 파일 경로가 바뀌고 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로 시작해 봄.