1.12. ネイティブ実行可能ファイルの作成
ネイティブバイナリーは、特定のオペレーティングシステムおよび CPU アーキテクチャー上で実行するために作成された実行可能ファイルです。
以下は、ネイティブ実行可能ファイルの例をいくつか示しています。
- Linux AMD 64 ビット用の ELF バイナリー
- Windows AMD 64 ビット用の EXE バイナリー
- ARM 64 ビット用の ELF バイナリー
ネイティブ実行可能ファイルをビルドする場合の利点の 1 つは、アプリケーションと JVM を含む依存関係が 1 つのファイルにパッケージ化されることです。アプリケーションのネイティブ実行可能ファイルには、次の項目が含まれています。
- コンパイルされたアプリケーションコード。
- 必要な Java ライブラリー。
- アプリケーションの起動時間を短縮し、ディスクとメモリーのフットプリントを最小限に抑えるための Java 仮想マシン (JVM) の縮小バージョン。これは、アプリケーションコードとその依存関係に合わせて調整されています。
Quarkus アプリケーションからネイティブ実行可能ファイルを生成する場合は、コンテナ内ビルドまたはローカルホストビルドのいずれかを選択できます。次の表は、使用可能なビルドオプションとその説明を示しています。
| ビルドオプション | 必須 | 用途 | 結果 | 利点 |
|---|---|---|---|---|
| コンテナ内ビルド - サポート対象 | コンテナーランタイム (Podman や Docker など) |
デフォルトの | ホストの CPU アーキテクチャーを使用する Linux 64 ビット実行可能ファイル | GraalVM はローカルで設定する必要がないため、CI パイプライン の実行効率が向上します。 |
| ローカルホストビルド - アップストリームでのみサポート対象 | GraalVM または Mandrel のローカルインストール |
| ビルドが実行されるマシンと同じオペレーティングシステムおよび CPU アーキテクチャーを持つ実行可能ファイル | Docker や Podman などのツールを使用できない、または使用しない開発者向けの代替手段。総じて、コンテナ内ビルドアプローチよりも高速です。 |
- Red Hat build of Quarkus 3.2 は、Mandrel の製品化されたディストリビューションである、Java 17 ベースの Red Hat build of Quarkus ネイティブビルダー 使用した、ネイティブ Linux 実行可能ファイルのビルドのみをサポートします。他のイメージはコミュニティーで入手できますが、製品ではサポートされていないため、Red Hat のサポートを希望する実稼働ビルドには使用しないでください。
- ソースが Java 11 ベースで記述され、Java 12 - 17 の機能が使用されていないアプリケーションでも、Java 17 ベースの Mandrel 23.0 ベースイメージを使用してそのアプリケーションのネイティブ実行可能ファイルをコンパイルできます。
- Oracle GraalVM Community Edition (CE)、Mandrel Community Edition、またはその他の GraalVM ディストリビューションを使用したネイティブ実行可能ファイルのビルドは、Red Hat build of Quarkus ではサポートされていません。
1.12.1. コンテナ内ビルドを使用してネイティブ実行可能ファイルを生成する リンクのコピーリンクがクリップボードにコピーされました!
ネイティブ実行可能ファイルを作成し、ネイティブイメージテストを実行するには、コンテナ内ビルド用に Red Hat build of Quarkus が提供する native プロファイルを使用します。
前提条件
- Podman または Docker がインストールされている。
- コンテナーは、8 GB 以上のメモリーにアクセスできる。
手順
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.12.2. ローカルホストビルドを使用してネイティブ実行可能ファイルを生成する リンクのコピーリンクがクリップボードにコピーされました!
Docker または Podman を使用しない場合は、ネイティブ実行可能ファイルの作成と実行に Quarkus ローカルホストビルドオプションを使用します。
ローカルホストビルドアプローチを使用すると、コンテナーを使用した場合と比べて高速になるため、Linux オペレーティングシステムを使用するマシンに適しています。
Red Hat build of Quarkus では、次に示す手順の実稼働環境での使用はサポートされません。この方法は、テストで、もしくは Docker や Podman が使用できない場合のバックアップアプローチとしてのみ使用してください。
前提条件
Building a native executable ガイドに沿って正しく設定された、Mandrel または GraalVm のローカルインストール。
-
GraalVM インストールの場合は、
native-imageもインストールされている必要があります。
-
GraalVM インストールの場合は、
手順
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 コミュニティーの "Building a native executable" ガイドで Producing a native executable セクションを参照してください。
1.12.3. 手動でコンテナーを作成します。 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、 Linux AMD64 向けにアプリケーションを使用してコンテナーイメージを手動で作成する方法を説明します。Quarkus ネイティブコンテナーを使用してネイティブイメージを生成すると、そのネイティブイメージは Linux AMD64 をターゲットとする実行可能ファイルを作成します。ホストオペレーティングシステムが Linux AMD64 ではない場合は、バイナリーを直接実行できず、手動でコンテナーを作成する必要があります。
Quarkus Getting Started プロジェクトには、以下の内容と共に src/main/docker ディレクトリーに Dockerfile.native が含まれます。
Universal Base Image (UBI)
次のリストは、Dockerfile での使用に適したイメージを示しています。
Red Hat Universal Base Image 8 (UBI8)。このベースイメージは、コンテナー化されたすべてのアプリケーション、ミドルウェア、ユーティリティーのベースレイヤーになるように設計されています。
registry.access.redhat.com/ubi8/ubi:8.8
registry.access.redhat.com/ubi8/ubi:8.8Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Universal Base Image 8 Minimal (UBI8-minimal)。microdnf をパッケージマネージャーとして使用する、最小化された UBI8 イメージ。
registry.access.redhat.com/ubi8/ubi-minimal:8.8
registry.access.redhat.com/ubi8/ubi-minimal:8.8Copy to Clipboard Copied! Toggle word wrap Toggle overflow - すべての Red Hat Base イメージは、コンテナーイメージ カタログサイトで入手できます。
手順
次のいずれかの方法を使用して、ネイティブ Linux 実行可能ファイルをビルドします。
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
次のいずれかの方法を使用して、コンテナーイメージをビルドします。
Docker:
docker build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .
docker build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .Copy to Clipboard Copied! Toggle word wrap Toggle overflow Podman
podman build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .
podman build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のいずれかの方法を使用して、コンテナーを実行します。
Docker:
docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-startedCopy to Clipboard Copied! Toggle word wrap Toggle overflow Podman:
podman run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
podman run -i --rm -p 8080:8080 quarkus-quickstart/getting-startedCopy to Clipboard Copied! Toggle word wrap Toggle overflow