第1章 Quarkus アプリケーションのネイティブ実行可能ファイルへのコンパイル
アプリケーション開発者は、Red Hat ビルドの Quarkus を使用して、OpenShift Container Platform 環境およびサーバーレス環境で実行される Java で書かれたマイクロサービスを作成できます。ネイティブ実行可能ファイルにコンパイルされたアプリケーションは、メモリーのフットプリントが小さく、起動時間は高速です。
このガイドでは、Quarkus Getting Started プロジェクトをネイティブ実行可能ファイルにコンパイルする方法と、ネイティブ実行可能ファイルを設定してテストする方法を説明します。Quarkus スタートガイド で作成したアプリケーションが必要です。
Red Hat ビルドの Quarkus を使用したネイティブ実行可能ファイルのビルドでは、以下について説明します。
- Podman または Docker などのコンテナーランタイムを使用した単一コマンドでのネイティブ実行可能ファイルのビルド
- 生成されたネイティブ実行可能ファイルを使用して、カスタムコンテナーイメージを作成します。
- OpenShift Container Platform Docker ビルドストラテジーを使用して、コンテナーイメージを作成します。
- Quarkus ネイティブアプリケーションを OpenShift Container Platform にデプロイします。
- ネイティブ実行可能ファイルの設定
- ネイティブ実行可能ファイルのテスト
前提条件
OpenJDK 17 がインストールされ、
JAVA_HOME
環境変数が Java SDK の場所を指定するように設定されている。- Red Hat build of OpenJDK は、Red Hat カスタマーポータルにログインして ソフトウェアダウンロード ページからダウンロードできます。
- Open Container Initiative (OCI) と互換性のあるコンテナーランタイム (Podman、Docker など)。
Quarkus Getting Started プロジェクトを完了している。
- Quarkus Getting Started プロジェクトのビルド方法は、Quarkus スタートガイド を参照し てください。
-
あるいは、Quarkus quickstart archive をダウンロードするか、
Quarkus Quickstarts
Git リポジトリーをクローンしてください。プロジェクトのサンプルはgetting-started
ディレクトリーにあります。
1.1. ネイティブ実行可能ファイルの作成
ネイティブバイナリーは、特定のオペレーティングシステム(OS)または CPU アーキテクチャーで実行するために作成される実行可能ファイルです。
以下に、ネイティブ実行可能ファイルの例をいくつかリストします。
- Mac のユニバーサルバイナリー
- Linux 用の ELF バイナリー
- Windows の EXE バイナリー
ネイティブ実行可能ファイルをビルドする場合の利点の 1 つは、アプリケーションと JVM を含む依存関係が 1 つのファイルにパッケージ化されることです。アプリケーションのネイティブ実行可能ファイルには、次の項目が含まれています。
- コンパイル済みアプリケーションコード
- Java API
- 必要なライブラリー
- アプリケーションの起動時間を改善し、ディスクおよびメモリーのフットプリントを最小限に抑えるための Java 仮想マシン(JVM)の縮小バージョン。
Quarkus アプリケーションからネイティブ実行可能ファイルを生成する場合は、コンテナ内ビルドまたはローカルホストビルドのいずれかを選択できます。次の表は、使用可能なビルドオプションとその説明を示しています。
ビルドオプション | Requires | 用途 | 結果 | 利点 |
---|---|---|---|---|
コンテナ内ビルド - サポート対象 | コンテナーランタイム (Podman や Docker など) |
デフォルトの | Linux 64 ビット実行可能ファイル | GraalVM はローカルで設定する必要がないため、CI パイプライン の実行効率が向上します。 |
ローカルホストビルド - アップストリームでのみサポート対象 | GraalVM または Mandrel のローカルインストール |
| ビルドが実行されるマシンと同じ OS および CPU アーキテクチャーを持つ実行ファイル。 | Docker や Podman などのツールを使用できない、または使用しない開発者の代替です。全体的にはコンテナーよりも高速です。 |
Red Hat ビルドの Quarkus 2.13 は、Java 17 ベースの Mandrel 22.3 ベースイメージに基づくネイティブ実行可能ファイルの構築のみをサポートします。
他のイメージはコミュニティーで入手できますが、製品ではサポートされていないため、Red Hat のサポートを希望する実稼働ビルドには使用しないでください。
ソースが Java 11 に基づいて書かれており、Java 12 - 17 の機能を使用せずに、Java 17 ベースの Mandrel 22.3 ベースイメージを使用して、そのアプリケーションのネイティブ実行可能ファイルをコンパイルできます。
Red Hat ビルドの Quarkus は、Red Hat ビルドの Quarkus ネイティブビルダーイメージ( Mandrel の製品化ディストリビューション)を使用したネイティブ Linux 実行可能ファイルの構築 をサポートします。詳細は、Quarkus アプリケーションをネイティブ実行可能ファイルにコンパイルする を参照してください。Oracle GraalVM Community Edition (CE)、Mandrel Community Edition、またはその他の GraalVM ディストリビューションを使用したネイティブ実行可能ファイルのビルドは、Red Hat build of Quarkus ではサポートされていません。
1.1.1. コンテナ内ビルドを使用してネイティブ実行可能ファイルを生成する
ネイティブ実行可能ファイルを作成し、ネイティブイメージテストを実行するには、コンテナ内ビルド用に Red Hat build of Quarkus が提供する native
プロファイルを使用します。
前提条件
- Podman または Docker がインストールされている。
- コンテナーは、8 GB 以上のメモリーにアクセスできる。
手順
Getting Started プロジェクトの
pom.xml
ファイルを開き、プロジェクトにnative
プロファイルが含まれていることを確認します。<profiles> <profile> <id>native</id> <properties> <quarkus.package.type>native</quarkus.package.type> </properties> </profile> </profiles>
次のいずれかの方法を使用して、ネイティブ実行可能ファイルをビルドします。
Maven の使用:
Docker の場合:
./mvnw package -Pnative -Dquarkus.native.container-build=true
Podman の場合:
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
Quarkus CLI を使用する:
Docker の場合:
quarkus build --native -Dquarkus.native.container-build=true
Podman の場合:
quarkus build --native -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
手順を実行した結果
これらのコマンドを実行すると、
target
ディレクトリーに*-runner
バイナリーが作成されます。その場合、以下が適用されます。-
*-runner
ファイルは、Quarkus が生成したビルド済みのネイティブバイナリーです。 target
ディレクトリーは、Maven アプリケーションをビルドするときに Maven が作成するディレクトリーです。重要Quarkus アプリケーションをネイティブ実行可能ファイルにコンパイルすると、分析および最適化の際にメモリーを大量に消費します。
quarkus.native.native-image-xmx
設定プロパティーを設定して、ネイティブコンパイル時に使用されるメモリーの量を制限できます。メモリー制限を低く設定すると、ビルド時間が長くなる可能性があります。
ネイティブ実行可能ファイルを実行するには、以下のコマンドを入力します。
./target/*-runner
関連情報
詳細は、Quarkus アプリケーションのネイティブ実行可能ファイルへのコンパイル の ネイティブ実行可能ファイルの設定プロパティー を 参照してください。
1.1.2. ローカルホストビルドを使用してネイティブ実行可能ファイルを生成する
Docker または Podman を使用しない場合は、ネイティブ実行可能ファイルの作成と実行に Quarkus ローカルホストビルドオプションを使用します。
ローカルホストビルドアプローチを使用すると、コンテナーを使用した場合と比べて高速になるため、Linux オペレーティングシステムを使用するマシンに適しています。
Red Hat build of Quarkus では、次に示す手順の実稼働環境での使用はサポートされません。この方法は、テストで、もしくは Docker や Podman が使用できない場合のバックアップアプローチとしてのみ使用してください。
前提条件
ネイティブ実行可能ファイルの構築 ガイドに従って適切に設定された Mandrel または GraalVm の ローカルインストール。
-
GraalVM インストールの場合は、
native-imageジ
もインストールされている必要があります。
-
GraalVM インストールの場合は、
手順
GraalVM または Mandrel の場合は、次のいずれかの方法を使用してネイティブ実行可能ファイルをビルドします。
Maven の使用:
./mvnw package -Pnative
Quarkus CLI を使用する:
quarkus build --native
手順を実行した結果
これらのコマンドを実行すると、
target
ディレクトリーに*-runner
バイナリーが作成されます。その場合、以下が適用されます。-
*-runner
ファイルは、Quarkus が生成したビルド済みのネイティブバイナリーです。 target
ディレクトリーは、Maven アプリケーションをビルドするときに Maven が作成するディレクトリーです。注記ネイティブ実行可能ファイルをビルドすると、
quarkus.profile
プロパティーで変更されない限り、prod
プロファイルが有効になります。
-
ネイティブ実行可能ファイルを実行します。
./target/*-runner
注記-
quarkus.test.native-image-profile
プロパティーで変更されない限り、ネイティブテストはデフォルトでprod
プロファイルを使用して実行されます。
-
関連情報
詳細は、ネイティブ実行可能ファイルの作成 を 参照してください。