Docker görüntüleri - türler. İnce ve ince-streç, alpin vs streç


110

Bir java uygulaması oluşturmak için bir docker görüntüsü seçip mevcut OpenJDK görüntülerinin çeşitlerine bakıyorum. Buraya https://github.com/docker-library/openjdk/tree/master/8/jdk bakıyorum ve alp, ince ve pencereleri görüyorum. Bunlar arasındaki farklar nelerdir ve her varyant ne verir?



FROMVerdiğiniz bağlantıdaki Dockerfiles satırlarını okumak da bilgilendirici. Alpine görüntüleri Debian tabanlı görüntülerden çok daha küçüktür, ancak çeşitli şekillerde uyumluluk sorunlarıyla da karşılaşabilir.
David Maze

1
Bu aynı zamanda README görüntüsünde de açıklanmıştır ( görüntü Docker Hub sayfasından ).
David Maze

Yanıtlar:


106

Docker kitaplık belgelerine göre (aşağıdaki alıntılar ve bağlantılar), işte bir özet:

  • openjdk:<version>

Gerçek imaj. Emin değilseniz kullanın.

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

buster, jessieYa stretchsalıverilmeleri için paketi kod isimler Debian ve hangi belirtmek bırakın görüntü dayanmaktadır.

  • openjdk:<version>-alpine

Benzer şekilde, bu görüntü Alpine Linux'a dayalıdır , dolayısıyla çok küçük bir temel görüntüdür. Mümkün olduğunca küçük bir görüntü boyutuna ihtiyacınız varsa önerilir. Uyarı, bazı alışılmadık kütüphaneler kullanması, ancak çoğu yazılım için sorun olmaması gerektiğidir. Şüpheniz varsa, aşağıdaki resmi belgelere bakın.

  • openjdk:<version>(12'den itibaren) openjdk:<version>-oracleveopenjdk:<version>-oraclelinux7

openjdk:12Varsayılan görüntüden başlayarak -oracleve -oraclelinux7varyantları resmi Oracle Linux 7 görüntüsüne dayalıdır . Varsayılan görüntüdeki OpenJDK ikili dosyaları -oracleve -oraclelinux7varyantları Oracle tarafından oluşturulur ve OpenJDK topluluğundan alınır .

  • openjdk:<version>-slim

Bu görüntü yalnızca Java'yı çalıştırmak için gereken minimum paketleri içerir (ve örneğin, UI ile ilgili Java kitaplıklarının çoğunda eksik). Nerede bir ortamda çalışıyoruz sürece sadeceopenjdk görüntü görev yapacak ve uzay kısıtlamaları, varsayılan görüntü bu bir yere önerilir.

  • openjdk:<version>-windowsservercore

Bu görüntü, Windows Server Core'a ( microsoft/windowsservercore) dayanmaktadır .



Tam belgeler ( sürüm aşağıda gösterilmiştir , en son sürüm burada ):

Resim Çeşitleri

openjdkGörüntüler birçok tatlar, belirli bir kullanım durumu için tasarlanmış her gelir.

openjdk:<version>

Bu, fiili görüntüdür. İhtiyaçlarınızın ne olduğundan emin değilseniz, muhtemelen bunu kullanmak istersiniz. Hem atılan bir konteyner (kaynak kodunuzu monte edin ve uygulamanızı başlatmak için konteyneri başlatın) hem de diğer görüntüleri oluşturmak için temel olarak kullanılmak üzere tasarlanmıştır.

Bu etiketlerden bazılarının içinde jessie veya stretch gibi isimler olabilir. Bunlar, Debian sürümleri için paket kod isimleridir ve görüntünün hangi sürüme dayandığını gösterir.

openjdk:<version>-alpine

Bu görüntü popüler dayanmaktadır Alp Linux projesi mevcuttur, resmi görüntüsü . Alpine Linux, çoğu dağıtım temel görüntüsünden (~ 5MB) çok daha küçüktür ve bu nedenle genel olarak çok daha ince görüntülere yol açar.alpine

Bu varyant, nihai görüntü boyutunun olabildiğince küçük olması istendiğinde şiddetle tavsiye edilir. Dikkat edilmesi gereken ana uyarı , glibc ve friends yerine musl libc kullanmasıdır , bu nedenle bazı yazılımlar, libc gereksinimlerinin derinliğine bağlı olarak sorunlarla karşılaşabilir. Bununla birlikte, çoğu yazılımın bununla bir sorunu yoktur, bu nedenle bu değişken genellikle çok güvenli bir seçimdir. Ortaya çıkabilecek sorunlar hakkında daha fazla tartışma ve Alpine tabanlı görüntüleri kullanmanın bazı olumlu / olumsuz karşılaştırmaları için bu Hacker News yorum başlığına bakın .

Görüntü boyutunu en aza indirmek için, ilgili ek araçların ( gitveya gibi bash) Alp tabanlı görüntülere dahil edilmesi nadirdir . Bu görüntüyü temel olarak kullanarak, ihtiyaç duyduğunuz şeyleri kendi Dockerfile'ınıza ekleyin ( aşina değilseniz paketlerin nasıl kurulacağına dair örnekler için alpinegörüntü açıklamasına bakın ).

openjdk:<version>-windowsservercore

Bu görüntü, Windows Server Core'a ( microsoft/windowsservercore) dayanmaktadır . Bu nedenle, yalnızca Windows 10 Professional / Enterprise (Anniversary Edition) veya Windows Server 2016 gibi bu görüntünün yaptığı yerlerde çalışır.

Docker'ın Windows üzerinde nasıl çalıştırılacağı hakkında bilgi için lütfen Microsoft tarafından sağlanan ilgili "Hızlı Başlangıç" kılavuzuna bakın:

openjdk:<version>-slim

Bu görüntü -headless, OpenJDK paketini yükler ve bu nedenle kullanıcı arabirimiyle ilgili Java kitaplıklarının birçoğu ve varsayılan etiketin içerdiği bazı ortak paketler eksiktir. Yalnızca Java'yı çalıştırmak için gereken minimum paketleri içerir. Nerede bir ortamda çalışıyoruz sürece sadeceopenjdk görüntü görev yapacak ve mekan kısıtlamaları var, biz çok bu depo varsayılan görüntüsünü kullanılması önerilir.


1

İhtiyaçlarınıza uyan temel bir docker görüntüsü seçin ve lütfen Görüntü boyutunun da önemli bir husus olduğunu unutmayın .

Görüntü, kabın nasıl oluşturulacağına dair bir dizi talimat olarak düşünülebilir. Docker'da, bir görüntü başka bir görüntüden miras alınabilir (veya buna dayanarak), temel olanların üzerine ek talimatlar eklenebilir. Her görüntü, etkili bir şekilde değiştirilemeyen birden çok katmandan oluşur.

Plase okumak mükemmel Java Docker inşa akışı hazırlama makaleye.

Docker görüntü boyutu aslında çok önemlidir. Boyutun aşağıdakiler üzerinde etkisi vardır:

  • ağ gecikmesi : Docker görüntüsünü web üzerinden aktarmanız gerekir
  • depolama : tüm bu bitleri bir yerde saklamanız gerekiyor
  • hizmet kullanılabilirliği ve esneklik : Kubernetes, Swarm, Nomad, DC / OS veya diğerleri gibi bir Docker zamanlayıcı kullanırken (planlayıcı, kapsayıcıları ana bilgisayarlar arasında taşıyabilir)
  • güvenlik : Java uygulamanız için tüm CVE güvenlik açıklarına sahip libpng paketine gerçekten ihtiyacınız var mı?
  • geliştirme çevikliği : küçük Docker görüntüleri == daha hızlı derleme süresi ve daha hızlı dağıtım


Bir java uygulamasını çalıştırmak için en azından JRE'ye ihtiyacınız var. Örneğin, bir bahar projesi için görüntünüz şunlara dayanabilir 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"]

Ayrıca docker history yourImageNameresminizi oluşturan tüm katmanları (ve boyutlarını) görmek için kullanabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.