为打包为可执行 uber-jar 的 Vert.x 应用创建容器

您将创建什么

您将为打包为可执行 uber-jar 的 Vert.x 应用创建一个容器。

该操作指南包含几个文件

  1. 适用于 Maven 用户的 docker-maven/Dockerfile,或

  2. 适用于 Gradle 用户的 docker-gradle/Dockerfile

您需要什么

  • 文本编辑器或 IDE

  • Docker

使用 Maven

生成项目

首先,从 https://start.vertx.io 生成项目

  1. 选择 Maven 构建类型

  2. artifactId 设置为 container-uber-jar

  3. 选择 JDK 11 JDK 版本

  4. 点击生成并将其内容提取到您磁盘上的某个位置

或者,打开终端并运行

curl -G https://start.vertx.io/starter.zip -d "artifactId=container-uber-jar" -d "jdkVersion=11" -d "buildTool=maven" --output container-uber-jar.zip
unzip container-uber-jar.zip

或者,使用 HTTPie

http https://start.vertx.io/starter.zip artifactId==container-uber-jar jdkVersion==11 buildTool==maven --output container-uber-jar.zip
unzip container-uber-jar.zip

配置 Docker 构建

在项目根目录下,创建一个 docker-maven/Dockerfile 构建文件

适用于 Maven 项目的 Docker 构建文件
# 1st Docker build stage: build the project with Maven
FROM maven:3.9.9-eclipse-temurin-11 AS builder
WORKDIR /project
COPY . /project/
RUN mvn package -DskipTests -B

# 2nd Docker build stage: copy builder output and configure entry point
FROM eclipse-temurin:11
ENV APP_DIR=/application
ENV APP_FILE=container-uber-jar.jar

EXPOSE 8888

WORKDIR $APP_DIR
COPY --from=builder /project/target/*-fat.jar $APP_DIR/$APP_FILE

ENTRYPOINT ["sh", "-c"]
CMD ["exec java -jar $APP_FILE"]

Docker 构建包含两个阶段

  1. maven:3.9.9-eclipse-temurin-11 容器中构建 Maven 项目

  2. 将构建输出复制到 eclipse-temurin:11 容器中并配置入口点

这种方法的好处是

  • 可重现的构建:无论团队中谁运行 Docker 构建,它都将始终使用相同的 Maven 版本和 JDK 版本(在构建时和运行时)

  • 小的容器镜像大小:最终容器将基于精简的 JDK 镜像,并且只会添加 uber-jar 文件

要构建容器,请在项目根目录下打开终端并运行

docker build -t com.example/container-uber-jar -f docker-maven/Dockerfile .

使用 Gradle

生成项目

首先,从 https://start.vertx.io 生成项目

  1. 选择 Gradle 构建类型

  2. artifactId 设置为 container-uber-jar

  3. 选择 JDK 11 JDK 版本

  4. 点击生成并将其内容提取到您磁盘上的某个位置

或者,打开终端并运行

curl -G https://start.vertx.io/starter.zip -d "artifactId=container-uber-jar" -d "jdkVersion=11" -d "buildTool=gradle" --output container-uber-jar.zip
unzip container-uber-jar.zip

或者,使用 HTTPie

http https://start.vertx.io/starter.zip artifactId==container-uber-jar jdkVersion==11 buildTool==gradle --output container-uber-jar.zip
unzip container-uber-jar.zip

配置 Docker 构建

在项目根目录下,创建一个 docker-gradle/Dockerfile 构建文件

适用于 Gradle 项目的 Docker 构建文件
# 1st Docker build stage: build the project with Gradle
FROM gradle:8.11.1-jdk11 AS builder
WORKDIR /project
COPY . /project/
RUN gradle assemble --no-daemon

# 2nd Docker build stage: copy builder output and configure entry point
FROM eclipse-temurin:11
ENV APP_DIR=/application
ENV APP_FILE=container-uber-jar.jar

EXPOSE 8888

WORKDIR $APP_DIR
COPY --from=builder /project/build/libs/*-fat.jar $APP_DIR/$APP_FILE

ENTRYPOINT ["sh", "-c"]
CMD ["exec java -jar $APP_FILE"]

Docker 构建包含两个阶段

  1. gradle:8.1.1-jdk11 容器中构建 Gradle 项目

  2. 将构建输出复制到 eclipse-temurin:11 容器中并配置入口点

这种方法的好处是

  • 可重现的构建:无论团队中谁运行 Docker 构建,它都将始终使用相同的 Gradle 版本和 JDK 版本(在构建时和运行时)

  • 小的容器镜像大小:最终容器将基于精简的 JDK 镜像,并且只会添加 uber-jar 文件

要构建容器,请在项目根目录下打开终端并运行

docker build -t com.example/container-uber-jar -f docker-gradle/Dockerfile .

运行应用程序

现在您已经构建了容器镜像,是时候尝试一下了!

打开终端并运行

docker run -p 8888:8888 com.example/container-uber-jar

您应该在控制台输出中看到类似这样的消息

HTTP server started on port 8888
Dec 02, 2024 5:17:19 PM io.vertx.launcher.application.VertxApplication
INFO: Succeeded in deploying verticle

然后浏览到 https://:8888,从容器中运行的 Vert.x 应用获取您的问候!

总结

本文档涵盖了

  1. 为 Maven 用户配置 Docker 构建,

  2. 为 Gradle 用户配置 Docker 构建。


最后发布于:2025-02-03 00:38:56 +0000。