728x90
반응형
728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

springboot 프로젝트인 catalog service 를 도커에 올려본다.

 

1. pom.xml 경로에 Dockerfile 생성

FROM openjdk:17-ea-slim-buster
VOLUME /tmp
COPY target/catalog-service-1.0.jar catalog-service.jar
ENTRYPOINT ["java", "-jar", "catalog-service.jar"]

pom.xml 파일 확인하여 jar가 위 이름으로 빌드되는지 확인 필요

 

2. 도커 이미지 생성

mvn clean compile package -DskipTests=true
docker build -t haileyjhbang/catalog-service:1.0 .  //도커이미지생성

 

3. 도커 이미지 -> repository 푸시

docker push haileyjhbang/catalog-service:1.0

 

4. 도커 실행

실행 시 사용 중인 외부 접속 정보가 있으면 아래처럼 전달하는 방법 사용

소스&application.yml 파일 내/외부 꼼곰히 확인 필요

해당 부분 수정 필

docker run -d --network ecommerce-network --name catalog-service -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" -e "logging.file=/api-logs/catalog-test.log" haileyjhbang/catalog-service:1.0

 

docker network insepect ecommerce-network
localhost:8761

성공적..

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

springboot 프로젝트인 order service 를 도커에 올려본다.

 

1. pom.xml 경로에 Dockerfile 생성

FROM openjdk:17-ea-slim-buster
VOLUME /tmp
COPY target/order-service-1.0.jar order-service.jar
ENTRYPOINT ["java", "-jar", "order-service.jar"]

pom.xml 파일 확인하여 jar가 위 이름으로 빌드되는지 확인 필요

 

2. 도커 이미지 생성

mvn clean compile package -DskipTests=true
docker build -t haileyjhbang/order-service:1.0 .  //도커이미지생성

 

3. 도커 이미지 -> repository 푸시

docker push haileyjhbang/order-service:1.0

 

4. 도커 실행

실행 시 사용 중인 외부 접속 정보가 있으면 아래처럼 전달하는 방법 사용

소스&application.yml 파일 내/외부 꼼곰히 확인 필요

docker run -d --network ecommerce-network --name order-service -e "spring.zipkin.base-url=http://zipkin:9411" -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" -e "spring.datasource.url=jdbc:mariadb://mariadb:3306/mydb" -e "logging.file=/api-logs/orders-test.log" haileyjhbang/order-service:1.0

 

띄우고 로그를 보는데 아래와 같이 실패가 났음

패스워드 이상하다는 에러여서 설정 파일 확인

알고보니 로컬에서는 1234로 설정해서 설정파일에 1234로 되어 있었는데, 도커에 마리아 세팅할 때는 다른 패스워드로 하는 바람에 실패난 것. 패스워드를 외부에서 주입받거나 하는 방식도 있겠지만, 우선 수정하고 다시 컴파일하고 도커 이미지 지우고 다시 런하니 성공하였다..

유레카에 등록도 성

성공적..

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

springboot 프로젝트인 user service 를 도커에 올려본다.

 

1. pom.xml 경로에 Dockerfile 생성

FROM openjdk:17-ea-slim-buster
VOLUME /tmp
COPY target/user-service-1.0.jar user-service.jar
ENTRYPOINT ["java", "-jar", "user-service.jar"]

pom.xml 파일 확인하여 jar가 위 이름으로 빌드되는지 확인 필요

 

2. 도커 이미지 생성

mvn clean compile package -DskipTests=true
docker build -tag haileyjhbang/user-service:1.0 .  //도커이미지생성

 

3. 도커 이미지 -> repository 푸시

docker push haileyjhbang/user-service:1.0

4. 도커 실행

실행 시 사용 중인 외부 접속 정보가 있으면 아래처럼 전달하는 방법 사용

소스&application.yml 파일 내/외부 꼼곰히 확인 필요

docker run -d --network ecommerce-network --name user-service -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://discovery-service:8761/eureka/" -e "logging.file=/api-logs/users-ws.log" haileyjhbang/user-service:1.0

docker network inspect ecommerce-network
docker logs user-service

성공적..

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

공식 사이트에서 제공하는 도커 이미지를 띄워보기

도커이미지

프로메테우스 

https://hub.docker.com/u/prom

 

Docker

 

hub.docker.com

그라파나 

https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/

 

Run Grafana Docker image | Grafana documentation

Enterprise Open source Run Grafana Docker image You can use Grafana Cloud to avoid installing, maintaining, and scaling your own instance of Grafana. Create a free account to get started, which includes free forever access to 10k metrics, 50GB logs, 50GB t

grafana.com


프로메테우스

프로메테우스의 job이 적인 prometheus.yml을 열어서 localhost를 도커에 맞게 변경한다.

prometheus.yml 전

8000 포트는 게이트웨이임.

9090 포트는 프로메테우스인데 도커로 띄울 때 이름을 미리 적어준다.

prometheus.yml 후

 

그리고 해당 prometheus.yml 파일을 로컬에서 프로메테우스 컨테이너 내부로 이동해야 함.

도커 실행 시 volume mount(-v 옵션)를 통해서 설정파일만 옮기게 되면 파일을 직접 컨트롤하지 않더라고 호스트 pc의 내용을 이용하여 컨테이너를 기동 할 수 있게 됨(공유 폴더 같이..)

-v from:to

docker run -d -p 9090:9090 --network ecommerce-network --name prometheus -v C:/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

사이트에서 제공하는 명령어에 네트워크 옵션이랑 -v 옵션주고 파일의 경로를 명시한다.

참고로 - 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

 

docker ps -a
docker network inspect ecommerce-network

 

마찬가지로 포트 포워딩이 되어있기 때문에 로컬호스트로 도커 이미지에 접근 가능하다.

9090 prometheus
3000 grafana admin/admin으로 로그인

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

공식 사이트에서 제공하는 도커 이미지를 띄워보기

https://zipkin.io/pages/quickstart.html

 

Quickstart · OpenZipkin

Quickstart In this section we’ll walk through building and starting an instance of Zipkin for checking out Zipkin locally. There are three options: using Java, Docker or running from source. If you are familiar with Docker, this is the preferred method t

zipkin.io

이 이미지를 우리가 구축하고자 하는 ecommerce-network 안에서 뜨도록 네트워크 옵션을 추가하여 띄운다.

docker run -d -p 9411:9411 --network ecommerce-network --name zipkin openzipkin/zipkin

 

현재 도커에 zipkin이미지가 없기 때문에 다운로드 받아서 띄운다.

네트워크 확인

 docker network inspect ecommerce-network

로그 확인

포트포워딩을 해서 띄웠기 때문에 로컬(외부)에서 동일한 포트로 접근 가능

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

DOCKER COMPOSE?

Simplified control: Docker Compose allows you to define and manage multi-container applications in a single YAML file. 

https://docs.docker.com/compose/intro/features-uses/#:~:text=Simplified%20control%3A%20Docker%20Compose%20allows,and%20replicate%20your%20application%20environment.

 

Why use Compose?

Key benefits and use cases of Docker Compose

docs.docker.com

이미 만들어진 카프카 도커 컴포즈 파일 이용

https://github.com/wurstmeister/kafka-docker

 

GitHub - wurstmeister/kafka-docker: Dockerfile for Apache Kafka

Dockerfile for Apache Kafka. Contribute to wurstmeister/kafka-docker development by creating an account on GitHub.

github.com

참고

 

docker-compose-single-broker.yml

싱글 도커 파일 열어보면 초기에 위와 같은데 도커 이미지와 포트 포워딩 정보가 적혀있다.

기존에 도커로 작업했던 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 ""

아까 컴포즈 파일을 열어서 수정

external 추가

다시 실행하면 정상 실행된다.

네트워크도 확인해보면 지정된 ip로 잘 떴음을 확인할 수 있다.

docker network inspect ecommerce-network

 

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

2024.02.18 - [서버 세팅 & tool/docker] - [windows] gateway server 세팅, docker 배포

2024.02.04 - [서버 세팅 & tool/kafka] - [windows] kakfa connect; mariadb 설치

 

마리아 DB는 프로젝트가 아니기 때문에 별도 폴더를 만들고 그 안에서 Dockerfile과 필요한 폴더 생성

기존에 로컬에서 작업 시 생성했던 쿼리를 그대로 도커에 올릴 예정

그러려면 로컬에 마리아 디비 설치 경로와, 해당 쿼리 파일이 있는 곳을 파악해야 함

 

로컬 디비 작업 파일 복사

  • 아래와 같은 방식대로 했을 때 잘 진행되지 않음.. 해결방법은 별도로 작성
C:\Program Files\MariaDB 11.2\data

해당 경로로 가서 아래 내용 확인

 

 data 폴더를 그대로 복사

도커 파일 작성

FROM mariadb
ENV MYSQL_ROOT_PASSWORD test1357
ENV MYSQL_DATABASE mydb
COPY ./mysql_data/data /var/lib/mysql
EXPOSE 3306
ENTRYPOINT ["mysqld"]

에러 발생

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.

 

다른 방식으로 진행

버전 관련 문제인 듯하여 로컬에서 만들어진 데이터 베이스를 쿼리로 덤프 떠서 그걸 사용하는 방식으로 전환

1. cmd를 관리자 모드로 열기

2. 아래 명령어 실행

 

3. 해당 경로에 mydb.sql 생성 확인

 

4. 해당 파일을 Dockerfile 이 있는 경로에 옮기 도커 파일 수정

FROM mariadb
ENV MYSQL_ROOT_PASSWORD test1357
ENV MYSQL_DATABASE mydb
COPY ./mydb.sql /docker-entrypoint-initdb.d/
EXPOSE 3306

 

5. 도커 빌드 & 실행

docker build -t haileyjhbang/my-mariadb:1.0 . 
docker run -d -p 3306:3306  --network ecommerce-network --name mariadb haileyjhbang/my-mariadb:1.0

 

6. 도커 로그 확인

docker logs 컨테이너id

 

7. 도커 이미지 삭제

잘못 만들어진 이미지들을 지우기 위해서는 아래 명령어 사용

docker rmi  컨테이너id

 

8. 도커의 mariaDB에 접속하여 권한 등 확인

 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 데이터베이스 안 테이블/데이터가 덤프뜬대로 잘 나오는 것도 확인 가능 

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

2024.02.12 - [서버 세팅 & tool/docker] - [windows] 네트워크 세팅, rabbitmq 세팅, config server 세팅

2024.02.18 - [서버 세팅 & tool/docker] - [windows] discovery server 세팅, docker 배포

 

gateway service를 도커에 배포하기

1. Dockerfile 생성

FROM openjdk:17-ea-slim-buster
VOLUME /tmp
COPY target/gateway-service-1.0.jar gateway-service.jar
ENTRYPOINT ["java", "-jar", "gateway-service.jar"]

 

2. 도커이미지 생성

 mvn clean compile package -DskipTests=true
 docker build -t haileyjhbang/gateway-service:1.0 .  //도커이미지생성

도커 이미지 생성 확인 

 

3. 레파지토리 푸시

도커 이미지를 허브 사이트에 올려보기

docker push haileyjhbang/gateway-service:1.0

 

4. 도커 실행

gateway server 서버는 유레카, rabbitmq 등 타 서버에 의존적이고 해당 정보는 도커에서는 다르게 적용되어야 하므로 실행 시 정보 추가 필요

docker run -d -p 8000:8000 --network ecommerce-network \
 -e "spring.cloud.config.uri=http://config-service:8888" \
 -e "spring.rabbitmq.host=rabbitmq" \
 -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" \
 --name gateway-service \
 haileyjhbang/gateway-service:1.0

 

5. 상태 확인

 docker ps -a

네트워크 확인 

 docker network inspect ecommerce-network

로그 확인

 docker logs gateway-service

유레카 연결 확인

해당 status를 클릭해 보면 이상한 호스트명이 적혀있는 것을 볼 수 있는데

해당 값은 컨테이너 아이디로 같은 네트워크에 묶여있을 때는 ip뿐만 아니라 컨테이너 ID나 컨테이너 이름으로 접근 가능하다.

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

2024.02.12 - [서버 세팅 & tool/docker] - [windows] 네트워크 세팅, rabbitmq 세팅, config server 세팅

 

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

환경: windows11, springboot2.7.6, java17 2024.02.10 - [서버 세팅 & tool/docker] - [windows] docker 이미지 만들고 올리고 실행 [windows] docker 이미지 만들고 올리고 실행 환경: windows11, 아래 설치 진행 2024.02.10 - [서버

bangpurin.tistory.com

 

eureka discovery service를 도커에 배포하기

1. Dockerfile 생성

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

 

2. 도커이미지 생성

 mvn clean compile package -DskipTests=true
 docker build -t haileyjhbang/discovery-service:1.0 .  //도커이미지생성

도커 이미지 생성 확인 

 

3. 레파지토리 푸시

도커 이미지를 허브 사이트에 올려보기

docker push haileyjhbang/discovery-service:1.0

 

4. 도커 실행

해당 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
 //포트 포워딩; 네트워크 설정
 //설정 추가; 같은 네트워크로 묶여있기 때문에 컨테이너 이름을 명시해도 문제없음
 //네임, 이미지 이름 명시

 

5. 상태 확인 및 추가 기동

4번처럼 실행하고 도커 상태를 보면 다른 것들은 죽어있는 상태

네트워크 상태를 봐도 죽어있음

docker network inspect ecommerce-network

 

그래서 아래처럼 추가 기동 해줌

다시 상태를 확인해 보면 다 떠있음 

로컬에서 유레카 확인

728x90
반응형
반응형

환경: 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
반응형

+ Recent posts