第11章 ネイティブ実行可能ファイルの作成

Podman または Docker などのコンテナーランタイムを使用して、Quarkus アプリケーションからネイティブ実行可能ファイルを作成することができます。Quarkus は、ビルダーイメージを使用してバイナリー実行可能ファイルを作成します。これは、Red Hat Universal Base Images RHEL8-UBI および RHEL8-UBI minimal と共に使用することができます。Red Hat ビルドの Quarkus 1.7 は、quarkus.native.builder-image プロパティーのデフォルトとして registry.access.redhat.com/quarkus/mandrel-20-rhel8:20.3 を使用します。

お使いのアプリケーションのネイティブ実行可能ファイルには、アプリケーションコード、必須ライブラリー、Java API、および仮想マシン (VM) の縮小版が含まれます。縮小された仮想マシンベースは、アプリケーションの起動時間を高速化し、ディスクのフットプリントを小さくします。

手順

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

    <profiles>
        <profile>
            <id>native</id>
            <properties>
                <quarkus.package.type>native</quarkus.package.type>
            </properties>
        </profile>
    </profiles>
    注記

    Quarkus native プロファイルを使用すると、ネイティブ実行可能ファイルおよびネイティブイメージテストの両方を実行することができます。

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

    1. Docker を使用してネイティブ実行可能ファイルをビルドします。

      ./mvnw package -Pnative -Dquarkus.native.container-build=true
    2. Podman を使用してネイティブ実行可能ファイルをビルドします。

      ./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman

      これらのコマンドは、target ディレクトリーに getting-started-*-runner バイナリーを作成します。

      重要

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

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

    ./target/getting-started-*-runner

    ネイティブ実行可能ファイルをビルドする場合、prod プロファイルが有効化され、Quarkus ネイティブテストは、prod プロファイルを使用して実行されます。これは、quarkus.test.native-image-profile プロパティーを使用して変更することができます。

11.1. 手動でのコンテナーの作成

本セクションでは、Linux X86_64 向けにアプリケーションを使用してコンテナーイメージを手動で作成する方法を説明します。Quarkus Native コンテナーを使用してネイティブイメージを作成する場合、Linux X86_64 オペレーティングシステムをターゲットとする実行可能ファイルを作成します。お使いのホストオペレーティングシステムが別のものである場合は、バイナリーを直接実行することはできないので、コンテナーを手動で作成する必要があります。

Quarkus Getting Started プロジェクトには、以下の内容と共に src/main/docker ディレクトリーに Dockerfile.native が含まれます。

FROM registry.access.redhat.com/ubi8/ubi-minimal
WORKDIR /work/
COPY target/*-runner /work/application
RUN chmod 775 /work
EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
Universal Base Image (UBI)

Dockerfiles は、ベースイメージとして UBI を使用します。このベースイメージは、コンテナーで機能するように設計されています。Dockerfiles は、ベースイメージの minimal バージョン を使用して、作成されたイメージのサイズを縮小します。

手順

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

    1. Docker を使用してネイティブ実行可能ファイルをビルドします。

      ./mvnw package -Pnative -Dquarkus.native.container-build=true
    2. Podman を使用してネイティブ実行可能ファイルをビルドします。

      ./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
  2. 以下のいずれかの方法を使用して、コンテナーイメージをビルドします。

    1. Docker を使用してコンテナーイメージをビルドします。

      docker build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .
    2. Podman を使用してコンテナーイメージをビルドします。

      podman build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .
  3. コンテナーを実行します。

    1. Docker を使用してコンテナーを実行します。

      docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
    2. Podman を使用してコンテナーを実行します。

      podman run -i --rm -p 8080:8080 quarkus-quickstart/getting-started

Red Hat OpenShift Container Platform での Quarkus Maven アプリケーションのデプロイに関する詳細は、『Red Hat OpenShift Container Platform での Quarkus アプリケーションのデプロイ』 を参照してください。