簡體   English   中英

Maven + Java 應用在 Dockerfile

[英]Maven + Java application in Dockerfile

我是 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 用戶用於可運行映像
  • 使用更苗條的基礎鏡像作為可運行鏡像
  • 使用爆款 jars 代替肥款 jars 以獲得更纖薄的層次
  • 利用 .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 之外運行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM