Bagaimana untuk mengawal aplikasi boot spring dengan Google Jib

Imej 1: Imej docker java tanpa pemula dengan Jib!

Hello! Semasa bekerja pada platform berasaskan musim bunga baru-baru ini, saya sedang menimbangkan cara untuk pergi membanting mikro mikroservice. Jadi, saya berjumpa dengan Jib, pendekatan yang agak baru mengenai perkara itu, yang dibangunkan oleh Google.

Siaran ini adalah mengenai penggunaan Jib, dan lebih khusus jib-maven-plugin, untuk membina aplikasi boot spring containerized.

Projek demo yang digunakan dalam siaran ini boleh didapati di sini:

Apa jib itu

Apa yang dibawa Jib ke meja ialah ia membolehkan anda membuat bekas dengan hanya menambah plugin ke alat binaan pilihan anda (Maven atau Gradle). Tiada fail tambahan, hanya beberapa baris konfigurasi dan ia mengendalikan semua langkah pembungkusan permohonan anda ke dalam imej bekas.

Dengan kata laluan pasukan awan Google:

Jib adalah containerizer Java sumber terbuka dari Google yang membolehkan pemaju Java membina bekas dengan menggunakan alat Java yang mereka tahu. Ia tidak memerlukan anda untuk menulis Dockerfile atau mempunyai docker dipasang, dan ia secara langsung diintegrasikan ke Maven dan Gradle.

Dalam "tradisional" Java untuk aliran membina imej Docker, kita memerlukan fail Docker dan docker daemon dipasang, seperti yang ditunjukkan di bawah:

Imej 2: Langkah-langkah tradisional untuk membuat imej docker dari aplikasi Java.

Seperti yang ditunjukkan dalam gambar rajah, dalam aliran pembinaan Jib anda hanya perlu plugin projek membina fail:

Imej 3: Cara Jib untuk membuat imej docker dari aplikasi Java.

Persediaan

Ia bukan dalam skop jawatan ini untuk menubuhkan persekitaran pembangunan Java, tapi mari kita ambil satu pukulan!

  1. Pastikan anda memasang Java 8+.
  2. Kami akan menggunakan maven, jadi jika tidak ada memasang maven 3.5+.
  3. Pastikan anda memasang docker dan jika anda menggunakan Linux, pengguna anda mempunyai akses docker.
  4. Sediakan IDE kegemaran anda (gerhana atau idea).

Buat aplikasi boot spring asas

Ini boleh dilakukan melalui spring initializr, atau melalui IDE kegemaran anda. Jika anda menggunakan initializr spring anda perlu mengimport projek maven yang baru dibuat ke dalam IDE anda (gerhana / idea).

Tambah jib-maven-plugin ke pom.xml anda

Untuk imej yang sangat asas dalam apl tempatan anda, konfigurasikan jib-maven-plugin di pom.xml anda sebagai berikut:

Menyusun aplikasi dan membina imej

Sekarang kita boleh membina aplikasi itu dan periksa sama ada imej itu dibuat di repositori docker tempatan kita.

Pergi ke folder root projek melalui terminal, dan laksanakan:

mvn compile jib: dockerBuild

Maven membina log harus mengandungi baris seperti berikut:

[INFO] - - jib-maven-plugin: 0.10.1: dockerBuild (default-cli) @ spring-boot-jib - -
[INFO]
[INFO] Meliputi permohonan untuk Docker daemon sebagai springbootjib ...
[AMARAN] Imej asas 'gcr.io/distroless/java' tidak menggunakan pencernaan imej tertentu - membina mungkin tidak boleh dihasilkan
[INFO] Mendapatkan imej asas gcr.io/distroless/java ...
[INFO] Membina lapisan pergantungan ...
[INFO] Membina lapisan sumber ...
[INFO] Membina kelas kelas ...
[INFO] Memuktamadkan ...
[INFO]
[INFO] Tempat masuk kontena ditetapkan kepada [java, -cp, / app / sumber: / aplikasi / kelas: / app / libs / *, com.jibdemo.SpringBootJibApplication]
[INFO] Loading to daemon Docker ...
[INFO]
[INFO] Membina imej untuk Docker daemon sebagai springbootjib

Selagi tidak ada kesilapan dan kita lihat maven itu "Membina imej untuk Docker daemon sebagai springbootjib" kita semua ditetapkan.

Jalankan imej docker

Pada ketika ini kita harus mempunyai imej pelindung baru di repositori tempatan kita. Kita boleh menyemak dengan melaksanakan lek gambar docker dan kita harus melihat imej yang serupa dengan ini:

springbootjib terkini eb4bea693650 3 jam yang lalu 135MB

Perhatikan saiz imej yang sangat kecil (135mb), yang disebabkan oleh imej gcr.io/distroless/java yang menggunakan Jib secara lalai (kami akan melihat bagaimana kita boleh mengubahnya kemudian).

Jadi sekarang kita boleh jalankan imej seperti biasa dengan menaip docker run -it springbootjib dan sahkan bahawa aplikasi berjalan seperti yang diharapkan.

Mengkonfigurasi plugin Jib untuk menyempurnakan imej Docker kami

Kita boleh menggali lebih mendalam, dan mengkonfigurasi plugin Jib selanjutnya, untuk memuat beberapa senario umum seperti login ke repositori docker, mendedahkan port, memilih imej dasar tertentu dan sebagainya.

Contohnya dalam konfigurasi berikut imej:

  • Dibina dari asas openjdk: alpine (ditarik dari Hab Docker)
  • Ditolak ke localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, dan localhost: 5000 / springbootjib: terbaru
  • Berjalan dengan menelefon java -Xms256m -Xdebug -cp app / libs / *: app / resources: app / classes com.jibdemo.SpringBootJibApplication some args
  • Paparkan port 8001 untuk tcp (lalai), dan port 8002 dan 8003 untuk udp
  • Mempunyai label (nama: springbootjib)
  • Dibina sebagai format OCI

Sekarang anda boleh membina imej sekali lagi, dan melihat perbezaan dalam log maven:

[INFO] --- jib-maven-plugin: 0.10.1: dockerBuild (default-cli) @ spring-boot-jib ---
[INFO]
[INFO] Meliputi permohonan kepada Docker daemon sebagai localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, localhost: 5000 / springbootjib ...
[INFO] Mendapatkan imej dasar ...
[INFO] Membina lapisan pergantungan ...
[INFO] Membina lapisan sumber ...
[INFO] Membina kelas kelas ...
[INFO] Imej asas memerlukan auth. Cuba lagi untuk openjdk: alpine ...
[INFO] Mendapatkan kelayakan pendaftaran untuk registry.hub.docker.com ...
[INFO] Memuktamadkan ...
[INFO]
[INFO] Tempat masuk kontena ditetapkan kepada [java, -Xms256m, -Xdebug, -cp, / app / sumber: / aplikasi / kelas: / app / libs / *, com.jibdemo.SpringBootJibApplication]
[INFO] Loading to daemon Docker ...
[INFO]
[INFO] Imej yang dibina untuk daemon Docker sebagai localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, localhost: 5000 / springbootjib

Perhatikan di segmen log di atas bahawa plugin menarik openjdk imej: alpine dari Hub Docker, membina imej tersebut kepada tiga versi yang berbeza tag dan menyimpannya dalam repositori tempatan kami.

Kenapa saya menembak dengan Jib

  • Anda tidak perlu mengekalkan fail Docker, menjalankan daemon Docker, atau bimbang tentang membuat JAR lemak dengan semua dependensinya.
  • Mengambil kesempatan daripada lapisan imej dan caching pendaftaran untuk mencapai pembentukan yang cepat, bertambah.
  • Boleh dikonfigurasikan untuk membuat imej membina yang boleh dihasilkan selagi input anda tetap sama.

Kesimpulannya

Setelah menggunakan plugin maven lain seperti orang-orang dari spotify dan fabric8 untuk membuat gambar docker untuk aplikasi java, saya mengalu-alukan Google mengambil perkara itu. Ia memerlukan sedikit fail daripada plugin fabric8, dan (dalam pendapat saya yang sederhana) merasakan lebih mudah untuk mengkonfigurasi daripada plugin spotify. Saya pasti mengesyorkan untuk mencubanya!

Penafian: Ini bukan artikel perbandingan, hanya pandangan saya mengenai perkara yang disokong dari pengalaman peribadi.

Anda boleh membaca lebih lanjut mengenai replikasi github Jib, yang mempunyai maklumat menyeluruh mengenai semua parameter konfigurasi. Terima kasih kerana membaca sejauh ini! Saya harap anda menikmati! Jangan ragu untuk meninggalkan maklum balas anda di sini.

Tentang saya

Hei, terima kasih kerana berhenti. Saya seorang jurutera stack penuh bebas, menekankan pada hujung belakang dan devOps. Saya berminat untuk mewujudkan prototaip / MVP dan membangun platform yang skala di awan, memilih untuk mencipta nilai perniagaan.

Anda boleh membaca lebih lanjut tentang saya dan cerita saya di sini. Sekiranya anda ingin membincangkan perniagaan atau hanya berhubung, hantarkan e-mel kepada saya: tasos.tsaousis@codedlines.com.