Java アプリケーションを Docker 化する
Docker を使用して、コンパイル済みの Java アプリケーションを、特定のランタイム環境およびその他の必要な依存関係と共にイメージにパックできます。 その後、そのイメージからコンテナーを実行して、アプリケーションがこの環境でどのように実行されるかを確認できます。 これは、アプリケーションの Docker 化と呼ばれます。
このチュートリアルでは、Dockerfile を作成して、OpenJDK 17 とコンパイル済みの Java アプリケーションを使用して Docker イメージをビルドする方法について説明します。 また、このイメージを他のユーザーと共有し、そこから Docker コンテナーを実行する方法も示します。
新規 Java プロジェクトを作成する
このチュートリアルのサンプルアプリケーションは、 Hello, World! をコンソールに出力して終了する単一の HelloWorld.java ファイルで構成されます。
メインメニューで へ移動します。
新規プロジェクト ウィザードで、 新規プロジェクト リストから Java を選択します。
新規プロジェクト ダイアログで、プロジェクトに
DockerHelloWorldという名前を付けます。
src ディレクトリにメイン Java クラスファイル HelloWorld.java を作成します。
これを行うには、 プロジェクト ツールウィンドウで、 src ディレクトリを右クリックし、 新規 をポイントして、 Java クラス をクリックします。 新規Java クラス ダイアログで、
HelloWorldと入力し、 Enter を押します。次のコードを新しいファイルに貼り付けます。
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }アプリケーションをコンパイルして実行してみてください。
ガターの
をクリックして 'HelloWorld.main()' の実行 を選択します。
実行 ツールウィンドウのコンソールに
Hello, World!が印刷されているのが見えるはずです。
デフォルトでは、IntelliJ IDEA はプロジェクトディレクトリの /out/production/DockerHelloWorld/ にある HelloWorld.class ファイルに出力をコンパイルします。ここで、 DockerHelloWorld は現在のモジュールの名前です。
Dockerfile を作成する
プロジェクト ツールウィンドウ Alt+1 でプロジェクトルートを右クリックし、 新規 をポイントして ファイル をクリックします。
新規ファイル… ダイアログで、 Dockerfile と入力し、 Enter を押します。
次のコードを新しい Dockerfile に貼り付けます。
FROM openjdk:17 COPY ./out/production/DockerHelloWorld/ /tmp WORKDIR /tmp ENTRYPOINT ["java","HelloWorld"]
この Dockerfile には、 Docker Hub の openjdk:17 画像をもとに画像を構築するための手順が含まれています。 このイメージからコンテナーを実行すると、Docker はプロジェクトの出力ディレクトリの内容をコンテナーの /tmp ディレクトリにコピーします (この場合、出力ディレクトリにはメインクラス HelloWorld.class が含まれます)。 次に、Docker は現在の作業ディレクトリを /tmp に設定し、 java HelloWorld を実行します。 その結果、コンテナーログに Hello, World! が出力されるはずです。
イメージをビルドして実行する
Dockerfile 内のガターで、
をクリックし、 'Docker' で実行 を選択します。

IntelliJ IDEA は Dockerfile実行構成 を作成します。これにより、Dockerfile からイメージをビルドし、そのイメージに基づいてコンテナーを実行します。 全体のプロセスを確認するには、 サービス ツールウィンドウの ログ タブを開きます。

たとえば、必要なランタイムをインストールする必要なく、アプリケーションの実行方法を正確に示すために、イメージを他の人と共有することができます(Docker のみが必要です)。
Java アプリケーションを Docker イメージとして共有する
サービス ツールウィンドウで、Dockerfile から作成されたイメージを見つけます。
デフォルトでは、イメージの作成時にイメージタグが提供されなかったため、一意のイメージ ID で指定されます。 対応する実行構成を編集し、選択したイメージタグを指定して、構成を再実行できます。
イメージを見つけるには、実行中のコンテナーを右クリックし、 を選択します。

必要な ID を持つイメージを右クリックし、コンテキストメニューで イメージのプッシュ… をクリックします。
イメージのプッシュ ダイアログでレジストリを選択し、イメージのリポジトリ名とタグを指定して、 OK をクリックします。
Docker がイメージをレジストリにプッシュすると、そのイメージにアクセスできる人は誰でもイメージをプルして、このイメージからコンテナーを実行できます。 Dockerfile で設定した特定のランタイムバージョンでアプリケーションの正確なバージョンを実行することを確認できます。