Bir bahar önyükleme uygulamasını Google’ın Jib’iyle dockerize etmek

Resim 1: Sürtünmesiz java liman işçisi Jib!

Merhaba! Son zamanlarda yay tabanlı bir platformda çalışırken, bir mikro hizmette dockerizing yolunu düşünüyordum. Bu yüzden Google tarafından geliştirilen konuyla ilgili oldukça yeni bir yaklaşım olan Jib ile karşılaştım.

Bu yayın, konteynerli bir yaylı bot uygulaması oluşturmak için Jib'i ve daha spesifik olarak jib-maven-plugin'i kullanmakla ilgilidir.

Bu yazıda kullanılan demo projesi burada bulunabilir:

Pergel Nedir

Jib'in masaya getirdiği şey, yalnızca seçtiğiniz yapı aracına bir eklenti ekleyerek bir kap oluşturmanıza olanak sağlamasıdır (Maven veya Gradle). Fazladan dosya yok, sadece birkaç yapılandırma satırı var ve uygulamanızı bir konteyner görüntüsünde paketlemenin tüm adımlarını gerçekleştiriyor.

Google bulut ekibinin kendi sözleriyle:

Jib, Java geliştiricilerinin bildikleri Java araçlarını kullanarak kaplar oluşturmasına olanak sağlayan açık kaynaklı bir Java kapsayıcısıdır. Bir Docker dosyası yazmanızı ya da bir docker yüklemenizi gerektirmez ve doğrudan Maven ve Gradle'a entegredir.

"Geleneksel" Java to Docker görüntü oluşturma akışında, aşağıda gösterildiği gibi bir Docker dosyasına ve docker arka planına yüklenmemiz gerekir:

Resim 2: Bir Java uygulamasından liman işçisi resmi oluşturmak için kullanılan geleneksel adımlar.

Diyagramın gösterdiği gibi, Jib derleme akışında projenin derleme dosyasının eklentisine ihtiyacınız var:

Resim 3: Bir Java uygulamasından liman işçisi görüntüsü oluşturmanın perdesi.

Kurmak

Bir Java geliştirme ortamı oluşturmak bu yazının kapsamı dışında değil, hadi bir şans verelim!

  1. Java 8+ programının yüklü olduğundan emin olun.
  2. Biz maven kullanacağız, bu yüzden mevcut değilse maven 3.5+ 'ü kurun.
  3. Docker kurulu olduğundan ve Linux kullanıyorsanız, kullanıcınızın docker erişimi olduğundan emin olun.
  4. Favori IDE'nizi kurdunuz (tutulma veya fikir).

Temel bir bahar önyükleme uygulaması oluşturun

Bu, ilkbahar başlangıcı veya favori IDE'niz aracılığıyla yapılabilir. İlkbahar başlangıcını kullandıysanız, yeni oluşturulan maven projesini IDE'nize aktarmanız gerekecektir (eclipse / idea).

Jib-maven-plugin eklentisini pom.xml'inize ekleyin

Uygulamanızın yerel olarak temelde saklı bir görüntüsü için pom.xml'nizdeki jib-maven-plugin eklentisini aşağıdaki gibi yapılandırın:

Uygulamayı derleyin ve resmi oluşturun

Artık uygulamayı oluşturabilir ve görüntünün yerel liman işçisi havuzunda oluşturulduğunu kontrol edebiliriz.

Projenin kök klasörüne bir terminal aracılığıyla gidin ve şunları yürütün:

mvn derleme jib: dockerBuild

Maven derleme günlükleri aşağıdaki gibi satırlar içermelidir:

[BİLGİ] - - jib-maven-eklentisi: 0.10.1: dockerBuild (varsayılan-cli) @ spring-boot-jib - -
[BİLGİ]
[BİLGİ] Springbootjib olarak Docker daemon'a konteyner uygulaması ...
[UYARI] Temel görüntü ‘gcr.io/distroless/java’ belirli bir görüntü özeti kullanmıyor - derleme yapılamaz
[BİLGİ] Temel görüntü alma gcr.io/distroless/java…
[INFO] Bina bağımlılıkları katmanı…
[INFO] Kaynak kaynakları katmanı…
[INFO] Yapı sınıfları katmanı…
[BİLGİ] Sonuçlandırılıyor…
[BİLGİ]
[INFO] Konteyner giriş noktası [java, -cp, / app / resources: / app / classes: / app / libs / *, com.jibdemo.SpringBootJibApplication] olarak ayarlandı
[BİLGİ] Docker daemonuna yükleniyor ...
[BİLGİ]
[BİLGİ] Springbootjib olarak Docker daemon'a görüntü inşa

Hata olmadığı ve maven “Springbootjib olarak Docker daemon'a görüntü inşa ettiğimizi” gördüğümüz sürece hepimiz hazırız.

Liman görüntüsünü çalıştırın

Bu noktada yerel havuzumuzda yeni liman işçisi görüntüsüne sahip olmalıyız. Liman görüntü ls çalıştırarak kontrol edebilirsiniz ve buna benzer bir resim görmeliyiz:

springbootjib son eb4bea693650 3 saat önce 135MB

Jib'in varsayılan olarak kullandığı gcr.io/distroless/java görüntüsünün neden olduğu çok küçük (135 MB) görüntü boyutuna dikkat edin (daha sonra nasıl değiştirebileceğimizi göreceğiz).

Şimdi görüntüyü her zamanki gibi çalıştırabiliriz --it springbootjib docker run yazarak ve uygulamanın beklendiği gibi çalıştığını doğrulayın.

Docker resmimize ince ayar yapmak için Jib eklentisini yapılandırma

Daha derine kazıp, Jib eklentisini daha fazla yapılandırıp, liman işçisi deposuna giriş yapmak, portları açmak, belirli bir temel görüntü seçmek vb. Gibi genel senaryolara uyacak şekilde yapılandırabiliriz.

Örneğin aşağıdaki yapılandırmada görüntü:

  • Bir openjdk tabanından yapılmıştır: alp (Docker Hub'dan çekilmiştir)
  • Localhost'a itilir: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpin ve localhost: 5000 / springbootjib: son
  • Java -Xms256m -Xdebug -cp app / libs / *: app / resources: app / classes com.jibdemo.SpringBootJibApplication komutunu çağırarak çalıştırır
  • Tcp için 8001 bağlantı noktasını (varsayılan) ve udp için 8002 ve 8003 bağlantı noktalarını gösterir.
  • Bir etiketi var (isim: springbootjib)
  • OCI formatı olarak oluşturulmuştur

Artık görüntüyü tekrar oluşturabilir ve maven günlüklerindeki farkı görebilirsiniz:

[BİLGİ] --- jib-maven-plugin: 0.10.1: dockerBuild (varsayılan-cli) @ spring-boot-jib ---
[BİLGİ]
[BİLGİ] Docker daemon'a localhost olarak konteyner uygulaması: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpin, localhost: 5000 / springbootjib ...
[BİLGİ] Temel görüntü elde openjdk: alp ...
[INFO] Bina bağımlılıkları katmanı ...
[INFO] Kaynak kaynakları katmanı ...
[INFO] Yapı sınıfları katmanı ...
[INFO] Temel görüntü kimlik doğrulaması gerektiriyor. Openjdk için tekrar deneniyor: alp ...
[INFO] registry.hub.docker.com için kayıt defteri kimlik bilgileri alınıyor ...
[BİLGİ] Sonuçlandırılıyor ...
[BİLGİ]
[INFO] Konteyner giriş noktası [java, -Xms256m, -Xdebug, -cp, / app / kaynaklar: / app / classes: / app / libs / *, com.jibdemo.SpringBootJibApplication] olarak ayarlandı
[BİLGİ] Docker daemonuna yükleniyor ...
[BİLGİ]
[INFO] Docker daemon'una localhost olarak oluşturulmuş resim: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alp, localhost: 5000 / springbootjib

Yukarıdaki log segmentinde, eklentinin görüntüyü openjdk'i çektiğine dikkat edin: Docker Hub'dan alpin, görüntüyü üç farklı şekilde etiketlenmiş sürümlere dönüştürdü ve bunları yerel havuzumuzda sakladı.

Neden Jib ile fotoğraf çektim?

  • Bir Docker dosyası tutmanıza, bir Docker arka planını çalıştırmanıza ve hatta tüm bağımlılıklarıyla şişman bir JAR oluşturmak için endişelenmenize gerek yok.
  • Hızlı, artımlı yapımlar elde etmek için görüntü katmanlama ve kayıt önbellekleme avantajlarından yararlanır.
  • Girişleriniz aynı kaldığı sürece tekrarlanabilir yapı görüntüleri oluşturmak için yapılandırılabilir.

Sonuç

Java uygulamaları için docker görüntüleri oluşturmak için spotify ve fabric8'lere benzer diğer maven eklentilerini kullandıktan sonra, Google’ın bu konuyu ele almasını memnuniyetle karşılıyoruz. Fabric8’nin eklentisinden daha az dosyaya ihtiyacı var ve (benim düşünceme göre) yapılandırmak spotify’ın eklentisinden daha kolay. Kesinlikle denemek için tavsiye ederim!

Feragatname: Bu bir karşılaştırma makalesi değildir, sadece kişisel deneyimlerden destek alan konuya bakış açım.

Tüm yapılandırma parametreleri hakkında ayrıntılı bilgi içeren Jib’in github deposu hakkında her zaman daha fazlasını okuyabilirsiniz. Bu kadar okuduğunuz için teşekkür ederiz! Umarım beğenmişsindir! Geri bildiriminizi burada bırakmaktan çekinmeyin.

Benim hakkımda

Hey, durdurma için teşekkürler. Ben arka uçta ve devOps'ta vurgu yapan bağımsız bir tam yığın mühendisiyim. İş değeri yaratmayı seçen prototipler / MVP'ler ve bulutta ölçeklenen platformlar geliştirmekle ilgileniyorum.

Ben ve hikayem hakkında daha fazla bilgiyi buradan okuyabilirsiniz. İşi tartışmak veya sadece iletişime geçmek isterseniz, bana bir e-posta gönderin: tasos.tsaousis@codedlines.com.