1. DockerFile 작성

 

생성한 도커파일에 아래와 같은 내용을 작성해준다.

FROM openjdk:17-jdk

WORKDIR /spring-boot

COPY build/libs/*SNAPSHOT.jar app.jar

ENTRYPOINT ["java", "-jar", "/spring-boot/app.jar"]
  1. FROM openjdk:17-jdk
    -Docker 이미지를 생성할 때 기본으로 사용할 베이스 이미지를 설정하는 명령어이다.
    -이 경우, openjdk:17-jdk 이미지를 사용하여 JDK(Java Development Kit) 17이 설치된 환경에서 애플리케이션을 실행할 수 있도록 한다.
    -OpenJDK는 자바 애플리케이션을 실행하는 데 필요한 런타임 환경을 제공한다.
  2. WORKDIR /spring-boot
    -Docker 컨테이너 내에서 작업 디렉토리를 /spring-boot로 설정한다. 이후의 모든 명령어는 이 디렉토리 내에서 실행된다. 이 디렉토리가 존재하지 않으면 자동으로 생성된다.
  3. COPY build/libs/*SNAPSHOT.jar app.jar
    -호스트 시스템의 build/libs/ 경로에 있는 *SNAPSHOT.jar 파일을 Docker 컨테이너의 /spring-boot/ 디렉토리에 app.jar 파일로 복사한다.
    -build/libs/에 *SNAPSHOT.jar 파일이 존재해야 한다.
  4. ENTRYPOINT ["java", "-jar", "/spring-boot/app.jar"]:
    -Docker 컨테이너가 시작되면 java -jar /spring-boot/app.jar 명령어가 실행된다.
    -이 명령어는 Spring Boot 애플리케이션을 실행시킨다.

 

이 Dockerfile은 OpenJDK 17을 기반으로 한 자바 애플리케이션을 Docker 컨테이너에서 실행하기 위한 설정이다. 애플리케이션의 빌드 결과물인 SNAPSHOT.jar 파일을 컨테이너로 복사하고, 컨테이너가 시작될 때 해당 파일을 자바 명령어로 실행하는 방식이다.

 

2. 스프링 부트 프로젝트 빌드

./gradlew clean build

 

3. DockerFile 이미지 빌드

docker build -t hello-server .

docker build

  • 현재 디렉토리에 있는 Dockerfile을 기반으로 Docker 이미지를 빌드하는 명령어이다.
  • Dockerfile에 정의된 명령어들이 순서대로 실행되어 최종적으로 새로운 이미지가 만들어진다.

-t hello-server

  • 빌드된 이미지를 태그하는 옵션이다. -t 옵션 뒤에 hello-server라는 이름을 이미지에 붙여준다.
  • 즉, 빌드된 이미지는 hello-server라는 이름으로 저장되며, 이 이름을 사용해 나중에 컨테이너를 실행할 수 있다.
  • 태그는 name:tag 형식으로 사용되며, 여기서는 tag 부분이 생략되어 latest로 기본 설정된다. 즉, 이 이미지는 hello-server:latest로 태그된다.

. (점)

• Docker 빌드 명령어에서 마지막에 오는 .은 Dockerfile을 포함한 컨텍스트의 경로를 나타낸다.
• 여기서 .은 현재 디렉토리를 의미하며, 이 디렉토리에서 Dockerfile을 찾아 이미지를 빌드하게 된다.

결론적으로, 이 명령어는 현재 디렉토리에 있는 Dockerfile을 기반으로 Docker 이미지를 빌드하고, 해당 이미지를 hello-server라는 이름으로 태그한다.

 

4. 이미지가 정상적으로 생성되었는지 확인

docker image ls

도커 이미지가 성공적으로 생성된 것을 확인할 수 있다.

 

5. 생성한 이미지를 컨테이너로 실행

docker run -d -p 8080:8080 hello-server