[SPRING] 스프링부트로 도커 이미지 만들기.
개요.
스프링부트 2.3 버전이 릴리즈되면서 부트에서 도커 이미지를 만들 수 있도록 지원한다!
본 포스팅은 부트로 도커이미지를 빌드하는 법을 설명한다. (인텔리제이 기준)
도커의 기본적인 이해는 다른 블로그를 참고하길 바란다.
프로젝트 생성
간단하게 Spring Web
, Spring Boot DevTools
을 의존성에 추가시키고 프로젝트를 만들자.
Spring boot DevTools
간단히 말하자면 classpath에 속해있는 파일들의 변경사항이 생기면 자동으로 어플리케이션을 재시작한다. 재시작버튼이 아니라 build버튼을 눌러도 같은 효과를 기대할 수 있다.
코드작성
SampleController.class
간단한 controller 클래스를 만들자!
package kr.gracelove.builddockerimagedemo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Created by GraceLove on 2020/06/02.
* Contact : govlmo91@gmail.com
*/
@RestController
public class SampleController {
@GetMapping("/")
public String hello() {
return "Hello World";
}
}
실행
GET 방식으로 '/' 로 들어온다면 응답본문에 "Hello World" 를 반환하는 간단한 컨트롤러다. 의도한대로 잘 작동하는 지 애플리케이션을 시동하고, '/'로 접속해보자.
의도한 대로 동작하는 걸 볼 수 있다.
DevTools를 이용한 재시작
hello()
메서드가 return 하는 문자열을 변경한 뒤 build 버튼을 눌러보자. 그 다음 다시 '/' 경로로 접속해보자.
변경 전 return 하는 문자열 : "Hello World"
변경 후 return 하는 문자열 : "Hello GraceLove"
변경 후 다시 build를 한 뒤 '/'로 접속해보자.
어플리케이션을 재시작하지 않아도 변경사항이 적용됨을 확인할 수 있다!
도커이미지 빌드하기.
어플리케이션을 중지시킨 뒤, 터미널에서 다음과 같은 명령어를 내리자!./mvnw spring-boot:build-image
만약 도커이미지를 처음 build 하는 거라면 시간이 굉장히 오래걸리니 인내심을 갖자.
빌드가 완료됐다!
도커 컨테이너 실행시키기.
다음과 같은 명령어를 입력하자!
docker run --tty --publish 8080:8080 <위에서 build된 이미지 이름>
docker run --tty --publish 8080:8080 build-docker-image-demo:0.0.1-SNAPSHOT
옵션은 다른 블로그나 책을 참고하자.
실행이 됐다. 다시 '/' 로 접속해보자 브라우저에 Hello GraceLove
가 표시되는 걸 볼 수 있다.
도커로 실행시킨 어플리케이션 remote로 접속하고 DevTools로 재시작해보기.
먼저 Run/Debug Configurations 로 들어가자. Add New Configuration 으로 Application을 추가한다.
추가된 Application에서는 다음과 같이 설정한다.
Main class :
org.springframework.boot.devtools.RemoteSpringApplication
Program arguments :
http://localhost:8080
완료됐으면 추가한 Remote Application을 실행시킨 후 '/'로 접속해보자. 우리가 기대한 대로 잘 동작하는 것을 볼 수 있다.
DevTools 사용해보기
지금 상황에서는 hello()
메서드의 return 값을 수정한 뒤 build해도 재시작이 되지 않는다. 원격 어플리케이션에 devtools 를 사용하기 위해선 다음과 같은 작업이 필요하다.
pom.xml
...
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludeDevtools>false</excludeDevtools>
</configuration>
</plugin>
</plugins>
</build>
실행.
pom.xml
을 위와 같이 설정한 뒤 다시 도커 이미지를 빌드하자. ./mvnw spring-boot:build-image
그 다음 도커를 실행시킨 뒤, docker run --tty --publish 8080:8080 build-docker-image-demo:0.0.1-SNAPSHOT
Remote Application을 실행시켜보자.
실행시킨뒤 '/'으로 가서 Hello GraceLove가 브라우저에 표시되는 지 보고, hello()
메서드의 return 문자열을 'Hello World' 로 수정한 뒤 build해보자.
다음과 같은 로그가 뜬다.
다시 '/' 로 가보면 우리가 기대했던 'Hello World'가 표시되는 걸 볼 수 있다.
이로써 Remote Application 에도 DevTools가 잘 붙는 걸 알 수 있다.