我有一个gradle spark应用程序,需要与docker一起使用才能创建容器。我是docker的新手,我很难设置Dockerfile。
在Dockerfile中,我尝试执行build.gradle并运行Main.java。
# Start with a base image containing Java runtime
FROM gradle:jdk10 as builder
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build
FROM openjdk:10-jre-slim
COPY ./ /tmp/
CMD ["cd tmp/src/main/java/Empowering/"]
CMD ["javac Main.java"]
EXPOSE 8080
对于运行时容器,您不应该使用javac
。 Gradle正在为你做构建。因此,您只需要担心运行Gradle正在生成的内容。此外,您希望确保正确复制构建器正在构建的内容。
我不知道你正在运行什么类型的应用程序以及你的Gradle配置是什么样的,所以我将不得不在这里做一些假设。
如果您正在生成Web应用程序,我强烈建议您使用应用程序插件。如果是这种情况,installDist
会将您需要的所有内容放入build/install
文件夹中。一旦到位,您可以简单地为CMD
/ ENTRYPOINT
使用生成的shell脚本
例如:
# Start with a base image containing Java runtime
FROM gradle:jdk10 as builder
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle installDist
FROM openjdk:10-jre-slim
EXPOSE 8080
COPY --from=builder /home/gradle/src/build/install/<app name>/ /app/
WORKDIR /app
CMD ["bin/<app name>"]
如果你打包成jar,你可以简单地复制构建器中build
/ fat jar任务生成的jar然后运行
# Start with a base image containing Java runtime
FROM gradle:jdk10 as builder
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build
FROM openjdk:10-jre-slim
EXPOSE 8080
COPY --from=builder /home/gradle/src/build/<jar output path>/<app name>.jar /app/
WORKDIR /app
CMD ["java -jar <app name>.jar"]