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
运行时与 JVM 优化
为可执行 Fat-JAR 构建 Docker 容器镜像
你将创建什么
你将为一个打包为可执行 Uber-JAR(Fat-JAR) 的 Vert.x 应用程序构建容器镜像。
本实战指南主要包含以下核心 Dockerfile:
-
docker-maven/Dockerfile:针对 Maven 用户; -
docker-gradle/Dockerfile:针对 Gradle 用户。
前置要求
-
文本编辑器或 IDE
-
Docker 环境
使用 Maven
生成工程项目
首先,在 https://start.vertx.io 上生成工程:
-
构建工具选择
Maven; -
将
artifactId设置为container-uber-jar; -
JDK 版本选择
JDK 11; -
点击生成并将压缩包解压至本地目录。
或者,打开终端直接执行命令行下载:
Dockerfile 解析
打开并检查 docker-maven/Dockerfile:
# 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"]
| 1 | 使用 Eclipse Temurin 11 JRE 作为精简基础镜像 |
| 2 | 将构建生成的 Fat-JAR 复制进镜像的 /deployments/ 目录 |
| 3 | 暴露服务监听端口 8888 |
| 4 | 设置容器启动入口命令 |
构建容器镜像
首先通过 Maven 打包生成 Fat-JAR:
./mvnw clean package
接着构建 Docker 镜像:
docker build -t vertx-docker-maven -f docker-maven/Dockerfile .
运行容器
启动容器并映射端口:
docker run -d -p 8888:8888 --name my-vertx-app vertx-docker-maven
访问验证:
curl http://localhost:8888/
控制台将返回:Hello from Vert.x!。
使用 Gradle
生成工程项目
类似地,在终端通过命令行快速创建 Gradle 项目:
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
Dockerfile 解析
打开并检查 docker-gradle/Dockerfile:
# 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"]
构建与运行
./gradlew clean assemble
docker build -t vertx-docker-gradle -f docker-gradle/Dockerfile .
docker run -d -p 8888:8888 --name my-vertx-app-gradle vertx-docker-gradle
curl http://localhost:8888/
总结
本文档展示了:
-
如何将 Vert.x 独立应用构建为 Uber-JAR;
-
针对 Maven 与 Gradle 分别编写轻量高效的 Dockerfile;
-
构建、启动与测试 Docker 容器中的 Vert.x 实例。