본문 바로가기
Spring-boot

Spring-Boot Docker 배포. window

by 조민욱 2024. 4. 19.

1. Docker 배포

  • 나는 application.yml 파일을 사용중이다. 
  • Docker 배포를 위해 url 주소를 변경해줘야한다.
# jdbc:mysql://localhost:3306

jdbc:mysql://host.docker.internal:3306
  • 다음 기존의 로컬에선 localhost 또는 127.0.0.1을 사용하여 DB에 연결할 수 있지만 Docker 컨테이너 내부에서는 이 방식이 통하지 않는다
  • Docker 컨테이너는 자체적으로 격리된 네트워크 환경을 가지고 있기 때문
  • 즉, host.docker.internal의 호스트 이름은 Docker가 제공하는 특별한 DNS 이름으로, 컨테이너가 실행되는 호스트 머신을 가르킴

 

2. Dobker배포를 위한 Jar 파일을 생성

  • 나는 Gradle을 사용 중

  • 다음과 같이 Gradle 화면에서 bootJar를 더블클릭 해준다

  • 다음 왼쪽 디렉토리에서 build > libs 폴더 안에 jar 파일이 생성된걸 볼 수 있다
    • 여기서 만약 에러가 난다면 build.gradle 에서 다음 의존성을 확인해준다. 
implementation 'org.springframework.boot:spring-boot-starter-web'
  • 이 후 파일을 오른쪽 클릭 후 run 해보자 
  • 정상 실행이 된다면 8080 서버로 실행이 될 것이다

 

3. Docker의 연결 설정

  • 이 후 내가 원하는 위치에 Dockerfile이라는 이름으로 파일을 생성

  • 나는 기존의 libs 내부에 Dockerfile을 생성
    • 파일 내부에 다음과 같이 작성해준다 
FROM openjdk:21
ARG JAR_FILE=*.jar
COPY ${JAR_FILE} parang.jar
ENTRYPOINT ["java","-jar","parang.jar"]

 

1. 자바 21버전을 사용

2. ARG는 컨테이너 내에서 사용할 수 있는 변수를 지정 

    나는 Dockfile 기준으로 폴더 내의 *.jar를 선언하는 것은 스프링 부트의 빌드된 jar 파일의 의미 

3. 위에 선언했던 JAR_FILE 변수를 컨테이너의 parang.jar파일로 변환 및 복사 ( name은 자유 )

4. 실행할 명령어를 정의 (이곳에서 암호화 작업도 가능)

 

 

4. image 생성 

  • 이 후 터미널을 이용해 해당 경로의 파일로 진입해준다 ( cd 명령어를 활용 )
docker build -t parang ./
  • 다음 명령어를 활용해 도커에 이미지를 올려준다 ( parang 는 .... 내가 사용할 네임? )

 

  • 다음과 같은 이미지가 생성된걸 볼 수 있으며
  • 빌드 과정을 거쳐 docker destop에도 이미지가 만들어진 것을 확인 할 수 있을 것이다.
    • docker desktop은 설치를 미리해두어서 사용법을 익혀보자 
docker images
  • 터미널에서는 다음 명령어를 활용하여 Docker 생성된 image를 확인해준다.

 

5. Container 생성

  • 다음 생성된 이미지로 Container 실행
docker run -d -p 8080:8080 parang
  • docker run : Docker에서 새 컨테이너를 생성하고 실행하는 명령어
  • -d : detached 모드로 컨테이너를 실행하라는 의미
    • 즉, 컨테이너가 백그라운드 에서실행되며, 터미널이나 명령 프롬프트가 컨테이너에 연결되어 있지 않아도 컨테이너가 계속 실행
  • -p 8080:8080 : 포트 매핑을 설정하는 옵션
    • -p는 왼쪽포트와 오른쪽 포트를 연결시키기 위한 기능 
    • 왼쪽 8080은 호스트 머신(컨테이너를 실행하고 있는 물리적 또는 가상의 컴퓨터)의 포트를 의미
    • 오른쪽 8080은 컨테이너 내부의 포트를 의미
    • 이 설정은 외부의 8080포트로 접속하거나 들어오는 모든 트래픽을 컨테이너의 8080 포트로 전달하는 의미
  • parang : Docker 이미지 이름, 임의 대로 사용가능

 

docker ps
  • 다음 명령어를 활용하여 실행 중인 컨테이너를 확인
  • http://localhost:8080으로 진입하면 정상적인 페이지가 보여지는걸 확인 할 수 있다.
    • 만약 Docker desktop에서 image를 실행했을 때 아래와 같은 에러를 보인다면 DB연동 문제가있으니 확인
"com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure"

 

  • 확인 후 jar파일을 삭제하고 처음부터 다시 실행하기 

 

다음 포스트에선 S3를 활용한 배포를 진행해보도록 하겠습니다~

'Spring-boot' 카테고리의 다른 글

Spring-boot 로그 기록 남겨두기  (0) 2024.04.19
aws 키 페어 생성하기  (0) 2024.04.19
JPA에 대한 모든 것  (0) 2024.03.26
@ManyToOne 관계 유형  (0) 2024.03.15
Spring-boot URL 미리보기  (0) 2024.03.12