第1章 Red Hat build of Quarkus アプリケーションをネイティブ実行可能ファイルにコンパイルする
アプリケーション開発者は、Red Hat build of Quarkus 3.15 を使用して、OpenShift Container Platform 環境およびサーバーレス環境で実行される、Java で書かれたマイクロサービスを作成できます。Quarkus アプリケーションは、通常の Java アプリケーションとして (Java 仮想マシン (JVM) 上で) 実行することも、ネイティブ実行可能ファイルにコンパイルすることもできます。ネイティブ実行可能ファイルにコンパイルされたアプリケーションは、対応する Java アプリケーションよりもメモリーフットプリントが小さく、短時間で起動します。
このガイドでは、Red Hat build of Quarkus 3.15 Getting Started プロジェクトをネイティブ実行可能ファイルにコンパイルする方法と、ネイティブ実行可能ファイルを設定してテストする方法を説明します。Red Hat build of Quarkus スタートガイド で作成したアプリケーションが必要になります。
Red Hat build of Quarkus を使用したネイティブ実行可能ファイルのビルドでは、以下を説明します。
- Podman または Docker などのコンテナーランタイムを使用して、シングルコマンドでネイティブ実行可能ファイルをビルドする
- 生成されたネイティブ実行可能ファイルを使用して、カスタムコンテナーイメージを作成する
- OpenShift Container Platform Docker ビルドストラテジーを使用して、コンテナーイメージを作成する
- Quarkus ネイティブアプリケーションを OpenShift Container Platform にデプロイする
- ネイティブ実行可能ファイルを設定する
- ネイティブ実行可能ファイルをテストする
前提条件
JAVA_HOME環境変数を設定して Java SDK の場所を指定している。- Red Hat build of OpenJDK は、Red Hat カスタマーポータルにログインして ソフトウェアダウンロード ページからダウンロードできます。
- Open Container Initiative (OCI) と互換性のあるコンテナーランタイム (Podman、Docker など)。
Quarkus Getting Started プロジェクトを完了している。
- Quarkus Getting Started プロジェクトのビルド方法は、Red Hat build of Quarkus のスタートガイド を参照してください。
-
もしくは、Quarkus Quickstarts アーカイブをダウンロードするか、Quarkus Quickstarts Git リポジトリーを複製します。プロジェクトのサンプルは
getting-startedディレクトリーにあります。
1.1. ネイティブ実行可能ファイルの作成 リンクのコピーリンクがクリップボードにコピーされました!
ネイティブバイナリーは、特定のオペレーティングシステムおよび CPU アーキテクチャー上で実行するために作成された実行可能ファイルです。
以下は、ネイティブ実行可能ファイルの例をいくつか示しています。
- Linux AMD 64 ビット用の ELF バイナリー
- Windows AMD 64 ビット用の EXE バイナリー
- ARM 64 ビット用の ELF バイナリー
Red Hat build of Quarkus では、Linux x86-64 または AArch64 ビット用の ELF バイナリーのみがサポートされています。
ネイティブ実行可能ファイルを構築する利点の 1 つは、Java 仮想マシン (JVM) を含むアプリケーションと依存関係が 1 つのファイルにパッケージ化されることです。アプリケーションのネイティブ実行可能ファイルには、次の項目が含まれています。
- コンパイルされたアプリケーションコード
- 必要な Java ライブラリー
- アプリケーションの起動時間を短縮し、ディスクとメモリーのフットプリントを最小限に抑えるための仮想マシン (VM) の縮小バージョン。これは、アプリケーションコードとその依存関係に合わせて調整されています。
Quarkus アプリケーションからネイティブ実行可能ファイルを生成する場合は、コンテナ内ビルドまたはローカルホストビルドのいずれかを選択できます。次の表は、使用可能なビルドオプションとその説明を示しています。
| ビルドオプション | 必須 | 用途 | 結果 | 利点 |
|---|---|---|---|---|
| コンテナ内ビルド - サポート対象 | コンテナーランタイム (Podman や Docker など) |
デフォルトの | ホストの CPU アーキテクチャーを使用する Linux 64 ビット実行可能ファイル | GraalVM はローカルで設定する必要がないため、CI パイプライン の実行効率が向上します。 |
| ローカルホストビルド - アップストリームでのみサポート対象 | GraalVM または Mandrel のローカルインストール |
| ビルドが実行されるマシンと同じオペレーティングシステムおよび CPU アーキテクチャーを持つ実行可能ファイル | Docker や Podman などのツールを使用できない、または使用しない開発者向けの代替手段。総じて、コンテナ内ビルドアプローチよりも高速です。 |
-
Red Hat build of Quarkus 3.15 は、GraalVM Mandrel の製品化されたディストリビューションである Java 21 ベースの Red Hat build of Quarkus Native Builder イメージ (
quarkus/mandrel-for-jdk-21-rhel8) を使用したネイティブ Linux 実行可能ファイルのビルドのみをサポートします。Quarkus コミュニティーでは他のイメージも利用できますが、それらは製品ではサポートされていないため、Red Hat によるサポートが必要な実稼働ビルドには使用しないでください。 - ソースが 17 に基づいて記述され、Java 18 - 21 の機能が使用されていないアプリケーションでも、Java 21 ベースの Mandrel 23.1 ベースイメージを使用して、そのアプリケーションのネイティブ実行可能ファイルをコンパイルできます。
- Red Hat build of Quarkus は、Oracle GraalVM Community Edition (CE)、Mandrel コミュニティーエディション、またはその他の GraalVM ディストリビューションを使用したネイティブ実行可能ファイルのビルドをサポートしていません。詳細は、Red Hat build of Quarkus アプリケーションをネイティブ実行可能ファイルにコンパイルする を参照してください。
1.1.1. コンテナ内ビルドを使用してネイティブ実行可能ファイルを生成する リンクのコピーリンクがクリップボードにコピーされました!
ネイティブ実行可能ファイルを作成し、ネイティブイメージテストを実行するには、コンテナ内ビルド用に Red Hat build of Quarkus が提供する native プロファイルを使用します。
前提条件
- Podman または Docker がインストールされている。
- コンテナーは、8 GB 以上のメモリーにアクセスできる。
- オプション: Quarkus CLI がインストールされている。これは、ネイティブ実行可能ファイルをビルドする方法の 1 つとして使用できます。詳細は、Quarkus CLI のインストール を参照してください。
Quarkus CLI は、Quarkus プロジェクトの作成、更新、ビルドなどのタスクを含む開発目的で使用されます。Red Hat は、実稼働環境での Quarkus CLI の使用をサポートしていません。
手順
Getting Started プロジェクトの
pom.xmlファイルを開き、プロジェクトにnativeプロファイルが含まれていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のいずれかの方法を使用して、ネイティブ実行可能ファイルをビルドします。
Maven を使用:
Docker の場合:
./mvnw package -Dnative -Dquarkus.native.container-build=true
./mvnw package -Dnative -Dquarkus.native.container-build=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow Podman の場合:
./mvnw package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
./mvnw package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podmanCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Quarkus CLI を使用:
Docker の場合:
quarkus build --native -Dquarkus.native.container-build=true
quarkus build --native -Dquarkus.native.container-build=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow Podman の場合:
quarkus build --native -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
quarkus build --native -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podmanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 手順を実行した結果
これらのコマンドを実行すると、
targetディレクトリーに*-runnerバイナリーが作成されます。その場合は、以下が適用されます。-
*-runnerファイルは、Quarkus が生成するビルドされたネイティブバイナリーです。 targetディレクトリーは、Maven アプリケーションをビルドするときに Maven が作成するディレクトリーです。重要Quarkus アプリケーションをネイティブ実行可能ファイルにコンパイルすると、分析および最適化の際にメモリーを大量に消費します。
quarkus.native.native-image-xmx設定プロパティーを設定して、ネイティブコンパイル時に使用されるメモリーの量を制限できます。メモリー制限を低く設定すると、ビルド時間が長くなる可能性があります。
ネイティブ実行可能ファイルを実行するには、以下のコマンドを入力します。
./target/*-runner
./target/*-runnerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.1.2. ローカルホストビルドを使用してネイティブ実行可能ファイルを生成する リンクのコピーリンクがクリップボードにコピーされました!
Docker または Podman を使用しない場合は、ネイティブ実行可能ファイルの作成と実行に Quarkus ローカルホストビルドオプションを使用します。
ローカルホストビルドアプローチを使用すると、コンテナーを使用した場合と比べて高速になるため、Linux オペレーティングシステムを使用するマシンに適しています。
Red Hat build of Quarkus では、本番環境での次の手順の使用はサポートされていません。この方法は、テストで、もしくは Docker や Podman が使用できない場合のバックアップアプローチとしてのみ使用してください。
前提条件
Quarkus の Building a native executable ガイドに従って正しく設定された、Mandrel または GraalVm のローカルインストール。
-
GraalVM インストールの場合は、
native-imageもインストールされている必要があります。
-
GraalVM インストールの場合は、
- オプション: Quarkus CLI がインストールされている。これは、ネイティブ実行可能ファイルをビルドする方法の 1 つとして使用できます。詳細は、Quarkus CLI のインストール を参照してください。
Quarkus CLI は、Quarkus プロジェクトの作成、更新、ビルドなどのタスクを含む開発目的で使用されます。Red Hat は、実稼働環境での Quarkus CLI の使用をサポートしていません。
手順
GraalVM または Mandrel の場合は、次のいずれかの方法を使用してネイティブ実行可能ファイルをビルドします。
Maven を使用:
./mvnw package -Dnative
./mvnw package -DnativeCopy to Clipboard Copied! Toggle word wrap Toggle overflow Quarkus CLI を使用:
quarkus build --native
quarkus build --nativeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 手順を実行した結果
これらのコマンドを実行すると、
targetディレクトリーに*-runnerバイナリーが作成されます。その場合は、以下が適用されます。-
*-runnerファイルは、Quarkus が生成するビルドされたネイティブバイナリーです。 targetディレクトリーは、Maven アプリケーションをビルドするときに Maven が作成するディレクトリーです。注記ネイティブ実行可能ファイルをビルドすると、
quarkus.profileプロパティーで変更されない限り、prodプロファイルが有効になります。
-
ネイティブ実行可能ファイルを実行します。
./target/*-runner
./target/*-runnerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
詳細は、Quarkus の「ネイティブ実行可能ファイルの構築」ガイドの ネイティブ実行可能ファイルの作成 セクションを参照してください。