Docker / Springboot + Nginx 빌드 후 Container에 올리기
기본 정보
- JAVA : amazoncorretto 11 버전
- 프로젝트 포트 : 9090
- Docker 설치
- Docker-compose 설치
(Docker, Docker-compose 설치는 https://deve1oper.tistory.com/6 "설치관련" 참고)
+ 프로젝트는 빌드된 상태로 jar파일이 있어야한다.
=> (P.1 , N.1, NP.1, N.2는 위 이미지에 해당되는 파일에 대한 번호)
P.1 - Dockerfile (프로젝트 image)
FROM amazoncorretto:11
EXPOSE 9090
COPY 프로젝트폴더/build/libs/프로젝트명-0.0.1-SNAPSHOT.jar 카피될파일.jar
RUN chmod +x 카피될파일.jar
ENTRYPOINT ["java","-jar","/카피될파일.jar"]
* 빌드 (이미지 생성)
docker build --tag spring-project:develop .
* 설명
- FROM : 이미지명 설정 / 이미지명:태그명 (공식 이미지)
- COPY : 프로젝트 폴더에 있는 jar파일을 Docker 내부에 저장
- EXPOSE : 호스트와 연결될 포트
- ENTRYPOINT : COPY된 jar 실행
N.1 - Dockerfile (Nginx image)
FROM nginx
COPY default.conf /etc/nginx/conf.d/default.conf
CMD ["nginx","-g","daemon off;"]
* 명령어
- 빌드 (이미지 생성)
docker build --tag nginx:latest .
* 설명
- FROM : 이미지명 설정 / 이미지명:태그명 (공식 이미지)
- COPY : 로컬에 있는 default.conf을 Docker Nginx 경로에 추가한다.
- CMD : 명령 실행
NP.1 - docker-compose.yml
version : "3"
services:
project:
container_name: project-container
image: "spring-project:develop"
ports:
- "9090:9090"
nginx:
container_name: nginx-container
image: "nginx:latest"
ports:
- "80:80"
depends_on:
- project
* 명령어
- 실행
docker-compose up [-d]
-d : 백그라운드 옵션
- 중지
docker-compse down
* 설명
- version : docker-compose의 버전
- container_name : 동작 시 컨테이너 이름 지정
- image : P.1과 N.1 에서 빌드할 때 생성한 이미지명 / 없을 경우 Pull 해온다.
(단, pull의 경우 DockerHub와 같은 이미지명를 사용해야한다. ex: 사용자명/spring-project:develop)
- depends_on : 서비스 간 종속성 표현과 서비스 순서를 정함.
-> project를 실행하기전 nginx를 먼저 실행한다.
N.2 - default.conf
server {
listen 80;
access_log off;
location / {
proxy_pass http://project:9090;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
* 설명
-> proxy_pass http://project:9090;
project는 Docker-compose.yml 파일에서의 project: 을 칭함.
추가해야할 내용, 공부할 것 : Redis 컨테이너 연결 하기