Dockerizing Aplikasi Java menggunakan Jib

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan melihat Jib dan bagaimana ia mempermudah penggunaan aplikasi Java.

Kami akan mengambil aplikasi Spring Boot yang sederhana dan membina imej Dockernya menggunakan Jib. Dan kemudian kami juga akan menerbitkan gambar ke pendaftaran jauh.

Dan pastikan juga untuk merujuk kepada tutorial kami tentang dockerizing aplikasi Spring Boot menggunakan dockerfile dan d ocker alat.

2. Pengenalan Jib

Jib adalah alat Java sumber terbuka yang dikendalikan oleh Google untuk membangun gambar aplikasi Java dari Docker. Ini mempermudah penggunaan wadah kerana dengan itu, kita tidak perlu menulis file dockerfile.

Dan sebenarnya, kita tidak perlu memasang docker untuk membuat dan menerbitkan sendiri gambar-gambar pelabur.

Google menerbitkan Jib sebagai plugin Maven dan Gradle. Ini bagus kerana ini bermaksud bahawa Jib akan menangkap perubahan yang kami buat pada aplikasi kami setiap kali kami membuat. Ini menjimatkan perintah build / push docker yang terpisah dan memudahkan penambahan ini ke saluran paip CI.

Ada beberapa alat lain di luar sana juga, seperti plugin docker-maven-plugin dan dockerfile-maven Spotify, walaupun yang pertama sekarang sudah tidak digunakan lagi dan yang terakhir memerlukan file dockerfile .

3. Aplikasi Ucapan Ringkas

Mari ambil aplikasi spring-boot yang mudah dan berlabuh menggunakan Jib. Ia akan mendedahkan titik akhir GET yang mudah:

//localhost:8080/greeting

Yang boleh kita lakukan dengan sederhana dengan pengawal Spring MVC:

@RestController public class GreetingController { private static final String template = "Hello Docker, %s!"; private final AtomicLong counter = new AtomicLong(); @GetMapping("/greeting") public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); } } 

4. Menyiapkan Penyebaran

Kita juga perlu mengatur diri kita secara tempatan untuk mengesahkan dengan repositori Docker yang ingin kita gunakan.

Untuk contoh ini, kami akan memberikan kelayakan DockerHub kami ke .m2 / settings.xml :

  registry.hub.docker.com    

Terdapat cara lain untuk memberikan kelayakan juga. Cara yang disyorkan oleh Google adalah dengan menggunakan alat bantu, yang dapat menyimpan kelayakan dalam format yang dienkripsi dalam sistem fail. Dalam contoh ini, kita mungkin menggunakan pembantu dok-kredensial dan bukannya menyimpan kredensial teks biasa dalam setting.xml , yang jauh lebih selamat, walaupun hanya di luar ruang lingkup tutorial ini.

5. Menyebarkan ke Docker Hub Dengan Jib

Sekarang, kita dapat menggunakan jib-maven-plugin , atau yang setara dengan Gradle, untuk menampung aplikasi kita dengan perintah mudah :

mvn compile com.google.cloud.tools:jib-maven-plugin:2.5.0:build -Dimage=$IMAGE_PATH

di mana IMAGE_PATH adalah jalan sasaran dalam pendaftaran kontena.

Sebagai contoh, untuk memuat naik gambar baeldungjib / spring-jib-app ke DockerHub , kami akan melakukan:

export IMAGE_PATH=registry.hub.docker.com/baeldungjib/spring-jib-app

Dan itu sahaja! Ini akan membina imej docker aplikasi kami dan mendorongnya ke DockerHub .

Sudah tentu kita boleh memuat naik gambar ke Google Container Registry atau Amazon Elastic Container Registry dengan cara yang serupa .

6. Memudahkan Perintah Maven

Kami juga dapat memendekkan arahan awal kami dengan mengkonfigurasi plugin di pom kami , seperti plugin maven lain.

 ...   ...  com.google.cloud.tools jib-maven-plugin 2.5.0   ${image.path}    ...   ... 

Dengan perubahan ini, kita dapat mempermudah perintah maven kita:

mvn compile jib:build

7. Menyesuaikan Aspek Docker

Secara lalai, Jib membuat sejumlah tekaan yang munasabah mengenai apa yang kita mahukan , seperti DARI dan ENTRYPOINT.

Mari buat beberapa perubahan pada aplikasi kami yang lebih khusus untuk keperluan kami.

Pertama, Spring Boot mendedahkan port 8080 secara lalai.

Tetapi, katakanlah, kami ingin menjadikan aplikasi kami berjalan di port 8082 dan membuatnya boleh didedahkan melalui wadah.

Sudah tentu, kami akan membuat perubahan yang sesuai dalam Boot. Dan, selepas itu, kita dapat menggunakan Jib untuk membuatnya dapat dilihat dalam gambar:

 ...   8082   

Atau, katakan kita memerlukan DARI yang berbeza. Secara lalai, Jib menggunakan gambar java distro-less .

Sekiranya kita ingin menjalankan aplikasi kita pada gambar asas yang berbeza, seperti alpine-java, kita dapat mengkonfigurasinya dengan cara yang serupa:

 ...  openjdk:alpine  ... 

Kami mengkonfigurasi teg, jilid, dan beberapa arahan Docker lain dengan cara yang sama.

8. Menyesuaikan Aspek Java

Dan, berdasarkan persatuan, Jib menyokong banyak konfigurasi runtime Java juga:

  • jvmFlags adalah untuk menunjukkan bendera permulaan apa yang akan dihantar ke JVM.
  • mainClass adalah untuk menunjukkan kelas utama, yang Jib akan cuba membuat kesimpulan secara automatik secara lalai.
  • args adalah di mana kita akan menentukan argumen program yang diteruskan ke kaedah utama .

Sudah tentu, pastikan untuk melihat dokumentasi Jib untuk melihat semua sifat konfigurasi yang ada.

9. Kesimpulannya

Dalam tutorial ini, kami melihat cara membuat dan menerbitkan gambar docker menggunakan Google Jib, termasuk cara mengakses arahan docker dan konfigurasi runtime Java melalui Maven.

Seperti biasa, kod sumber untuk contoh ini terdapat di Github.