Quarkus base runtime image
To ease the containerization of native executables, Quarkus provides a base image providing the requirements to run these executables.
The ubi10-quarkus-micro-image:2.0 image is:
-
small (based on
ubi10-micro) -
コンテナ用に設計
-
正しい依存関係のセット(glibc, libstdc++, zlib)を含んでいる
-
upx圧縮された実行可能ファイルのサポート(詳細は 圧縮の有効化についてのドキュメントを参照してください)
ベースイメージの利用
Dockerfile の中で以下を記述します:
FROM quay.io/quarkus/ubi10-quarkus-micro-image:2.0
WORKDIR /work/
COPY --chmod=0755 target/*-runner /work/application
EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
イメージの拡張
お使いのアプリケーションに追加の要件がある場合があります。たとえば、グラフィック、画像、または PDF を操作するアプリケーションがある場合、プロジェクトに Quarkus AWT エクステンションが含まれており、ネイティブ実行可能ファイルの実行には追加のライブラリーが必要になる可能性があります。この場合、マルチステージの dockerfile を使用して、必要なライブラリーをコピーする必要があります。
|
厳選されたライブラリーをコピーすると、コンテナーイメージは小さくなりますが、やや脆弱であり、ベースイメージのバージョンによって異なり、これらのライブラリーの移行的依存関係が変更される可能性があるため、変更される可能性があります。 |
|
ヘッドレスグラフィックス、PDF ドキュメント、QR コード画像などの操作は、amd64/aarch64 Linux のみでネイティブにサポートされています。Windows も MacOS もサポートされておらず、Linux コンテナーでアプリケーションを実行する必要があります。 |
# First stage - install the dependencies in an intermediate container
FROM registry.access.redhat.com/ubi10/ubi-minimal:10.2 as nativelibs
RUN microdnf install -y freetype fontconfig expat
# Second stage - copy the dependencies
FROM quay.io/quarkus/ubi10-quarkus-micro-image:2.0
WORKDIR /work/
COPY --from=nativelibs \
/lib64/libz.so.1 \
/lib64/libstdc++.so.6 \
/lib64/libfreetype.so.6 \
/lib64/libgcc_s.so.1 \
/lib64/libbz2.so.1 \
/lib64/libpng16.so.16 \
/lib64/libm.so.6 \
/lib64/libexpat.so.1 \
/lib64/libuuid.so.1 \
/lib64/libxml2.so.2 \
/lib64/libharfbuzz.so.0 \
/lib64/libbrotlidec.so.1 \
/lib64/libbrotlicommon.so.1 \
/lib64/liblzma.so.5 \
/lib64/libglib-2.0.so.0 \
/lib64/libgraphite2.so.3 \
/lib64/libpcre.so.1 \
/lib64/
COPY --from=nativelibs \
/usr/lib64/libfontconfig.so.1 \
/usr/lib64/
COPY --from=nativelibs \
/usr/share/fonts /usr/share/fonts
COPY --from=nativelibs \
/usr/share/fontconfig /usr/share/fontconfig
COPY --from=nativelibs \
/usr/lib/fontconfig /usr/lib/fontconfig
COPY --from=nativelibs \
/etc/fonts /etc/fonts
RUN chown 1001 /work \
&& chmod "g+rwX" /work \
&& chown 1001:root /work
# Shared objects to be dynamically loaded at runtime as needed,
COPY target/*.so /work/
COPY --chown=1001:root --chmod=0755 target/*-runner /work/application
EXPOSE 8080
USER 1001
ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
代替 - ubi-minimalを使用する
If the micro image does not suit your requirements, you can use ubi10-minimal.
It’s a bigger image, but contains more utilities and is closer to a full Linux distribution.
Typically, it contains a package manager (microdnf), so you can install packages more easily.
このベースイメージを使用するには、以下の Dockerfile を使用します:
FROM registry.access.redhat.com/ubi10/ubi-minimal:10.2
WORKDIR /work/
RUN chown 1001 /work \
&& chmod "g+rwX" /work \
&& chown 1001:root /work
COPY --chown=1001:root --chmod=0755 target/*-runner /work/application
EXPOSE 8080
USER 1001
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
ドキュメント処理、グラフィック、PDF などをアプリケーションで利用できるようにするには、何も手動でコピーすることなく microdnf を使用して必要なライブラリーをインストールできます:
FROM registry.access.redhat.com/ubi10/ubi-minimal:10.2
RUN microdnf install -y freetype fontconfig \
&& microdnf clean all
WORKDIR /work/
RUN chown 1001 /work \
&& chmod "g+rwX" /work \
&& chown 1001:root /work
# Shared objects to be dynamically loaded at runtime as needed
COPY --chown=1001:root target/*.so /work/
COPY --chown=1001:root --chmod=0755 target/*-runner /work/application
EXPOSE 8080
USER 1001
ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]