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
为打包成可执行 uber-jar 的 Vert.x 应用创建容器
您将创建什么
您将为打包成可执行 uber-jar 的 Vert.x 应用创建容器。
操作指南包含以下几个文件
-
对于 Maven 用户:
docker-maven/Dockerfile
,或 -
对于 Gradle 用户:
docker-gradle/Dockerfile
。
您需要什么
-
文本编辑器或 IDE
-
Docker
使用 Maven
生成项目
首先,从 https://start.vertx.io 生成项目
-
选择
Maven
构建类型 -
将
artifactId
设置为container-uber-jar
-
选择
JDK 11
JDK 版本 -
点击生成并解压内容到您的磁盘上
或者,打开终端并运行
或者,使用 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
构建文件
# 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 构建分为两个阶段
-
在
maven:3.9.9-eclipse-temurin-11
容器中构建 Maven 项目 -
将构建输出复制到
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 生成项目
-
选择
Gradle
构建类型 -
将
artifactId
设置为container-uber-jar
-
选择
JDK 11
JDK 版本 -
点击生成并解压内容到您的磁盘上
或者,打开终端并运行
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
构建文件
# 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 构建分为两个阶段
-
在
gradle:8.1.1-jdk11
容器中构建 Gradle 项目 -
将构建输出复制到
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 应用获取问候!
总结
本文档涵盖了
-
为 Maven 用户配置 Docker 构建,
-
为 Gradle 用户配置 Docker 构建。