gpt4 book ai didi

java - Dockerfile 中的 Maven + Java 应用程序

转载 作者:行者123 更新时间:2023-12-02 18:06:53 27 4
gpt4 key购买 nike

我是 java 和 maven 的新手。我构建了一个执行 flink 作业的应用程序。我已经创建了一个基本的 docker 图像,但我不确定如何执行/运行,就像我在终端中运行应用程序一样。

我目前在终端中运行应用程序如下:

 mvn package exec:java `-D exec.args="--runner=FlinkRunner --flinkMaster=localhost:8081 --filesToStage=.\target\maven_benchmark-1.0-SNAPSHOT-jar-with-dependencies.jar `" -P flink-runner`

这是我的docker文件

FROM maven:latest AS build
COPY src /usr/src/app/src
COPY pom.xml /usr/src/app
RUN mvn -f /usr/src/app/pom.xml clean package

FROM openjdk:14
COPY --from=build /usr/src/app/target/maven_benchmark-1.0-SNAPSHOT-jar-with-dependencies.jar /usr/app/maven_benchmark-1.0-SNAPSHOT-jar-with-dependencies.jar
WORKDIR /usr/app
EXPOSE 8080
ENTRYPOINT ["java","-jar","maven_benchmark-1.0-SNAPSHOT-jar-with-dependencies.jar"]

有什么建议吗?

提前致谢!

最佳答案

您正在使用 Maven 插件和 Maven 配置文件运行您的应用程序。您首先需要您的应用程序可以在 Maven 之外运行。

然后,您需要稍微清理一下 docker 步骤,这里有一些建议:

  • 在复制 pom 和下载依赖后移动复制 src
  • 不要为可运行的图像使用 root 用户
  • 为可运行图像使用更 slim 的基础图像
  • 使用爆炸 jar 而不是脂肪 jar 来获得更薄的层数
  • 使用 .dockerignore 来防止将不需要的东西复制到图像中

这是一个示例 Dockerfile:

FROM maven:3.6.3-openjdk-14-slim AS build
WORKDIR /build
# copy just pom.xml (dependencies and dowload them all for offline access later - cache layer)
COPY pom.xml .
RUN mvn dependency:go-offline -B
# copy source files and compile them (.dockerignore should handle what to copy)
COPY . .
RUN mvn package
# Explode fat runnable JARS
ARG DEPENDENCY=/build/target/dependency
RUN mkdir -p ${DEPENDENCY} && (cd ${DEPENDENCY}; jar -xf ../*.jar)


# Runnable image
FROM openjdk:14-alpine as runnable
VOLUME /tmp
VOLUME /logs
ARG DEPENDENCY=/build/target/dependency
# Create User&Group to not run docker images with root user
RUN addgroup -S awesome && adduser -S awesome -G awesome
USER awesome

# Copy libraries & meta-info & classes
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
# Run application
ENTRYPOINT ["java","-cp","app:app/lib/*","com.myawesomeness.Application"]

然后你的应用程序,必须首先在 maven 之外运行

关于java - Dockerfile 中的 Maven + Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62043353/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com