Gambar Docker - tipe. Ramping vs peregangan ramping vs peregangan vs alpine

110

Saya mencari untuk mengambil gambar buruh pelabuhan untuk membangun aplikasi java dan melihat varian gambar OpenJDK yang tersedia. Saya mencari di sini https://github.com/docker-library/openjdk/tree/master/8/jdk dan melihat alpine, slim dan windows. Apa perbedaan antara ini dan apa yang diberikan setiap varian?

mailtobash
sumber
Kemungkinan duplikat gambar Docker Python 3.7
David Maze
Membaca FROMbaris Dockerfiles di tautan yang Anda berikan juga informatif. Gambar Alpine jauh lebih kecil daripada gambar berbasis Debian, tetapi juga dapat menghadapi masalah kompatibilitas dalam berbagai cara.
David Maze
1
Hal ini juga dijelaskan pada image README (dari image halaman Docker Hub ).
David Maze

Jawaban:

106

Per dokumen perpustakaan buruh pelabuhan (kutipan dan tautan di bawah), berikut ringkasannya:

  • openjdk:<version>

Gambar defacto. Gunakan jika tidak yakin.

  • openjdk:<version>-buster, openjdk:<version>-stretchdanopenjdk:<version>-jessie

buster, jessieatau stretchmerupakan nama kode suite untuk rilis Debian dan menunjukkan rilis mana gambar tersebut didasarkan.

  • openjdk:<version>-alpine

Demikian pula, gambar ini didasarkan pada Alpine Linux , sehingga menjadi gambar dasar yang sangat kecil. Disarankan jika Anda membutuhkan ukuran gambar sekecil mungkin. Peringatannya adalah ia menggunakan beberapa lib yang tidak biasa, tetapi seharusnya tidak menjadi masalah bagi kebanyakan perangkat lunak. Jika ragu, periksa dokumen resmi di bawah.

  • openjdk:<version>(dari 12 dan seterusnya), openjdk:<version>-oracledanopenjdk:<version>-oraclelinux7

Dimulai dengan openjdk:12gambar default serta varian -oracledan -oraclelinux7didasarkan pada gambar resmi Oracle Linux 7 . Biner OpenJDK dalam image default serta varian -oracledan -oraclelinux7dibuat oleh Oracle dan bersumber dari komunitas OpenJDK .

  • openjdk:<version>-slim

Gambar ini hanya berisi paket minimal yang diperlukan untuk menjalankan Java (dan kehilangan banyak pustaka Java terkait UI, misalnya). Kecuali Anda bekerja dalam lingkungan di mana hanya satu openjdkgambar akan dikerahkan dan Anda memiliki kendala ruang, gambar default dianjurkan atas ini.

  • openjdk:<version>-windowsservercore

Gambar ini didasarkan pada Windows Server Core ( microsoft/windowsservercore) .



Dokumen lengkap ( versi ditunjukkan di bawah ini , versi terbaru di sini ):

Varian Gambar

The openjdkgambar datang dalam berbagai rasa, masing-masing dirancang untuk kasus penggunaan tertentu.

openjdk:<version>

Ini adalah gambar defacto. Jika Anda tidak yakin tentang apa kebutuhan Anda, Anda mungkin ingin menggunakan yang ini. Ini dirancang untuk digunakan baik sebagai wadah sekali pakai (pasang kode sumber Anda dan mulai wadah untuk memulai aplikasi Anda), serta sebagai basis untuk membuat gambar lain.

Beberapa dari tag ini mungkin memiliki nama seperti jessie atau sebutan di dalamnya. Ini adalah nama kode suite untuk rilis Debian dan menunjukkan rilis mana gambar tersebut didasarkan.

openjdk:<version>-alpine

Gambar ini didasarkan pada populer proyek Alpine Linux , tersedia di dalam alpinegambar resmi . Alpine Linux jauh lebih kecil daripada kebanyakan gambar dasar distribusi (~ 5MB), dan dengan demikian menghasilkan gambar yang jauh lebih ramping secara umum.

Varian ini sangat disarankan jika diinginkan ukuran gambar akhir sekecil mungkin. Peringatan utama yang perlu diperhatikan adalah ia menggunakan musl libc alih-alih glibc dan teman-teman , jadi perangkat lunak tertentu mungkin mengalami masalah bergantung pada kedalaman persyaratan libc mereka. Namun, sebagian besar perangkat lunak tidak memiliki masalah dengan ini, jadi varian ini biasanya merupakan pilihan yang sangat aman. Lihat utas komentar Hacker News ini untuk diskusi lebih lanjut tentang masalah yang mungkin muncul dan beberapa perbandingan pro / kontra dalam menggunakan gambar berbasis Alpine.

Untuk meminimalkan ukuran gambar, tidak umum alat terkait tambahan (seperti gitatau bash) disertakan dalam gambar berbasis Alpine. Menggunakan image ini sebagai basis, tambahkan hal-hal yang Anda perlukan di Dockerfile Anda sendiri (lihat alpinedeskripsi image untuk contoh cara menginstal paket jika Anda tidak terbiasa).

openjdk:<version>-windowsservercore

Gambar ini didasarkan pada Windows Server Core ( microsoft/windowsservercore) . Dengan demikian, ini hanya berfungsi di tempat-tempat yang berfungsi gambar itu, seperti Windows 10 Professional / Enterprise (Anniversary Edition) atau Windows Server 2016.

Untuk informasi tentang cara menjalankan Docker di Windows, lihat panduan "Mulai Cepat" yang relevan yang disediakan oleh Microsoft:

openjdk:<version>-slim

Gambar ini menginstal -headlesspaket OpenJDK sehingga kehilangan banyak library Java terkait UI dan beberapa paket umum yang terdapat dalam tag default. Ini hanya berisi paket minimal yang diperlukan untuk menjalankan Java. Kecuali Anda bekerja dalam lingkungan di mana hanya satu openjdkgambar akan dikerahkan dan Anda memiliki kendala ruang, kami sangat merekomendasikan menggunakan gambar default dari repositori ini.

acdcjunior.dll
sumber
1

Pilih gambar buruh pelabuhan dasar yang sesuai dengan kebutuhan Anda dan harap diingat bahwa ukuran gambar juga merupakan aspek penting .

Gambar dapat dianggap sebagai sekumpulan instruksi tentang cara membuat wadah. Di Docker, satu gambar dapat diwarisi dari (atau berdasarkan) gambar lain, menambahkan instruksi tambahan di atas gambar dasar. Setiap gambar terdiri dari beberapa lapisan, yang secara efektif tidak dapat diubah.

Silakan baca Membuat artikel alur build Java Docker yang sempurna .

Ukuran gambar Docker sebenarnya sangat penting. Ukuran berdampak pada:

  • latensi jaringan : perlu mentransfer gambar Docker melalui web
  • penyimpanan : perlu menyimpan semua bit ini di suatu tempat
  • ketersediaan layanan dan elastisitas : saat menggunakan penjadwal Docker, seperti Kubernetes, Swarm, Nomad, DC / OS atau lainnya (penjadwal dapat memindahkan kontainer antar host)
  • keamanan : apakah Anda benar-benar, maksud saya benar-benar membutuhkan paket libpng dengan semua kerentanan CVE-nya untuk aplikasi Java Anda?
  • ketangkasan pengembangan : gambar Docker kecil == waktu pembuatan lebih cepat dan penerapan lebih cepat


Untuk menjalankan aplikasi java Anda membutuhkan JRE setidaknya. Misalnya, untuk proyek musim semi, gambar Anda dapat didasarkan pada slim Alpine Linux with OpenJDK JRE:

#simple dockerFile for java app:

#here we are using Base Alpine Linux based image with OpenJDK JRE only
#For Java 8, try this
FROM openjdk:8-jre-alpine

#For Java 11, try this
#FROM adoptopenjdk/openjdk11:alpine-jre

#copy application WAR/JAR (with libraries inside)
COPY target/spring-boot-*.war/jar yourName.war/jar
# specify default command
CMD ["/usr/bin/java", "-jar", "/yourName.war/jar"]

Anda juga dapat menggunakan docker history yourImageNameuntuk melihat semua lapisan (dan ukurannya) yang membuat gambar Anda.

Ghasem Sadeghi
sumber