자바 애플리케이션을 컨테이너화하려면 복잡하고, 고된 일이죠. 작업을 편하게 하기 위해 구글이 작년에 Jib을 발표한 것 기억하나요? 베타였던 Jib이 드디어 정식 발표되었습니다. Jib 1.0.0 버전을 달고 말이죠.
Jib은 자바 애플리케이션을 간편하게 컨테이너화할 수 있도록 돕는 오픈 소스 기반 도구입니다. 도커 설치, 도커 데몬 실행, 도커파일 작성을 일일이 할 필요 없이 Maven이나 Gradle에서 빌드하면 컨테이너 환경에 최적화된 자바 애플리케이션을 만날 수 있습니다.
작업이 얼마나 간소화되나? 컨테이너 이미지 만들기가 JAR 패키징 만큰 간편해진다고 합니다. 다음 그림은 도커를 빌드해 이미지를 만드는 과정이고 그 아래는 Jib 로 컨테이너 이미지를 만드는 과정입니다. 차이가 확 느껴지네요. 구글에 따르면 Jib 1.0.0은 프로덕션 환경에 바로 적용해도 될 정도로 안정적이라고 합니다.
Jib 1.0.0을 간단히 살펴보겠습니다. 먼저 할 일은 Maven 또는 Gradle에 플러그인을 추가하는 것입니다. Maven의 경우 pom.xml에 플러그인이 추가됩니다.
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <to> <image>gcr.io/my-project/my-java-image</image> </to> </configuration> </plugin>
이미지를 빌드하고 도커 레지스트리로 보내려면 다음과 같이 합니다.
$ mvn compile jib:build
또는, 도커 데몬을 빌드하고자 하면 다음과 같이 합니다.
$ mvn compile jib:dockerBuild
pom.xml 파일에 손을 대지 않고 자바 애플리케이션을 컨테이너화하고 싶다면 다음과 같이 하면 됩니다.
$ mvn compile com.google.cloud.tools:jib-maven-plugin:1.0.0:build -Dimage=gcr.io/my-project/my-java-image
더 자세한 내용은 Jib Maven 퀵스타드 가이드를 참조 바랍니다.
Gradle은 build.gradle에 플러그인을 추가합니다.
plugins { id 'com.google.cloud.tools.jib' version '1.0.0' } jib.to.image = 'gcr.io/my-project/my-java-image'
Gradle에 플러그인을 추가하는 것에 대한 상세 내용은 관련 문서를 참조 바랍니다.
보통 자바 기반 웹 애플리케이션은 WAR 파일로 패키징하죠. Jib은 WAR 프로젝트를 추가 설정 없이 컨터이너화 합니다. Maven 환경에서는 다음과 같이 실행하면 됩니다.
$ mvn package jib:build
Gradle에서는 다음과 같이 하면 됩니다.
$ gradle jib
참고로 컨테이너 환경의 기본 웹 애플리케이션 서버는 Jetty인데요, 톰캣 등 원하는 것으로 베이스 이미지를 바꿀 수 있습니다. Maven(pom.xml)의 경우 다음과 같이 설정합니다.
<configuration> <from> <image>tomcat:8.5-jre8-alpine</image> </from> <to> <image>gcr.io/my-project/my-war-image</image> </to> <container> <appRoot>/usr/local/tomcat/webapps/my-webapp</appRoot> </container> </configuration>
Gradle(build.gradle)은 다음과 같이 합니다.
jib { from.image = 'tomcat:8.5-jre8-alpine' to.image = 'gcr.io/my-project/my-war-image' container.appRoot = '/usr/local/tomcat/webapps/my-webapp' }