- TIL -
구현 목표)
프로젝트를 배포할 미니pc 한대를 구매하게 되었다.
미니 피씨에 Docker Compose 를 활용하여 Spring, React, MySQL, Nginx 컨테이너를 각각 생성할 것이며
Nginx 의 리버스 프록시 기능을 사용하여 접속 도메인 별로 React 프로젝트와 Spring 프로젝트로 분류하여 응답할 것이다.
프로젝트 디렉토리 구조)
randomchat/
├── nginx/
│ ├── nginx.conf
│ └── Dockerfile
├── spring/
│ └── Dockerfile
├── react/
│ └── Dockerfile
├── docker-compose.yml
구현 과정)
1. 도커 컨테이너를 구현하기 위해 Docker 설치와 생성된 컨테이너들을 하나로 묶어서 관리할 수 있게 해주는 Docker Compose 를 설치해준다.
1) 아래 명령어를 사용하여 Docker 와 Docker Compose 를 설치
sudo apt update
sudo apt install docker.io docker-compose -y
2) 각 컨테이너를 관리할 디렉토리를 생성
( 홈 디렉토리 위치는 root 계정의 홈이 아닌 사용자 계정의 홈 디렉토리로 생성한다 )
mkdir -p ~/randomchat/{spring,mysql,react,nginx}
cd ~/randomchat
2. Spring Dockerfile 작성
1) Spring 컨테이너로 이동하여 빌드된 스프링 파일을 위치시킨다.
( scp 를 사용하여 빌드 파일을 미니 피씨로 전송하였다 )
위 작업 이후에 jar 파일 이름을 app.jar 로 mv 명령어를 사용해 변경해주었다.
2) Dockerfile 작성
( /randomchat/spring 경로에 작성 )
FROM openjdk:21-jdk-slim
WORKDIR /app # 컨테이너 내부의 작업 경로
COPY app.jar app.jar
# 로컬의 빌드파일인 app.jar 파일을 도커 컨테이너 내부 경로에 동일한 이름인 app.jar 로 복사하여 사용
# 여기서 앞의 app.jar 이 로컬의 위치인데 docker-compose.yml 에 context 항목을
# 현재 위치인 . 으로 표기했기 때문에 현재 위치인 spring 디렉토리부터의 경로를 기재해주면 된다.
ENTRYPOINT ["java", "-jar", "app.jar"]
3) 디렉토리 내부 상태
3. React Dockerfile 작성
1) React 컨테이너로 이동하여 빌드된 리액트 파일을 위치시킨다.
( scp 를 사용하여 빌드 파일을 미니 피씨로 전송하였다 )
( 주의할 점 : build.zip 을 압축해제 하면 build/build/{빌드파일} 형태로 디렉토리로 하나 더 감싸져 있는 경우가 있기 때문에 주의해야 한다. )
2) Dockerfile 작성
( /randomchat/react 경로에 작성 )
FROM nginx:latest
WORKDIR /user/share/nginx/html
COPY build/ .
CMD ["nginx", "-g", "daemon off;"]
( COPY 를 통해 react 디렉토리 내부에 build 파일 하위의 파일을 복사하여 도커 컨테이너 내부에 복사하여 사용한다 )
3) 디렉토리 내부 상태
To-Do List)
1. MySQL 컨테이너 정의하기
2. 가비아에서 도메인 구매하여 아이피랑 연결하기
3. Nginx 를 설치하여 저렴한 도메인을 구매한 뒤 도메인과 연결하여 경로를 처리하기
4. Jenkins 를 사용하여 깃허브에 코드가 커밋될때마다 자동으로 배포하게 설정하기
'TIL' 카테고리의 다른 글
[TIL] 2024.12.14 - 인증 코드 발송 오류 해결 ( 이메일 인증 구현 ) (0) | 2024.12.14 |
---|---|
[TIL] 2024.12.13 - 프로젝트 배포하기2 ( Docker Compose 를 사용하여 Spring, React 프로젝트 배포 ) (2) | 2024.12.13 |
[TIL] 2024.11.21 - GCP 를 활용하여 Spring Boot 프로젝트를 배포해보기3 - 문제 발생 (3) | 2024.11.21 |
[TIL] 2024.11.19 - GCP 를 활용하여 Spring Boot 프로젝트를 배포해보기2 (0) | 2024.11.19 |
[TIL] 2024.11.18 - jsp 를 활용하여 이메일 인증 코드 발송하기 (2) | 2024.11.18 |