我有一个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
答案 0 :(得分:0)
对于您的运行时容器,您不应该使用javac
。 Gradle正在为您完成构建。因此,您只需要担心运行Gradle生产的产品。此外,您还需要确保正确复制了构建器正在构建的内容。
我不知道您正在运行哪种类型的应用程序以及您的Gradle配置是什么样子,因此我将不得不在此处做出一些假设。
如果要生成Web应用程序,我强烈建议您使用应用程序插件。如果是这种情况,installDist
会将您需要的所有内容放入build/install
文件夹中。安装到位后,您只需为CMD
/ ENTRYPOINT
例如:
# 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>"]
如果要包装为罐子,则只需在构建器中复制build
/ fat 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"]