The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

Quarkus运行时基础镜像

为了简化本地可执行文件的容器化步骤,Quarkus提供了一个包含运行这些可执行文件依赖的基础镜像。 quarkus-micro-image:1.0 镜像是:

  • 小的 (基于 ubi8-micro )

  • 专为容器而设计的

  • 包含正确的依赖项(glibc、libstdc++、zlib)

  • 支持upx压缩的可执行文件(更多相关细节在 启用压缩文档 中)

使用此基础镜像

在你的 Dockerfile 中,只需使用:

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

扩展该镜像

你的应用程序可能有其他的额外要求。例如,如果你有一个依赖于 libfreetype.so 的应用程序,你需要将本地库拷贝到容器当中。在这种情况下,你需要使用一个多阶段的 dockerfile 来拷贝所需要的依赖库:

# 第一阶段 - 在中间容器中安装依赖库
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.5 as BUILD
RUN microdnf install freetype

# 第二阶段 - 拷贝依赖库
FROM quay.io/quarkus/quarkus-micro-image:1.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 ,同时还需要字体和字体配置:

# 第一阶段 - 在中间容器中安装依赖库
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.5 as BUILD
RUN microdnf install freetype fontconfig

# 第二阶段 - 拷贝依赖库
FROM quay.io/quarkus/quarkus-micro-image:1.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"]

替代方案 - 使用 ubi-minimal

如果微镜像不符合你的要求,你可以使用 UBI- Minimal。这是一个更大的镜像,但包含了更多实用程序 且更接近于完整的 Linux 发行版。通常,它包含一个包管理器 (microdnf),因此你可以利用它更方便地安装软件包。

要使用该基础镜像,使用以下 Dockerfile:

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