본문 바로가기
실습/Docker

실습2. Spring boot 웹 애플리케이션 컨테이너화

by 나르는나른 2025. 6. 26.

 

프로젝트 최상단에 확장자 없이 'Dockerfile'이라는 이름의 파일을 만들어준다.

제대로 만들어졌다면 고래모양 아이콘이 생겨야한다.

 

이제 Dockerfile 파일 내 코드를 작성해준다.

# 베이스 이미지 지정
FROM openjdk:21-jdk

# 외부에서 JAR 파일의 위치를 인수로 받을 수 있음 (기본값은 target 폴더의 jar파일)
ARG JAR_FILE=target/*.jar

# 빌드된 JAR 파일을 컨테이너 내부로 복사하여 app.jar로 명명
COPY ${JAR_FILE} app.jar

# 컨테이너 시작 시 실행할 명령어 지정 (Spring Boot 앱 실행)
ENTRYPOINT ["java", "-jar", "/app.jar"]

 

FROM openjdk:21-jdk

이것은, Docker 이미지를 만들 때, 베이스로 사용할 이미지를 지정하는것이다. FROM 키워드를 사용한다.

Dockerfile에서 반드시 첫 번째 명령어로 사용된다.

Spring boot 웹 애플리케이션은 JVM(Java Virtual Machine) 위에서 동작하기 때문에, Docker로 컨테이너화할 때 Java 환경이 필수적이다.

 

ARG JAR_FILE=target/*.jar

이것은, ARG(Argument, 인자) 즉, 변수를 지정한다고 보면 된다.

JAR_FILE이라는 변수를 선언해서 Spring Boot 웹 애플리케이션이 빌드된 실행파일(.jar)파일이 존재하는 경로를 담아준다.

 

COPY ${JAR_FILE} app.jar

이것은 말 그대로 복사를 하는것인데, ${JAR_FILE}은 방금 지정한 변수가 갖고있는 값인 target/*.jar를 의미한다.

즉, target 디렉터리에 있는 실행파일(.jar)파일을 Docker 컨테이너 내부의 최상단에 app.jar 라는 이름으로 복사하겠다는 의미이다.

만약 특정 디렉터리로 복사하고 싶다면, COPY ${JAR_FILE} /app/app.jar  이런식으로 명확하게 경로를 지정해주면 된다.

 

ENTRYPOINT ["java", "-jar", "/app.jar"]

이것은, Docker 컨테이너가 시작될 때 항상 실행할 명령어를 지정하는 것이다.

실행파일(.jar)을 실행하는 명령어 "java -jar /app.jar" 인데, Spring Boot 애플리케이션처럼 컨테이너를 실행할 때 추가 인자나 옵션을 명확하게 전달하기 위해서는, 반드시 Exec 형식으로 사용하는 것이 표준이자 모범사례라고 한다.

그래서 Docker는 명령어(java)와 옵션(-jar), 그리고 대상파일(/app.jar)을 정확히 구분하여 실행해야 한다.

그렇기 때문에 저런식으로 명령어와 인자, 대상파일이 분리된 코드 형식을 나타내는것이다.

 

코드 작성을 마쳤다면 아래 명령어를 터미널에 입력하여 Docker 이미지 빌드를 진행한다.

docker build -t my-spring-app:v1 .

 

빌드가 완료되었다. 그 다음 docker desktop을 실행시켜서 확인해보면?

 

이미지가 잘 생성된것을 확인할 수 있다.

아래와 같이 명령어를 통해 터미널에서도 확인 가능

docker images

 

마지막으로 Docker 이미지를 실행하는 명령어를 입력해준다.

docker run -p 8080:8080 my-spring-app:v1

 

docker run: Docker 이미지를 컨테이너로 실행하는 명령어

-p 8080:8080: 포트 매핑을 설정하는 옵션. 왼쪽은 호스트(로컬PC)의 포트, 오른쪽은 컨테이너 포트. 즉, 클라이언트가 호스트의 포트로 접근하면 컨테이너로 접근할수 있도록 해주는 매핑 작업

Spring Boot 웹 애플리케이션 이미지가 실행되는 모습

 

아직은 환경변수 등의 문제로 인해 배포가 안되는 상태이다.

 

다음 포스트에는 'docker-compose'를 활용하여 컨테이너 실행 시 입력해야 하는 복잡한 옵션이나 환경변수를 설정하는 방법을 실습해보겠다.

'실습 > Docker' 카테고리의 다른 글

실습4. NHN Container Registry에 이미지 빌드 및 업로드  (0) 2025.06.26
실습3. docker-compose.yml  (0) 2025.06.26
실습1. Docker 설치(Windows)  (0) 2025.06.26