戻る

ネイティブ実行可能ファイルをコンテナ化してコンテナ内で実行する

コンテナは、本番環境に合わせた開発環境の柔軟性、アプリケーションの分離、オーバーヘッドの最小化を実現します。GraalVM Native Image で生成された自己完結型の実行可能ファイルの場合、コンテナは明白なデプロイメントの選択肢です。

コンテナベースの開発をサポートするために、プラットフォーム、アーキテクチャ、Javaバージョン、エディションに応じて、いくつかのGraalVMコンテナイメージが利用可能です。

このガイドでは、Java アプリケーションのネイティブ実行可能ファイルをコンテナ化する方法を示します。GraalVM コンテナイメージと Native Image を使用して、Java アプリケーションを事前にネイティブ実行可能ファイルにコンパイルします。

サンプルアプリケーションのダウンロード

このガイドでは、Spring Boot 3 Native Image マイクロサービスの例を使用します。この例は、Spring Boot 3 をベースに構築された最小限の REST ベースの API アプリケーションです。HTTP エンドポイント /jibber を呼び出すと、Lewis Carroll の Jabberwocky 詩のスタイルで生成されたナンセンスな詩が返されます。

前提条件

GraalVM JDK がインストールされていることを確認してください。始めるための最も簡単な方法は、SDKMAN! を使用することです。その他のインストールオプションについては、ダウンロードセクションをご覧ください。

  1. Rancher DesktopDockerPodman などの Docker-API 互換コンテナランタイムをインストールして実行します。

  2. GraalVM デモ リポジトリのクローンを作成する
     git clone https://github.com/graalvm/graalvm-demos
    
  3. ディレクトリを *spring-native-image/* に変更する
     cd spring-native-image
    

ネイティブ実行可能ファイルとしてビルドして実行する

Spring Boot 3 の GraalVM Native Image の組み込みサポートにより、Spring Boot 3 アプリケーションをネイティブ実行可能ファイルにコンパイルすることがはるかに簡単になりました。

  1. ネイティブ実行可能ファイルをビルドする
     ./mvnw native:compile -Pnative
    

    -Pnative プロファイルは、プラットフォーム用のネイティブ実行可能ファイルを生成するために使用されます。これにより、*target/* ディレクトリに *benchmark-jibber* という名前のネイティブ実行可能ファイルが生成されます。

  2. ネイティブ実行可能ファイルを実行し、`&` を追加してバックグラウンドで実行する
     ./target/benchmark-jibber &
    
  3. `curl` を使用してエンドポイントを呼び出す
     curl http://localhost:8080/jibber
    

    ランダムなナンセンスな詩が表示されるはずです。

  4. `fg` を使用してアプリケーションをフォアグラウンドに移動し、 `<CTRL-c>` を入力してアプリケーションを停止します。

ネイティブ実行可能ファイルをコンテナ化する

生成されたネイティブ実行可能ファイルはプラットフォームに依存します。

  1. 次のコマンドを使用して、ネイティブ実行可能ファイルをコンテナ化します

    • Linux では、次のコマンドを使用して、前の手順で生成されたネイティブ実行可能ファイルをコンテナ化します
        docker build -f Dockerfiles/Dockerfile.native --build-arg APP_FILE=benchmark-jibber -t jibber-benchmark:native.0.0.1-SNAPSHOT .
      
    • MacOS、Windows、または Linux では、マルチステージ Docker ビルドを使用して、コンテナ内にネイティブ実行可能ファイルをビルドし、ネイティブ実行可能ファイルを軽量コンテナイメージにパッケージ化します
        docker build -f Dockerfiles/Dockerfile -t jibber-benchmark:native.0.0.1-SNAPSHOT .
      
  2. アプリケーションを実行する
     docker run --rm --name native -p 8080:8080 jibber-benchmark:native.0.0.1-SNAPSHOT
    
  3. 新しいターミナルウィンドウから、 `curl` を使用してエンドポイントを呼び出します
     curl http://localhost:8080/jibber
    

    ランダムなナンセンスな詩が生成されるはずです。

  4. アプリケーションを停止するには、まず `docker ps` を使用してコンテナ ID を取得し、次に実行します
     docker rm -f <container_id>
    
  5. コンテナイメージを削除するには、まず `docker images` を使用してイメージ ID を取得し、次に実行します
     docker rmi -f <image_1_id> <image_n_id>
    

まとめ

このガイドでは、GraalVM コンテナイメージを使用して、Java アプリケーションのネイティブ実行可能ファイルをコンテナ化する方法を説明しました。

GraalVM Native Image を使用すると、ネイティブ実行可能ファイルを scratch や distroless イメージなどの小さなコンテナに直接パッケージ化することにより、静的にリンクされたネイティブ実行可能ファイルをビルドできます。

お問い合わせ