
지금까지 배운 내용을 토대로 SpringBoot 프로젝트를 어떻게 Docker에 실제로 올리는지 알아보겠다.
만약 아래와 같은 간단하게 Hello, World!를 리턴하는 SpringBoot 프로젝트가 있다고 하자.
package infra.docker;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AppController {
@GetMapping("/")
public String home() {
return "Hello, World!";
}
}
일단 Dockerfile을 작성하기 위해 이 SpringBoot 프로젝트를 빌드한 파일을 컨테이너로 복사해주기 위해 ./gradlew clean build 를 터미널 창에 입력하면 다음과 같은 build 파일이 생성된다.

그 중 libs 경로의 .jar 파일을 사용하면 된다.
만약에 Host 환경에서 실행시키기 위해서는 java -jar 로 서버를 실행시켰겠지만 우리는 컨테이너환경에서 실행시키기 위해 이 파일을 Dockerfile을 통해 컨테이너로 옮겨줘야한다.
이번 프로젝트는 SpringBoot 프로젝트이니 베이스 이미지는 openjdk:17-jdk를 사용하고 SNAPSHOT.jar 라고 끝나는 파일을 app.jar 라는 이름으로 옮긴후에 Dockerfile은 아래와 같이 작성된다.
FROM openjdk:17-jdk
COPY build/libs.*SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
다음과 같이 Dockerfile을 작성하고 build를 하면 아래 사진과 같이 빌드가 완료 된다.

실행을 시켜봐야하는데 SpringBoot 서버는 8080 포트에서 실행이 되기 때문에 SpringBoot에 접속하기 위해서 8080 으로 맵핑을 시켜보자.
$ docker run -d -p 8080:8080 hello-server
이미지를 올리고 로그를 확인하면 다음과 같이 서버가 잘 올라갔다는 것을 볼 수 있다.

