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 を作成する
プロジェクトツールウィンドウでプロジェクト名を右クリックし、新規をポイントしてファイルをクリックします。
新規ファイルダイアログで、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 ログ Docker log](https://resources.jetbrains.com/help/img/idea/2024.1/docker_new_project_dockerfile.png)
たとえば、必要なランタイムをインストールする必要なく、アプリケーションの実行方法を正確に示すために、イメージを他の人と共有することができます(Docker のみが必要です)。
Java アプリケーションを Docker イメージとして共有する
サービスツールウィンドウで、Dockerfile から作成されたイメージを見つけます。
デフォルトでは、イメージの作成時にイメージタグが提供されなかったため、一意のイメージ ID で指定されます。対応する実行構成を編集し、選択したイメージタグを指定して、構成を再実行できます。
イメージを見つけるには、実行中のコンテナーを右クリックし、
を選択します。必要な ID を持つイメージを右クリックし、コンテキストメニューでイメージのプッシュをクリックします。
イメージのプッシュダイアログでレジストリを選択し、イメージのリポジトリ名とタグを指定して、OK をクリックします。
Docker がイメージをレジストリにプッシュすると、そのイメージにアクセスできる人は誰でもイメージをプルして、このイメージからコンテナーを実行できます。Dockerfile で設定した特定のランタイムバージョンでアプリケーションの正確なバージョンを実行することを確認できます。
関連ページ:
![](https://resources.jetbrains.com/help/img/idea/2024.1/03_DockerSettings.png)
Docker
Docker は、分離された再現可能な環境で実行可能ファイルをデプロイおよび実行するためのツールです。これは、たとえば、本番環境と同じ環境でコードをテストする場合に役立ちます。IntelliJ IDEA は Docker 機能を統合し、Docker イメージの作成、Docker コンテナーの実行、Docker Compose アプリケーションの管理、パブリックおよびプライベート Docker レジストリの使用など、IDE から直接実行するための支援を提供します。Docker プラグインを有効にする...
![](https://resources.jetbrains.com/help/img/idea/2024.1/dockerfile-run-config.png)
Dockerfile 実行構成
このタイプの構成を使用して、Dockerfile からイメージを構築し、このイメージからコンテナーを派生させます。Docker は、docker ビルドコマンドを使用して Dockerfile からイメージをビルドし、次に docker 実行コマンドを使用してそこからコンテナーを開始します。デフォルトでは、Dockerfile 構成には以下のオプションがあります。名前実行構成の名前を指定して、編集または実行時に他の構成の間ですばやく識別できるようにします。複数のインスタンスを許可するこの実行構成の複...
![](https://resources.jetbrains.com/help/img/idea/2024.1/add_new_docker_registry_dialog.png)
Docker イメージ
Docker イメージは、コンテナーを実行するための実行可能パッケージです。Docker はレジストリを使用してイメージを配布します。デフォルトでは、IntelliJ IDEA は Docker Hub を使用します。これは、さまざまな Linux フレーバー、データベース管理システム、Web サーバー、ランタイム環境など、最も一般的なイメージがすべて含まれるパブリックレジストリです。他にもパブリックおよびプライベートの Docker レジストリがあり、独自のレジストリサーバーをデプロイすることもで...
![](https://resources.jetbrains.com/help/img/idea/2024.1/docker_postgres_pull.png)
Docker コンテナーでデータベースを実行する
Docker を使用して、データベースをリモートサーバーであるかのようにコンテナーで実行し、アプリケーションがデータベースとどのように相互作用するかをテストできます。このチュートリアルでは、PostgreSQL サーバーで Docker コンテナーを実行し、IntelliJ IDEA を使用してそれに接続する方法について説明します。データベース管理機能については、「データベースツールおよび SQL」を参照してください。PostgreSQL サーバーイメージをプルするサービスツールウィンドウで、D...
![](https://resources.jetbrains.com/help/img/idea/2024.1/docker_new_java_project.png)
Docker を使用して Java アプリケーションを実行およびデバッグする
Docker を使用して、特定のランタイム環境を持つコンテナーで Java アプリケーションを実行およびデバッグできます。このチュートリアルでは、単純な Java アプリケーション用に OpenJDK 17 を使用して Docker 実行ターゲットを作成する方法について説明します。新規 Java プロジェクトを作成するこのチュートリアルのサンプルアプリケーションは、をコンソールに出力して終了する単一の HelloWorld.java ファイルで構成されます。メインメニューで、に移動します。新しいプロジ...