Dockerisasi Aplikasi Java menggunakan Jib

1. Ikhtisar

Dalam tutorial ini, kita akan melihat Jib dan bagaimana itu menyederhanakan containerisasi aplikasi Java.

Kami akan mengambil aplikasi Spring Boot sederhana dan membangun image Docker menggunakan Jib. Dan kemudian kami juga akan memublikasikan gambar ke registri jarak jauh.

Dan pastikan juga untuk merujuk ke tutorial kita tentang aplikasi dockerizing Spring Boot menggunakan dockerfile dan tool d ocker .

2. Pengantar Jib

Jib adalah alat Java sumber terbuka yang dikelola oleh Google untuk membuat gambar Docker dari aplikasi Java. Ini menyederhanakan containerization karena dengan itu, kita tidak perlu menulis dockerfile.

Dan sebenarnya, kami bahkan tidak perlu menginstal buruh pelabuhan untuk membuat dan mempublikasikan gambar buruh pelabuhan itu sendiri.

Google memublikasikan Jib sebagai Maven dan plugin Gradle. Ini bagus karena itu berarti Jib akan menangkap setiap perubahan yang kita buat pada aplikasi kita setiap kali kita membangunnya. Ini membuat kita tidak perlu memisahkan perintah build / push docker dan menyederhanakan penambahan ini ke pipeline CI.

Ada beberapa alat lain di luar sana, juga, seperti plugin docker-maven-plugin dan dockerfile-maven Spotify, meskipun yang pertama sekarang sudah usang dan yang terakhir membutuhkan dockerfile .

3. Aplikasi Ucapan Sederhana

Mari kita ambil aplikasi spring-boot sederhana dan melakukan dockerisasi menggunakan Jib. Ini akan mengekspos titik akhir GET sederhana:

//localhost:8080/greeting

Yang dapat kita lakukan cukup sederhana dengan pengontrol MVC Spring:

@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. Mempersiapkan Penerapan

Kita juga perlu mengatur diri kita sendiri secara lokal untuk mengotentikasi dengan repositori Docker yang ingin kita terapkan.

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

  registry.hub.docker.com    

Ada cara lain untuk memberikan kredensial juga. Cara yang direkomendasikan oleh Google adalah menggunakan alat bantu, yang dapat menyimpan kredensial dalam format terenkripsi di sistem file. Dalam contoh ini, kita bisa menggunakan docker-credential-helpers daripada menyimpan kredensial teks biasa di settings.xml , yang jauh lebih aman, meskipun di luar cakupan tutorial ini.

5. Menerapkan ke Docker Hub Dengan Jib

Sekarang, kita bisa menggunakan jib-maven-plugin , atau yang setara dengan Gradle, untuk memasukkan aplikasi kita ke dalam container dengan perintah sederhana :

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

dengan IMAGE_PATH adalah jalur target di registri penampung.

Misalnya, untuk mengupload image baeldungjib / spring-jib-app ke DockerHub , kami akan melakukan:

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

Dan itu dia! Ini akan membangun image buruh pelabuhan dari aplikasi kita dan mendorongnya ke DockerHub .

Kami tentu saja dapat mengunggah gambar ke Google Container Registry atau Amazon Elastic Container Registry dengan cara yang serupa .

6. Menyederhanakan Perintah Maven

Juga, kita dapat mempersingkat perintah awal kita dengan mengkonfigurasi plugin di pom kita , seperti plugin maven lainnya.

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

Dengan perubahan ini, kita dapat menyederhanakan perintah maven kita:

mvn compile jib:build

7. Menyesuaikan Aspek Docker

Secara default, Jib membuat sejumlah tebakan yang masuk akal tentang apa yang kita inginkan , seperti FROM dan ENTRYPOINT.

Mari buat beberapa perubahan pada aplikasi kita yang lebih spesifik untuk kebutuhan kita.

Pertama, Spring Boot menampilkan port 8080 secara default.

Tetapi, katakanlah, kita ingin membuat aplikasi kita berjalan pada port 8082 dan membuatnya dapat diekspos melalui sebuah kontainer.

Tentu saja, kami akan membuat perubahan yang sesuai di Boot. Dan, setelah itu, kita bisa menggunakan Jib untuk membuatnya bisa diekspos di gambar:

 ...   8082   

Atau, katakanlah kita membutuhkan FROM yang berbeda. Secara default, Jib menggunakan image java tanpa distro .

Jika kita ingin menjalankan aplikasi kita pada gambar dasar yang berbeda, seperti alpine-java, kita dapat mengkonfigurasinya dengan cara yang sama:

 ...  openjdk:alpine  ... 

Kami mengonfigurasi tag, volume, dan beberapa direktif Docker lainnya dengan cara yang sama.

8. Menyesuaikan Aspek Java

Dan, berdasarkan asosiasi, Jib juga mendukung banyak konfigurasi runtime Java:

  • jvmFlags adalah untuk menunjukkan tanda startup apa yang akan diteruskan ke JVM.
  • mainClass adalah untuk menunjukkan kelas utama, yang akan coba disimpulkan Jib secara otomatis secara default.
  • args adalah tempat kami menentukan argumen program yang diteruskan ke metode utama .

Tentu saja, pastikan untuk memeriksa dokumentasi Jib untuk melihat semua properti konfigurasi yang tersedia.

9. Kesimpulan

Dalam tutorial ini, kami melihat cara membuat dan memublikasikan gambar buruh pelabuhan menggunakan Jib Google, termasuk cara mengakses direktif buruh pelabuhan dan konfigurasi waktu proses Java melalui Maven.

Seperti biasa, kode sumber untuk contoh ini tersedia di Github.