[Docker - NAS] Spring Boot Jar 배포 및 DB 연결

2024. 5. 8. 06:42Docker

 

목차

 

  1. Spring Jar 파일 생성
  2. Docker Image 생성 (Mac M1)
  3. Docker Image Hub에 공유
  4. Nas Docker Image 다운로드 및 Docker 컨테이너 및 네트워크 생성
Spring Jar 파일 생성

 

Build.gradle 하단

기본 SNAPSHOT.jar 2개 생성되는걸 1개만 생성하도록 만듦 크게 중요하지 않음

jar {
	enabled = false
}

 

SNAPSHOT.jar 생성 방법

Gradle -> build -> boot jar

jar file 생성

 

생성을 성공하면 Project -> build -> libs -> SNAPSHOT.jar

jar file 위치

 

Docker Image 생성 (Mac M1)

 

프로젝트 최상단에 Dockerfile 생성

dockerfile 위치

 

Dockerfile 내에 작성할 형식

FROM openjdk:17
ARG JAR_FILE=build/libs/automessage-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","app.jar"]

 

FROM: 사용할 자바 버전

ARG: jar 파일 위치 -> build부터 시작되는 이유는 나중에 도커 이미지화 시킬 때 터미널 위치가 프로젝트 최상단에서 시작하기 때문이다.

COPY: 프로젝트 실행할 때 JAR파일을 쉽게 참조하기 위해 이미지 루트(jar 위치)를 복사하고 app.jar로 변경 두는 것(app.jar은 단순히 프로젝트를 실행하기 위한 이름이므로 아무거나 해도 상관없다.)

ENTRYPOINT: 도커를 실행하기 위한 기본 명령어이다.

 

진행 순서

 

MAC 터미널을 열고 프로젝트 경로까지 이동

docker login

도커 로그인

docker build -t zks145/automessage --platform linux/amd64 .

도커 이미지 생성

docker images

이미지 생성 확인

docker push zks145/automessage

도커 이미지 docker Hub로 업로드

 

Nas Docker Image 다운로드

 

로컬에서 docker Hub로 업로드를 성공했다면 시놀로지 나스로 이동한다.

 

Container Manager 이동

레지스토리 이미지 검색(zks145/automessage) 후 다운로드

컨테이너 생성 (이미지 참조)

포트 설정은 사용할 포트는 공유기에서 포트포워딩을 한다.

볼륨 설정은 프로젝트에서 저장할 파일이 있을 경우 File Station에서 도커 File에 파일 생성 후 경로 할당을 해준다.

환경은 기존 프로젝트에서 DB 및 환경 변수 세팅이 완료되었다면 굳이 건들지 않아도 된다.

 

컨테이너 생성 및 실행

 

시놀로지 나스 방화벽 문제

 

여기까지 했으면 대부분 연결이되는데 나는 자꾸 DB연결에 실패해 원인을 알 수 없이 컨테이너가 다운되는 문제가 발생하였다. 여기서 AWS나 다른 시놀로지 나스를 이용한 사람들 자료를 다 찾아봤는데 컨테이너를 실행 후에 DB 연결에 실패하는 경우(로컬에서 원격 DB에 접속을 성공한 경우)는 볼 수 가 없었다.

이전에 방화벽 설정으로 커스텀 규직을 만들면서 ip주소 접근 허용을 로컬 내에 있는 192.168.0.1 ~ 192.168.0.255만 허용해준게 생각이나 방화벽 자체를 해제하고 다시 실행하니 프로젝트가 DB접속에 성공하는 것을 알 수 있다. 할당한 포트 접근과 IP를 열어주니 방화벽을 활성화해도 외부에서 접근이 가능하고 DB연결 또한 성공했다.