基本的なDockerイメージ(openjdk)を使用して、単純なJava Programme。
しかし、私はdockerファイルで2つの基本イメージを使用するかどうか疑問に思っていました。どうすればそれができますか?私はドッカーが次のようなものをサポートしているとは思いません:
FROM dockerImaage1
FROM dockerImage2
シナリオの1つ、これが必要な理由は、ubuntu
のイメージがopenjdk
であることです。そのため、ubuntuの基本イメージとin dockerファイルの書き込み命令を使用してopenjdkをインストールします、Java_HOME変数などを設定します。これは間違いなく面倒です。
別の方法として、ubuntuのベース内でopenjdk
のベースイメージを使用することもできます(可能な場合)。
より典型的なケースがあるかもしれませんが、私たちが必要とする可能性があるのは、機能がひどく酷いことです。
SODockerファイルで2つの基本イメージを使用する方法についてのアイデア?誰かそれをまだ行ったことがありますか?
リバースエンジニアリングのリンクを見つけました here ですが、ubuntuのdockerファイルでADDやCOPYなどのコマンドを使用するとリバースエンジニアリングが失敗するなど、いくつかの制限があります。
Dockerの最新バージョンには、マルチステージビルドの概念があります。参照:( https://docs.docker.com/engine/userguide/eng-image/multistage-build/ )
マルチステージビルドでは、Dockerfileで複数のFROMステートメントを使用します。各FROM命令は異なるベースを使用でき、それぞれがビルドの新しいステージを開始します。あるステージから別のステージにアーティファクトを選択的にコピーして、最終的なイメージに不要なものを残しておくことができます。
答えはいいえだ。 Mobyの問題の詳細な説明を参照してください Dockerfileを使用して複数のイメージを1つに結合する方法 。
コンテナの背後にある考え方は、実際の構成の最小単位はコンテナであるということです。一般に、複数の画像を1つの画像にマージすると、いくつかの問題が発生する可能性があります。たとえば、ライブラリまたはライブラリのバージョンで異なるイメージが競合しています。
簡単に?いいえ。複数のLinuxルートファイルシステムを効果的に組み合わせるため、Dockerはこれをサポートしていません。
これを行う最も簡単な方法は、Ubuntuから開始してopenjdkをインストールするか、すでにそうしているdockerハブでイメージを見つけることです。