Dockerビルドストラテジーを使用して、Quarkus JavaアプリケーションをOpenShiftにデプロイ
アプリケーション開発者として、デプロイオプションとしてDockerビルドストラテジーを使用することで、アプリケーションを OpenShift にデプロイすることができます。
この仕組みは OpenShift クラスタの外、ローカルまたはCI環境でアーティファクトをビルドし、Dockerfileと共にOpenShiftビルドシステムに提供します。アーティファクトにはJARファイルやネイティブ実行ファイルが含まれます。 OpenShift クラスタはコンテナをビルドし、イメージストリームとして提供します。
この機能は quarkus-openshift
エクステンションモジュールによって提供されています。カスタムDockerfileを使用したい場合は、 src/main/docker
ディレクトリまたはモジュール内の任意の場所にファイルを追加してください。
さらに、 quarkus.openshift.jvm-dockerfile
プロパティを使用して、Dockerfile へのパスを設定します。
前提条件
-
OpenJDK 17 or 21 がインストールされていること
-
環境変数
JAVA_HOME
をJava SDKの場所に設定していること -
Apache Maven 3.9.9がインストールされていること
-
Quarkusプロジェクトには、
quarkus-openshift
エクステンション含まれていること -
OpenShift クラスタにアクセスでき、
oc
CLIツールの最新互換バージョンがインストールされていること -
正しい OpenShift プロジェクトの名前空間で作業していること
手順
-
application.properties
設定ファイルで Docker ビルドストラテジーを設定します:quarkus.openshift.build-strategy=docker
-
オプション:ご使用の環境に応じて、
application.properties
ファイルに以下のプロパティを設定してください:-
信頼されていない証明書を使用している場合は、
KubernetesClient
の証明書の信頼を有効にします:quarkus.kubernetes-client.trust-certs=true
-
サービスを公開し、 OpenShift ルートを作成するには、以下のプロパティを設定します:
quarkus.openshift.route.expose=true
-
事前生成済のDockerfileの代わりにカスタムDockerfileを使用するには、Dockerfileへのパスを設定します:
quarkus.openshift.jvm-dockerfile=<path_to_your_dockerfile>
例えば、
Dockerfile.custom-jvm
というカスタムDockerfileを指定するには、以下のようにします:quarkus.openshift.jvm-dockerfile=src/main/resources/Dockerfile.custom-jvm
-
-
アプリケーションをパッケージ化し、現在の OpenShift プロジェクトにデプロイします:
./mvnw clean package -Dquarkus.openshift.deploy=true
検証
以下の検証ステップでは、 openshift-helloworld
サンプル・アプリケーションを使用します。
-
現在の OpenShift プロジェクトに関連付けられたポッドのリストを表示します:
oc get pods
NAME READY STATUS RESTARTS AGE openshift-helloworld-1-build 0/1 Completed 0 11m openshift-helloworld-1-deploy 0/1 Completed 0 10m openshift-helloworld-1-gzzrx 1/1 Running 0 10m
-
アプリケーションのポッドのログ出力を取得するには、
oc logs -f
コマンドにポッド名を指定します。次の例では、openshift-helloworld-1-gzzrx
というポッド名を使用しています。これは、アプリケーションの名前の前に最新のポッドを付けたものです:oc logs -f openshift-helloworld-1-gzzrx
Starting the Java application using /opt/jboss/container/java/run/run-java.sh ... INFO exec -a "java" java -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -XX:MaxRAMPercentage=50.0 -XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError -cp "." -jar /deployments/quarkus-run.jar __ ____ __ _____ ___ __ ____ ______ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 2024-09-17 10:23:25,254 INFO [io.quarkus] (main) getting-started 1.0.0-SNAPSHOT on JVM (powered by Quarkus {QuarkusCore}) started in 0.653s. Listening on: http://0.0.0.0:8080 2024-09-17 10:23:25,281 INFO [io.quarkus] (main) Profile prod activated. 2024-09-17 10:23:25,281 INFO [io.quarkus] (main) Installed features: [cdi, kubernetes, rest, smallrye-context-propagation, vertx]
-
サービス一覧
oc get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE openshift-helloworld ClusterIP 172.30.64.57 <none> 80/TCP 14m
-
アプリケーションをテストするための URL を取得します。 そのためには、アプリケーションをビルドする前に
application.properties
ファイルでquarkus.openshift.route.expose=true
プロパティを設定し、OpenShift ルートを公開しているようにしてください。oc get routes
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD openshift-helloworld openshift-helloworld-username-dev.apps.sandbox-m2.ll9k.p1.openshiftapps.com openshift-helloworld http None
ルートは80番ポートをリッスンするようになり、8080番ポートではなくなったことに注意してください。
curl
と、oc get routes
から出力された完全なURL、つまり "http://openshift-helloworld-username-dev.apps.sandbox-m2.ll9k.p1.openshiftapps.com "を使って、ウェブブラウザやターミナルでこの例で示したアプリケーションをテストすることができます。