스프링 부트 기반의 어플리케이션을 Docker Container에 올리는 방법을 설명해보겠다. Dockerizing이라는 말은 대상 어플리케이션을 Docker Image로 만들어 Docker에서 Container로 구동 가능한 형태를 만드는 것을 의미한다.
먼저 간단하게 Spring Boot Application을 만들어보자.
File -> New Project -> Spring Initializer
Next
Dependencies -> Web -> Spring Web Click
Next
간단하게 hello world를 리턴하는 Controller를 만들어본다.
package com.tistory.johnmark.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping
public String helloMethod() {
return "Hello JohnMark";
}
}
그다음 alt + shift + F10 을 눌러 어플리케이션을 구동해본다.
크롬이나 익스플로러를 켜서, http://localhost:8080을 치면 다음과 같이 HelloController의 helloMethod에서 리턴하는 "Hello Johnmark" 텍스트가 표시된다.
이제 해당 어플리케이션을 Docker Image로 만들기 위해 Dockerfile을 작성해보자.
FROM openjdk:8
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME
COPY ./build/libs/demo-0.0.1-SNAPSHOT.jar ./demo-0.0.1-SNAPSHOT.jar
EXPOSE 8080
CMD ["java","-jar","demo-0.0.1-SNAPSHOT.jar"]
그럼 이제 application을 실행 가능한 jar 파일로 빌드하고, Dockerfile을 빌드하여 applicaiton을 실행하는 도커 이미지를 만들어보자.
Application Build (Gradle)
./gradlew clean build
gradle로 spring boot application을 빌드하면, 프로젝트 명과 build.gradle에 적혀있는 어플리케이션 버전명이 합쳐진 실행 가능한 jar 파일이 /build/lib 폴더 하위에 만들어진다.
자 이제 Docerfile을 빌드하여 해당 어플리케이션을 실행하는 도커 이미지를 만들어 보자!
# docker build <옵션> <Dockerfile 경로>
docker build -t demo/demo .
해당 프로젝트 경로에서 터미널을 열고 위 명령어를 치면, demo/demo라는 이름으로 도커 이미지가 생기게 된다. 이후 해당 이미지를 이용해서 도커 컨테이너를 구동시키면 된다.
docker run -d --name 'demo-boot' -p 8080:8080 demo/demo
위 명령어를 실행시키면 docker container는 -d 옵션 (demon 실행) 으로 인해 데몬으로 컨테이너가 구동되며, 컨테이너의 이름은 'demo-boot'이고 -p 옵션으로 8080:8080 (<호스트 포트>:<컨테이너 포트>) 컨테이너 내부 포트와 호스트 포트를 연결했다. 이후 위에서 했던 것과 동일하게 http://localhost:8080으로 접속하면 성공적으로 접속이 될 것이다!
아래 영상은 해당 포스트의 내용을 직접 실습한 영상이다. 간단한 Spring Boot Application을 만들고 구동해보고, 빌드하고 Dockerizing해본 뒤에 구동 테스트도 해봤다.
'Programming > Spring' 카테고리의 다른 글
[Spring Boot] Filter (2) -Response Body Modify (5) | 2020.08.04 |
---|---|
[Spring Boot] Filter (1) - Request Body Modify (0) | 2020.07.15 |
[Spring Boot] Java Servlet Filter for Logging Request Parameter (2) | 2019.11.12 |
[Spring Boot] Spring Security with REST API Login AS JSON (8) | 2019.10.23 |
[SpringBoot] Redis Channel Subscribe with MessagePack (0) | 2019.09.18 |