폭파!!!! 다시 시작!!!! IntelliJ에서 Dockerfile을 활용하여 Docker로 spring boot project 실행하기

YeJin Lee·2024년 10월 7일

Spring Boot

목록 보기
8/11

0. 도커 설치


1. Spring Project 생성

spring initialiizr

Dependencies는 Spring Web만 넣어주었습니다.
추후에 Dependencies를 추가해야 할 지도 모르겠습니다.
Gradle로 빌드 도구를 선택하였습니다.


2. jar 파일 생성

# 기존 빌드 디렉토리 삭제 후 빌드
> ./gradlew clean build

결과


3. 빌드 된 jar 파일 서버 구동 테스트

> java -jar .\demo-0.0.1-SNAPSHOT.jar 

결과
console

localhost


3. Dockerfile 작성

프로젝트의 root 경로에 Dockerfile이라는 이름으로 파일을 생성합니다.

# base-image
FROM openjdk:17-oracle
# 변수 설정 (빌드파일의 경로)
ARG JAR_FILE=build/libs/*.jar
# 빌드파일을 컨테이너로 복사
COPY ${JAR_FILE} app.jar
# jar 파일 실행
ENTRYPOINT ["java","-jar","/app.jar"]

Dockerfile 란
모든 것은 Dockerfile부터 시작된다.
Docker는 Dockerfile에서 명령어를 읽어 이미지를 빌드합니다.
Dockerfile은 소스 코드를 빌드하기 위한 명령어가 들어 있는 텍스트 파일 입니다.

https://docs.docker.com/build/concepts/dockerfile/


4. docker image 생성

# 이미지 빌드 명령어
> docker build -t [이미지 이름] . 
  • Error
    open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.
  • 원인
    Docker Desktop이 실행되지 않았음
  • 해결
    Docker Desktop.exe 실행
#이미지 생성 확인 명령어
> docker images

5. docker container 실행

# 포트 맵핑 명령어
> docker run -p 8080:8080 dockertestimg
# docker run -p [호스트 시스템의 포트]:[컨에이너 안의 포트] []

이미지 기반의 컨테이너 안의 8080포트는 localhost의 8080포트를 사용하는 것이 아니기 때문에 포트 맵핑을 해야 한다.

컨테이너 자체가 foreground로 뜨기 때문에 콘솔을 다시 쓸 수 없다.

# detatched 옵션이 포함한 명령어
# background로 띄워서 docker console을 다시 쓸 수 있다.
> docker run -d -p 8080:8080 dockertestimg

localhost:8080/hello 페이지 띄우기 success

도움 받은 블로그
https://yooooonnf.tistory.com/5

Study

bundle.gradle

파일 자체가 Project 오브젝트(객체),
Project 오브젝트는 Project 인터페이스를 구현하는 구현체이다.
Project 오브젝트는 Project 단위에서 필요한 작업을 수행하기 위해 모든 메서드와 프로퍼티를 모아놓은 슈퍼 객체이다.

public interface Project extends Comparable<Project>, ExtensionAware, PluginAware {
    
    ..
}
출처: https://kotlinworld.com/321 [조세영의 Kotlin World:티스토리]

build.gradle 이란?
groovy 언어 기반의 패키지 관리 파일
gradle은 총 3단계로 되어 있다.

  • Intialization
    settings.gradle 설정에 따라 여러 프로젝트 모듈 초기화
  • Configuration
    Dependency graph를 생성
    property 등 속성 값을 미리 지정
  • Execution
    사전에 정의된 속성값과 Configuration에서 생성된 DAG에 따라 각각의 Task실행

출처 https://m-falcon.tistory.com/735

profile
안녕하세요, 영문과코딩 입니다.

0개의 댓글