이제 대충 다 만들어졌으니 도커라이징을 해야한다
나는 구조를
리눅스 미니pc에서 mysql,웹앱,배치와 배치스케줄러를 전부 돌릴생각임
만약 미니pc는 웹앱과 배치가 localhost의 mysql을 참조하려면(해당 pc의 컨테이너가 아닌 mysql이 설치되어있다면), host.docker.internal:3306에 접근해야함(host.docker.internal은 도커의 컨테이너가 실행중인 컴퓨터의 localhost라고 보면됨)
이걸 생각해서 env파일을 만들면
MYSQL_ID=IIIDDDD
MYSQL_KEY=PASSWWWOOORRRDDD
MYSQL_URL=jdbc:mysql://host.docker.internal:3306/projectName?serverTimezone=Asia/Seoul
이렇게 만들면된다,이때 도커가 env를 읽을때는 키=값 사이에 공백이 있으면 안되니,붙이는거만 조심하면된다
근데 나는 mysql도 도커로 띄우고 볼륨붙여서 데이터만 저장하게 할거니 이런식으로 할수없다
일단 웹앱도커라이징이랑은 상관없으니 이런식으로 이미지부터 만들어서 로컬에서 테스트부터 하자
도커라이징이야 그냥
# 빌드 스테이지
FROM gradle:8.8-jdk17 AS build
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build --no-daemon
# 실행 스테이지
FROM openjdk:17-slim
EXPOSE 8080
RUN mkdir /app
COPY --from=build /home/gradle/src/build/libs/*.jar /app/spring-boot-application.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/spring-boot-application.jar"]
다른상황에서도 이거 복사해서 그대로 넣어도 동작할거임,단 빌드스테이지와 실행스테이지의 from의 원본이미지의 버전만 조심하면 별로 문제생길건 없을거같음
이걸 실행시킬때는
docker run -p 8080:8080 --env-file env파일경로/파일명.env 프로젝트명:프로젝트버전
으로 실행시키면된다
이제 도커컴포즈나 쿠버네티스로 도커컨테이너를 실행시키면되는데,쿠버네티스야 하도많이써봤으니 이번엔 도커컴포즈를 써볼꺼다
도커 컴포즈는
docker run -p 8080:8080 --env-file env파일경로/파일명.env 프로젝트명:프로젝트버전
이걸 yaml로 바꿔서 저장해서,즉 커맨드를 파일로 저장해서 형상관리를 할수있게 해주는 도구다
일단 이미지를 도커허브가 아닌 내가 만든 미니pc에다가 저장하려고하는데,이건 (링크)참조
윈도우->리눅스 파일전송은 (링크)참조
사설저장소 설정이 끝났으면,웹앱과 mysql의 yaml을 만들면된다,근데 mysql은 영구저장되어야하니 볼륨이 필요하니
docker volume create mysql_data 를 리눅스에서 붙여넣기하면 mysql_data라는 이름의 볼륨이 생성된다
그리고 yaml을 만들면
version: '3'
services:
whyprice:
image: localhost:5000/whyprice:0.9 #사설저장소에 저장한 whyprice
ports:
- "8080:8080"
env_file:
- main.env
networks:
- app-network
depends_on:
- mysqldb
mysqldb: #컨테이너명,이걸 env의 url에 ip자리에 넣으면됨
image: mysql:8.0.39-debian
restart: always
environment:
MYSQL_ROOT_PASSWORD: 루트패스워드 # root 비밀번호 설정
MYSQL_DATABASE: 생성할스키마명 # 생성할 데이터베이스 이름
MYSQL_USER: 아이디 # 생성할 사용자 이름,이걸 env에 넣으면됨
MYSQL_PASSWORD: 비밀번호 # 사용자 비밀번호,이걸 env에 넣으면됨
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
mysql_data:
external: true
이렇게 만들면된다
네트워크 관련은 (링크)참조
그리고 env로 db의 위치를 url과 아이디패스워드를 적어줘야한다
MYSQL_ID=위에서 적은 user아이디
MYSQL_KEY=위에서 적은 user패스워드
MYSQL_URL=jdbc:mysql://mysqldb:3306/why_price #위에서 mysql의 컨테이너명
이렇게 파일을 만들고, docker-compose -f docker_compose.yaml up -d 로 실행을 시켜주면 끝이다
'사이드프로젝트 > (240808)이거왜오름?' 카테고리의 다른 글
이거왜오름?레포트생성부분 비동기(코루틴)처리하기 (1) | 2024.11.02 |
---|---|
이거왜오름?레포트캐시 스프링배치 도커라이징하고 스케줄링하기 (3) | 2024.10.08 |
이거왜오름?높은거래량 레포트 스프링배치로 미리만들어서 부하줄이기 (4) | 2024.10.04 |
이거왜오름? 헥사고날 리팩터링 (0) | 2024.09.18 |
이거왜오름? 테스트 작성 (0) | 2024.09.12 |