Jib ile Java Projelerini Verimli ve Hızlı Dockerize Etmek
Java uygulamalarımızı Dockerize etmek için neler yapmamız gerektiğini incelemiştik.
Bu yazıda ise projelerimizi daha hızlı bir şekilde dockerize etmek için Google tarafından geliştirilen bir maven eklentisinden bahsedeceğim. Bu eklentinin adı Jib.
Jib eklentisine neden ihtiyaç duyarız peki? Bunu açıklamak ile başlayalım.
Sorun Nedir?
Uygulamamızı “klasik” yöntem ile dockerize etmek istediğimiz zaman her seferinde tekrar ve tekrar .jar uygulamamız en baştan build olarak hem kaynak tüketimi, hem zaman tüketimi hem de “fat jar” denilen bir sorunla karşılaşıyoruz.
Çok küçük bir satırda yapılan bir değişiklik sonrasında bile dockerize etmek istediğimiz uygulamanın en baştan .jar üretmek kaynak ve zaman israfına yol açmaktadır.
fat jar Nedir?
fat jar kavramı uygulamamızın temel kütüphanelerini içeren ve business katmanındaki değişikliklerden etkilenmeden kullanılan bir çok kütüphaneyi kapsamaktadır. Örneği kullandığımız Spring kütüphanesi proje içerisinde hep bulunan ve her değişiklik sonrasında tekrar dockerize etmek bu kavramın temelini oluşturmaktadır. Uygulamada yapılan değişiklik 1 MB ancak uygulamanın boyutu 50 MB olabilir. Sadece değişikliğin yapıldığı dockerize edilmesi, diğer base kütüphanelerin değişmediği sürece tekrar dockerize olmamasını sağlamalıyız.
OCI Katmanları
İmaj oluşturulurken belirli katmanlardan geçerek oluşmaktadır. Bu katmanlar sayesinde fat.jar dediğimiz kısımı başka bir katmanda tutulurken sadece değişen kısım diğer katmanda dockerize olacak ve sadece değişen kısım dockerize olmasını sağlıyoruz. OCI katmanları yani Docker imajı oluştururkenki katmanlar hakkında detay isterseniz OCI Image Format Specification‘a bakabilirsiniz.
JIB Plugin
Jib plugin ise bu bahsettiğim tüm problemleri çözmemize olanak sağlıyor. Hem ayrıca bir docker kullanmıyoruz ve maven projesi içerisine build plugini olarak ekleyerek bu sorundan kurtuluyoruz.
JIB Kullanmak
Eğer docker hub’ı kullanacaksak;
maven dosya yolunun içerisinde docker bilgilerimizi tanımlamamız gerekmektedir. Dosya yolu ise; .m2/settings.xml
<servers>
<server>
<id>registry.hub.docker.com</id>
<username><DockerHub Username></username>
<password><DockerHub Password></password>
</server>
</servers>
Code language: HTML, XML (xml)
Uygulamamızın pom.xml
içerisinde build plugini olarak jib plugini ekliyoruz.
<project>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<configuration>
<to>
<image>${image.path}</image>
</to>
</configuration>
</plugin>
</plugins>
</build>
</project>
Code language: HTML, XML (xml)
Uygulamamızı jib plugin kullanarak bir docker buildi almak ve docker’a göndermek için ise aşağıdaki komutu girmemiz gerekmektedir.
mvn compile com.google.cloud.tools:jib-maven-plugin:build -Dimage=$IMAGE_PATH
Code language: PHP (php)
No Comment! Be the first one.