[Spring] Jib(지브)를 이용한 Docker 이미지 만들기

https://blog.neonkid.xyz/228

 

[Spring boot] 애플리케이션을 Docker 이미지로 만들기 Old & New

Spring boot로 개발한 서버를 운영하기 위해서는 인스턴스에 서버 애플리케이션을 배포해야 합니다. 애플리케이션을 배포하는 방법에는 WAS로 배포하는 방법도 있지만 Docker 컨테이너 이미지를 만��

blog.neonkid.xyz

위 포스트에서 두 가지 방법을 이용해 Spring boot 애플리케이션을 Docker 이미지로 만들 수 있었습니다.

 

그러나 Dockerfile을 직접 작성하기에는 스크립트를 작성하기 어려운 분들한테는 러닝 커브가 부담이었다는 것이 다소 아쉬웠던 부분이었는데요.

 

 

Google Jib

위와 같이 보통 Docker 이미지를 만들고자 한다면, 프로젝트 밑으로 Dockerfile을 붙이고 진행하게 됩니다. 

 

그러나 Jib을 사용할 경우, 우리는 Dockerfile을 직접 만들지 않고도 프로젝트에서 Jib을 이용해 바로 컨테이너 이미지를 만들 수 있다는 것이 Jib의 메리트입니다.

 

이처럼 Google의 Jib 프로젝트는 Java 애플리케이션용 Docker 컨테이너 생성을 최적화 하기 위해 진행된 프로젝트입니다. Gradle, Maven을 지원하는 두 가지 플러그인이 존재하며 우리는 이를 이용해서 Spring boot Application을 또 다른 방법으로 도커 이미지로 만들어낼 수 있습니다.

 

https://github.com/GoogleContainerTools/jib

 

GoogleContainerTools/jib

🏗 Build container images for your Java applications. - GoogleContainerTools/jib

github.com

뿐만 아니라 OpenContainer 이미지도 지원하기 때문에 이들 이미지를 만드는 데 있어 많은 고민이 있으셨던 분들이라면, 꽤 단물같은 소식일지도 모르겠네요.

 

 

 

How to use

이제 사용법에 대해 알아보도록 하겠습니다. 기존의 Spring 애플리케이션 혹은 Spring boot 애플리케이션을 불러오시거나, 새로운 애플리케이션을 생성하여 프로젝트를 불러옵니다.

 

여기서 저는 Gradle을 사용해보도록 하겠습니다. 

 

그런 다음 war와 jib 플러그인을 추가해줍니다. 여기서 war를 사용하는 이유는 jib 내에 기본 컨테이너 내에 Jetty 웹 서버가 기본 내장 되어 있기 때문에 Embedded Tomcat을 포함하고 있는 jar가 아닌 war를 사용해야 합니다.

 

IDE에서 bootWar를 이용해 war 파일을 만들어줍니다.

 

war 파일은 프로젝트/libs 폴더에 만들어집니다.

 

war 파일이 만들어졌다면 이제 이미지를 만들면 됩니다. jib 밑 쪽에 있는 jibDockerBuild 커맨드를 통해 이미지를 만듭니다.

 

명령이 잘 실행되고 있다면 위와 같이 도커 이미지를 잘 만들게 됩니다.

 

성공적으로 빌드가 완료되었다면 위와 같이 docker image에 추가됩니다. docker run 등의 명령어를 이용하면 쉽게 실행할 수 있습니다.

 

 

 

 

마치며...

여기까지 아주 간단하게 Jib을 이용하여 Dockerfile 없이도 Spring 애플리케이션을 도커 이미지로 만드는 방법에 대해 알아봤습니다. 

 

기존의 Spring에서 제공하는 것이랑 크게 다를 것은 없지만 Spring에서 제공하는 커맨드는 WAS가 Tomcat인 반면, Jib에서 만드는 이미지는 Jetty라는 점이 차이가 있습니다.

 

이 외에도 이 포스트에서는 jibDockerBuild를 이용하여 로컬에 있는 Docker Registry에서 이미지를 만들었지만 jibBuildTar 명령어를 이용하면 tar 파일로 만들어 Docker CLI에서 사용할 수도 있습니다. 원격 Registry에 배포하고자 한다면 이 방법을 사용하는 것이 좋겠습니다.

 

 

 

 

 

이미지 출처: https://cloud.google.com/java/getting-started/jib

comments powered by Disqus

Tistory Comments 0