자바 개발자, 이제 컨테이너 이용이 훨씬 간편해질 것 같습니다. 자바의 모토인 ‘Write once, run anywhere’에 한 걸음 더 가까이 가나요 ~ 구글이 힘을 좀 보탰습니다. 구글은 오픈 소스 기반 자바 컨테이너 도구인 Jib을 발표했습니다.
Jib은 자바 개발자의 손에 익은 도구와 절차로 컨테이너 이미지를 더 쉽게 만들어 이용할 수 있게 하자는 취지에서 시작된 오픈 소스 프로젝트입니다. 마치 JAR 파일 다루듯이 도커와 친해지게 해주는 그런 역할? 아마 이걸 기대하고 만든 것 같습니다.
Jib을 쓸 때와 안 쓸 때의 차이 보시죠. 다음은 안 쓸 때입니다. 자바 개발자가 JAR 파일을 빌드하는 것이야 뭐 평소 하는 것이니 패스하죠. 도커 컨테이너 이미지를 만들어 배포하려면 Dockerfile을 작성해야 합니다. 그리고 도커 데몬을 root 권한으로 띄워야 합니다. 그리고 빌드가 마무리될 때까지 좀 기다린 다음 만들어진 이미지는 도커 컨테이너 레지스트리로 보내야 합니다. 단계는 단순하지만, 자바 개발자가 컨테이너 전문가도 아니고 이런 것까지 다 챙겨야 하나요? 그래서 Jib이 나온 것입니다.
다음은 Jib을 쓸 때입니다. 중단 과정이 다 사라진 것 보이나요?
Jib을 이용하면 도커 쪽은 신경 쓸 일이 하나도 없습니다. Maven이나 Gradle을 통해 빌드하는 작업의 일부로 컨테이너화가 이루어집니다. Jib은 Maven과 Gradle의 플러그인으로 동작합니다. 플러그인을 설치한 다음 타깃 이미지에 대한 설정과 빌드에 대한 정의 정도만 하면 됩니다.
Jib은 컨테이너 이미지를 계층화하여 관리합니다. 이게 참 좋은 점인데요, 자바 개발자가 빌드 작업을 하면 Jib이 해당 빌드의 config를 읽어온 다음 이를 dependencies, resources, classes 세 계층으로 구분합니다. 만약 빌드 내용에 변화가 생기면 해당 계층에 해당하는 것만 변경하면 됩니다.
재사용성은 물론 가능합니다. Maven, Gradle 빌드 메타 데이터에 컨테이너 이미지를 선언해 둘 수 있어서, 도커 이미지를 필요할 때 불러와 쓸 수 있습니다. 이 밖에도 Jib은 필요할 경우 도커 데몬 상에 이미지를 빌딩하는 것도 지원합니다. 이는 다음 내용을 참조 바랍니다.
Jib on Maven
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>0.9.0</version> <configuration> <to> <image>gcr.io/my-project/image-built-with-jib</image> </to> </configuration> </plugin>
# Builds to a container image registry. $ mvn compile jib:build # Builds to a Docker daemon. $ mvn compile jib:dockerBuild
Jib on Gradle
plugins { id 'com.google.cloud.tools.jib' version '0.9.0' } jib.to.image = 'gcr.io/my-project/image-built-with-jib'
# Builds to a container image registry. $ gradle jib # Builds to a Docker daemon. $ gradle jibDockerBuild