Quarkus Base Runtime Image

为了简化本机可执行文件的容器化,Quarkus 提供了一个基本映像,用于提供运行这些可执行文件的要求。quarkus-micro-image:2.0 映像是:

To ease the containerization of native executables, Quarkus provides a base image providing the requirements to run these executables. The quarkus-micro-image:2.0 image is:

  • small (based on ubi8-micro)

  • designed for containers

  • contains the right set of dependencies (glibc, libstdc++, zlib)

  • support upx-compressed executables (more details on the enabling compression documentation)

Using the base image

在您的 Dockerfile 中,只需使用:

In your Dockerfile, just use:

FROM quay.io/quarkus/quarkus-micro-image:2.0
WORKDIR /work/
COPY target/*-runner /work/application
RUN chmod 775 /work
EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

Extending the image

您的应用程序可能还有其他要求。例如,如果您有一个需要 libfreetype.so 的应用程序,则需要将本机库复制到容器中。在这种情况下,您需要使用多阶段 dockerfile 来复制所需的库:

Your application may have additional requirements. For example, if you have an application that requires libfreetype.so, you need to copy the native libraries to the container. In this case, you need to use a multi-stage dockerfile to copy the required libraries:

# First stage - install the dependencies in an intermediate container
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.10 as BUILD
RUN microdnf install freetype

# Second stage - copy the dependencies
FROM quay.io/quarkus/quarkus-micro-image:2.0
COPY --from=BUILD \
   /lib64/libfreetype.so.6 \
   /lib64/libbz2.so.1 \
   /lib64/libpng16.so.16 \
   /lib64/

WORKDIR /work/
COPY target/*-runner /work/application
RUN chmod 775 /work
EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

如果您需要访问完整 AWT 支持,您需要不仅仅是 libfreetype.so,还需要字体和字体配置:

If you need to have access to the full AWT support, you need more than just libfreetype.so, but also the font and font configurations:

# First stage - install the dependencies in an intermediate container
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.10 as BUILD
RUN microdnf install freetype fontconfig

# Second stage - copy the dependencies
FROM quay.io/quarkus/quarkus-micro-image:2.0
COPY --from=BUILD \
   /lib64/libfreetype.so.6 \
   /lib64/libgcc_s.so.1 \
   /lib64/libbz2.so.1 \
   /lib64/libpng16.so.16 \
   /lib64/libm.so.6 \
   /lib64/libbz2.so.1 \
   /lib64/libexpat.so.1 \
   /lib64/libuuid.so.1 \
   /lib64/

COPY --from=BUILD \
   /usr/lib64/libfontconfig.so.1 \
   /usr/lib64/

COPY --from=BUILD \
    /usr/share/fonts /usr/share/fonts

COPY --from=BUILD \
    /usr/share/fontconfig /usr/share/fontconfig

COPY --from=BUILD \
    /usr/lib/fontconfig /usr/lib/fontconfig

COPY --from=BUILD \
     /etc/fonts /etc/fonts

WORKDIR /work/
COPY target/*-runner /work/application
RUN chmod 775 /work
EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

Alternative - Using ubi-minimal

如果微型镜像不符合您的要求,可使用 ubi8/ubi-minimal,这是一个更大的镜像,但包含更多实用工具,并且更接近完整的 Linux 发行版。通常,它包含一个程序包管理器 (microdnf),以便您可以更方便地安装程序包。

If the micro image does not suit your requirements, you can use ubi8/ubi-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

To use this base image, use the following Dockerfile:

FROM registry.access.redhat.com/ubi8/ubi-minimal:8.10
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

CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]