跳转到内容

打包&发布应用

Feat 应用可以通过 Maven 的 maven-shade-plugin 插件打包成一个包含所有依赖的可执行 jar 包(也称为 fat jar)。

pom.xml 中添加以下配置:

pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<!-- 采用追加的方式 -->
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/services/tech.smartboot.feat.cloud.CloudService</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>your.package.MainClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

执行以下命令进行打包:

Terminal window
mvn clean package

Feat 应用支持多种 Docker 部署方式,包括传统的基于 JRE 的镜像和高性能的 Native 镜像。下面我们将详细介绍这两种部署方式。

有关完整示例,请参见 helloworld_docker

对于传统的 Docker 部署方式,我们可以使用 JRE 镜像来运行打包好的 jar 文件。

创建一个基于轻量级 JRE 镜像的 Dockerfile:

Dockerfile
FROM eclipse-temurin:21.0.7_6-jre-alpine
WORKDIR /feat
COPY target/helloworld_docker*.jar helloworld.jar
EXPOSE 8080
CMD ["java", "-jar", "helloworld.jar"]

这个 Dockerfile 使用了 Eclipse Temurin 的 Alpine Linux 版本 JRE 镜像,这是一个非常轻量级的选择。

使用以下命令构建和运行基于 JRE 的镜像:

Terminal window
# 构建镜像
docker build -t feat-docker:jre .
# 运行容器
docker run -p 8080:8080 feat-docker:jre

现在你可以通过访问 http://localhost:8080/hello 来测试你的应用了。

Feat 支持使用 GraalVM 将应用编译为本地可执行文件,从而获得更快的启动速度和更低的资源消耗。我们可以将这些 Native 应用程序打包到 Docker 镜像中,以实现高效的容器化部署。

以下是一个用于构建 Feat Native 应用的 Dockerfile 示例:

Dockerfile
FROM container-registry.oracle.com/graalvm/native-image:21-ol8 AS builder
COPY target/helloworld_docker*.jar helloworld.jar
# Build
RUN native-image --no-fallback -jar helloworld.jar
# 运行阶段:用 ubuntu 最小镜像
FROM ubuntu:18.04
EXPOSE 8080
# Copy the native executable into the containers
COPY --from=builder /app/helloworld helloworld
ENTRYPOINT ["/helloworld"]

这个 Dockerfile 采用了多阶段构建:

  1. 第一阶段使用 GraalVM 镜像将 jar 包编译为本地可执行文件
  2. 第二阶段使用轻量级的 Ubuntu 镜像作为运行环境,复制编译好的可执行文件

执行以下命令构建并运行 Docker 镜像:

Terminal window
# 打包应用
mvn clean package
# 构建 Native 镜像
docker build -t feat-docker:native .
# 运行容器
docker run -p 8080:8080 feat-docker:native

现在你可以通过访问 http://localhost:8080/hello 来测试你的应用了。