AWS & DOCKER

Docker / Springboot + Nginx 빌드 후 Container에 올리기

DevS1K 2022. 5. 13. 12:33

파일 경로

 

기본 정보

- 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.1N.1 에서 빌드할 때 생성한 이미지명 / 없을 경우 Pull 해온다.

     (단, pull의 경우 DockerHub와 같은 이미지명를 사용해야한다. ex: 사용자명/spring-project:develop)

   - depends_on : 서비스 간 종속성 표현과 서비스 순서를 정함.

      -> project를 실행하기전 nginx를 먼저 실행한다.

 

docker-compose up 했을 때 동작된 컨테이너명을 확인할 수 있다.

 

 

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 컨테이너 연결 하기

 

참고링크 : https://velog.io/@solchan/Docker-SpringBoot%EC%99%80-Nginx-Docker-Compose%EB%A1%9C-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%98%AC%EB%A6%AC%EA%B8%B0