1.2. 创建自定义容器镜像
您可以使用以下方法之一从 Quarkus 应用程序创建容器镜像:
- 手动创建容器
- 使用 OpenShift Container Platform Docker 构建创建容器
将 Quarkus 应用程序编译到原生可执行文件会在分析和优化过程中消耗大量内存。您可以通过设置 quarkus.native.native-image-xmx
配置属性来限制原生编译过程中使用的内存量。设置低内存限值可能会增加构建时间。
1.2.1. 手动创建容器
您可以使用应用程序为 Linux AMD64 手动创建容器镜像。当您使用 Quarkus Native 容器生成原生镜像时,原生镜像会创建一个以 Linux AMD64 为目标的可执行文件。如果您的主机操作系统与 Linux AMD64 不同,则无法直接运行二进制文件,您需要手动创建容器。
您的 Quarkus Getting Started 项目在 src/main/docker
目录中包含一个 Dockerfile.native
,其内容如下:
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.9 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 ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
通用基础镜像(UBI)
以下列表显示了可用于 Dockerfile 的合适镜像。
Red Hat Universal Base Image 8 (UBI8)。此基础镜像旨在设计并设计成为所有容器化应用程序、中间件和实用程序的基础层。
registry.access.redhat.com/ubi8/ubi:8.9
Red Hat Universal Base Image 8 Minimal (UBI8-minimal)。使用 microdnf 作为软件包管理器的精简版 UBI8 镜像。
registry.access.redhat.com/ubi8/ubi-minimal:8.9
- 所有红帽基础镜像都可在容器镜像目录站点中找到。https://catalog.redhat.com/software/containers/search?q=UBI&p=1
流程
使用以下方法之一构建原生 Linux 可执行文件:
docker:
./mvnw package -Dnative -Dquarkus.native.container-build=true
Podman:
./mvnw package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
使用以下方法之一构建容器镜像:
docker:
docker build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started
Podman
podman build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started
使用以下方法之一运行容器:
docker:
docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
Podman:
podman run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
1.2.2. 使用 OpenShift Docker 构建创建容器
您可以使用 OpenShift Container Platform Docker 构建策略为 Quarkus 应用程序创建容器镜像。此策略使用集群中的构建配置创建容器镜像。
先决条件
-
您可以访问 OpenShift Container Platform 集群并安装
oc
工具的最新版本。有关安装oc
的详情,请参考 安装和配置 OpenShift Container Platform 集群指南中的安装 CLI。 - OpenShift Container Platform API 端点的 URL。
流程
登录到 OpenShift CLI:
oc login -u <username_url>
在 OpenShift 中创建一个新项目:
oc new-project <project_name>
根据
src/main/docker/Dockerfile.native
文件创建构建配置:cat src/main/docker/Dockerfile.native | oc new-build --name <build_name> --strategy=docker --dockerfile -
构建项目:
oc start-build <build_name> --from-dir .
将项目部署到 OpenShift Container Platform:
oc new-app <build_name>
公开服务:
oc expose svc/<build_name>