Dockerイメージ-タイプ。スリムvsスリムストレッチvsストレッチvsアルパイン


110

私は、Javaアプリを構築するためにDockerイメージを取得し、利用可能なOpenJDKイメージのバリアントを探しています。私はここhttps://github.com/docker-library/openjdk/tree/master/8/jdkを探しており、高山、スリム、窓を見てください。これらと各バリアントの違いは何ですか?



FROM与えたリンクのDockerfile の行を読むことも有益です。AlpineイメージはDebianベースのイメージよりもはるかに小さいですが、さまざまな方法で互換性の問題が発生する可能性もあります。
David Maze、

1
これについては、イメージのREADMEDocker Hubページのイメージ)でも説明されています
David Maze

回答:


106

Dockerライブラリのドキュメント(引用と以下のリンク)ごとに、概要は次のとおりです。

  • openjdk:<version>

事実上のイメージ。不明な場合は使用してください。

  • openjdk:<version>-busteropenjdk:<version>-stretchおよびopenjdk:<version>-jessie

busterjessieまたはDebianのstretchリリースのスイートコード名であり、イメージのベースとなっているリリースを示します。

  • openjdk:<version>-alpine

同様に、このイメージはAlpine Linuxに基づいているため、非常に小さなベースイメージです。画像サイズをできるだけ小さくしたい場合にお勧めです。警告は、いくつかの異常なライブラリを使用することですが、ほとんどのソフトウェアにとって問題にはなりません。疑問がある場合は、以下の公式ドキュメントを確認してください。

  • openjdk:<version>(12以降)、openjdk:<version>-oracleおよびopenjdk:<version>-oraclelinux7

とバリアントopenjdk:12だけでなく、デフォルトのイメージから開始すると、公式のOracle Linux 7イメージに基づいています。デフォルトイメージ内のOpenJDKバイナリ、およびバリアントは、Oracleによって構築され、OpenJDKコミュニティから供給されます。-oracle-oraclelinux7-oracle-oraclelinux7

  • openjdk:<version>-slim

このイメージには、Javaの実行に必要な最小限のパッケージのみが含まれています(たとえば、UI関連のJavaライブラリの多くが欠落しています)。あなたは環境で作業している場合を除きだけopenjdk画像が展開され、あなたは、スペースの制約があり、デフォルトの画像は、このいずれかの上にお勧めします。

  • openjdk:<version>-windowsservercore

このイメージは、Windows Server Core(microsoft/windowsservercore)に基づいています



完全なドキュメント(ここ表示されるバージョンここ最新バージョン):

画像バリアント

openjdk画像は、特定のユースケースのために設計され、それぞれ、多くの種類があります。

openjdk:<version>

これは事実上のイメージです。ニーズが不明な場合は、おそらくこれを使用することをお勧めします。使い捨てコンテナ(ソースコードをマウントして、コンテナを起動してアプリを起動する)としても、他のイメージを構築するためのベースとしても使用できるように設計されています。

これらのタグの一部には、jessieやstretchなどの名前が付いている場合があります。これらはDebianのリリースのスイートコード名で あり、イメージのベースとなっているリリースを示します。

openjdk:<version>-alpine

このイメージは公式イメージで利用可能な人気のAlpine Linuxプロジェクトに基づいています。Alpine Linuxは、ほとんどの配布ベースのイメージ(約5MB)よりもはるかに小さいため、一般にイメージがはるかにスリムになります。alpine

このバリアントは、最終的な画像サイズをできるだけ小さくしたい場合に強くお勧めします。注意すべき主な注意点は、glibcやfriendsの代わりにmusl libcを使用するため、特定のソフトウェアはlibc要件の深さによっては問題が発生する可能性があることです。ただし、ほとんどのソフトウェアにはこれに関する問題がないため、このバリアントは通常、非常に安全な選択肢です。発生する可能性のある問題の詳細と、アルパインベースのイメージの使用に関する賛否両論の比較については、このハッカーニュースのコメントスレッドを参照してください。

画像サイズを最小化するために、アルパインベースの画像に追加の関連ツール(gitまたはなどbash)が含まれることは一般的ではありません。このイメージをベースとして使用して、必要なものを独自のDockerfileに追加します(不慣れな場合のパッケージのインストール方法の例については、alpineイメージの説明を参照してください)。

openjdk:<version>-windowsservercore

このイメージは、Windows Server Core(microsoft/windowsservercore)に基づいています。そのため、Windows 10 Professional / Enterprise(Anniversary Edition)やWindows Server 2016など、そのイメージが機能する場所でのみ機能します。

WindowsでDockerを実行する方法については、Microsoftが提供する関連する「クイックスタート」ガイドを参照してください。

openjdk:<version>-slim

このイメージは-headlessOpenJDK のパッケージをインストールするため、デフォルトのタグに含まれているUI関連のJavaライブラリの多くといくつかの一般的なパッケージがありません。Javaの実行に必要な最小限のパッケージのみが含まれています。あなたは環境で作業している場合を除き だけopenjdk画像が展開され、あなたは、スペースの制約があり、我々は非常にこのリポジトリのデフォルト画像を使用することをお勧めします。


1

あなたのニーズに合ったベースドッキングウィンドウの画像を選択していることを覚えておいてください画像サイズがある重要な側面でも。

イメージは、コンテナーの作成方法に関する一連の指示と見なすことができます。Dockerでは、1つのイメージを別のイメージから(またはそれに基づいて)継承し、基本イメージの上に追加の指示を追加できます。各画像は、実質的に不変である複数のレイヤーで構成されています。

完璧なJava Dockerビルドフローの作成に関する記事を読んでください。

Dockerイメージのサイズは実際には非常に重要です。サイズは以下に影響を与えます:

  • ネットワーク遅延:Web経由でDockerイメージを転送する必要があります
  • ストレージ:これらすべてのビットをどこかに保存する必要があります
  • サービスの可用性と弾力性:Kubernetes、Swarm、Nomad、DC / OSなどのDockerスケジューラーを使用する場合(スケジューラーはホスト間でコンテナーを移動できます)
  • セキュリティ:あなたは本当に、あなたのJavaアプリケーションにすべてのCVE脆弱性を含むlibpngパッケージが本当に必要なのですか?
  • 開発の俊敏性:小さなDockerイメージ==ビルド時間の短縮とデプロイメントの高速化


Javaアプリケーションを実行するには、少なくともJREが必要です。たとえば、春のプロジェクトの場合、イメージは以下に基づくことができます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"]

また、を使用docker history yourImageNameして、イメージを構成するすべてのレイヤー(およびそのサイズ)を表示することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.