1.12. ネイティブ実行可能ファイルの作成


ネイティブバイナリーは、特定のオペレーティングシステムおよび CPU アーキテクチャー上で実行するために作成された実行可能ファイルです。

以下は、ネイティブ実行可能ファイルの例をいくつか示しています。

  • Linux AMD 64 ビット用の ELF バイナリー
  • Windows AMD 64 ビット用の EXE バイナリー
  • ARM 64 ビット用の ELF バイナリー

ネイティブ実行可能ファイルをビルドする場合の利点の 1 つは、アプリケーションと JVM を含む依存関係が 1 つのファイルにパッケージ化されることです。アプリケーションのネイティブ実行可能ファイルには、次の項目が含まれています。

  • コンパイルされたアプリケーションコード。
  • 必要な Java ライブラリー。
  • アプリケーションの起動時間を短縮し、ディスクとメモリーのフットプリントを最小限に抑えるための Java 仮想マシン (JVM) の縮小バージョン。これは、アプリケーションコードとその依存関係に合わせて調整されています。

Quarkus アプリケーションからネイティブ実行可能ファイルを生成する場合は、コンテナ内ビルドまたはローカルホストビルドのいずれかを選択できます。次の表は、使用可能なビルドオプションとその説明を示しています。

Expand
表1.1 ネイティブ実行可能ファイルの生成に使用できるビルドオプション
ビルドオプション必須用途結果利点

コンテナ内ビルド - サポート対象

コンテナーランタイム (Podman や Docker など)

デフォルトの registry.access.redhat.com/quarkus/mandrel-23-rhel8:23.0 ビルダーイメージ

ホストの CPU アーキテクチャーを使用する Linux 64 ビット実行可能ファイル

GraalVM はローカルで設定する必要がないため、CI パイプライン の実行効率が向上します。

ローカルホストビルド - アップストリームでのみサポート対象

GraalVM または Mandrel のローカルインストール

quarkus.native.builder-image プロパティーのデフォルトのローカルインストール

ビルドが実行されるマシンと同じオペレーティングシステムおよび 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 以上のメモリーにアクセスできる。

手順

  1. Getting Started プロジェクトの pom.xml ファイルを開き、プロジェクトに native プロファイルが含まれていることを確認します。

    <profiles>
      <profile>
        <id>native</id>
        <activation>
          <property>
            <name>native</name>
          </property>
        </activation>
        <properties>
          <skipITs>false</skipITs>
          <quarkus.package.type>native</quarkus.package.type>
        </properties>
      </profile>
    </profiles>
    Copy to Clipboard Toggle word wrap
  2. 次のいずれかの方法を使用して、ネイティブ実行可能ファイルをビルドします。

    • Maven の使用:

      • Docker の場合:

        ./mvnw package -Dnative -Dquarkus.native.container-build=true
        Copy to Clipboard Toggle word wrap
      • Podman の場合:

        ./mvnw package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
        Copy to Clipboard Toggle word wrap
    • Quarkus CLI を使用:

      • Docker の場合:

        quarkus build --native -Dquarkus.native.container-build=true
        Copy to Clipboard Toggle word wrap
      • Podman の場合:

        quarkus build --native -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
        Copy to Clipboard Toggle word wrap

        手順を実行した結果

        これらのコマンドを実行すると、target ディレクトリーに *-runner バイナリーが作成されます。その場合は、以下が適用されます。

      • *-runner ファイルは、Quarkus が生成したビルド済みのネイティブバイナリーです。
      • target ディレクトリーは、Maven アプリケーションをビルドするときに Maven が作成するディレクトリーです。

        重要

        Quarkus アプリケーションをネイティブ実行可能ファイルにコンパイルすると、分析および最適化の際にメモリーを大量に消費します。quarkus.native.native-image-xmx 設定プロパティーを設定して、ネイティブコンパイル時に使用されるメモリーの量を制限できます。メモリー制限を低く設定すると、ビルド時間が長くなる可能性があります。

  3. ネイティブ実行可能ファイルを実行するには、以下のコマンドを入力します。

    ./target/*-runner
    Copy to Clipboard Toggle word wrap

1.12.2. ローカルホストビルドを使用してネイティブ実行可能ファイルを生成する

Docker または Podman を使用しない場合は、ネイティブ実行可能ファイルの作成と実行に Quarkus ローカルホストビルドオプションを使用します。

ローカルホストビルドアプローチを使用すると、コンテナーを使用した場合と比べて高速になるため、Linux オペレーティングシステムを使用するマシンに適しています。

重要

Red Hat build of Quarkus では、次に示す手順の実稼働環境での使用はサポートされません。この方法は、テストで、もしくは Docker や Podman が使用できない場合のバックアップアプローチとしてのみ使用してください。

前提条件

  • Building a native executable ガイドに沿って正しく設定された、Mandrel または GraalVm のローカルインストール。

    • GraalVM インストールの場合は、native-image もインストールされている必要があります。

手順

  1. GraalVM または Mandrel の場合は、次のいずれかの方法を使用してネイティブ実行可能ファイルをビルドします。

    • Maven の使用:

      ./mvnw package -Dnative
      Copy to Clipboard Toggle word wrap
    • Quarkus CLI を使用:

      quarkus build --native
      Copy to Clipboard Toggle word wrap

      手順を実行した結果

      これらのコマンドを実行すると、target ディレクトリーに *-runner バイナリーが作成されます。その場合は、以下が適用されます。

      • *-runner ファイルは、Quarkus が生成したビルド済みのネイティブバイナリーです。
      • target ディレクトリーは、Maven アプリケーションをビルドするときに Maven が作成するディレクトリーです。

        注記

        ネイティブ実行可能ファイルをビルドすると、quarkus.profile プロパティーで変更されない限り、prod プロファイルが有効になります。

  2. ネイティブ実行可能ファイルを実行します。

    ./target/*-runner
    Copy to Clipboard Toggle word wrap

関連情報

詳細は、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 が含まれます。

FROM registry.access.redhat.com/ubi8/ubi-minimal:8.8
WORKDIR /work/
RUN chown 1001 /work \
    && chmod "g+rwX" /work \
    && chown 1001:root /work
COPY --chown=1001:root target/*-runner /work/application

EXPOSE 8080
USER 1001

ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
Copy to Clipboard Toggle word wrap
注記

Universal Base Image (UBI)

次のリストは、Dockerfile での使用に適したイメージを示しています。

  • Red Hat Universal Base Image 8 (UBI8)。このベースイメージは、コンテナー化されたすべてのアプリケーション、ミドルウェア、ユーティリティーのベースレイヤーになるように設計されています。

    registry.access.redhat.com/ubi8/ubi:8.8
    Copy to Clipboard Toggle word wrap
  • Red Hat Universal Base Image 8 Minimal (UBI8-minimal)。microdnf をパッケージマネージャーとして使用する、最小化された UBI8 イメージ。

    registry.access.redhat.com/ubi8/ubi-minimal:8.8
    Copy to Clipboard Toggle word wrap
  • すべての Red Hat Base イメージは、コンテナーイメージ カタログサイトで入手できます。

手順

  1. 次のいずれかの方法を使用して、ネイティブ Linux 実行可能ファイルをビルドします。

    • Docker:

      ./mvnw package -Dnative -Dquarkus.native.container-build=true
      Copy to Clipboard Toggle word wrap
    • Podman:

      ./mvnw package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
      Copy to Clipboard Toggle word wrap
  2. 次のいずれかの方法を使用して、コンテナーイメージをビルドします。

    • Docker:

      docker build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .
      Copy to Clipboard Toggle word wrap
    • Podman

      podman build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .
      Copy to Clipboard Toggle word wrap
  3. 次のいずれかの方法を使用して、コンテナーを実行します。

    • Docker:

      docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
      Copy to Clipboard Toggle word wrap
    • Podman:

      podman run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
      Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat