当前位置: 首页 > 知识库问答 >
问题:

Gradle和Docker:如何在Docker容器中运行Gradle build?

孔硕
2023-03-14

我有以下docker文件,它运行Spring启动应用程序

# For Java 11, try this
FROM adoptopenjdk/openjdk11:alpine-jre

#
ARG JAR_FILE=/build/libs/pokerstats-0.0.1-SNAPSHOT.jar

#
WORKDIR /opt/app

#
COPY ${JAR_FILE} app.jar

#
ENTRYPOINT ["java","-jar","app.jar"]

问题是,目前我必须首先在主机上运行 gradle clean build,以便在路径的本地计算机上创建 jar 文件:

/build/libs/pokerstats-0.0.1-SNAPSHOT.jar

我如何将这个< code>gradle clean build放入我的docker文件中,以便构建步骤在容器内部完成?

编辑:

我希望用户的步骤是:

    < li >从< code>github克隆我的项目 < li >运行< code>docker build -t pokerstats。 -它将执行梯度构建 < li >运行docker容器run -d -p 8080:8080 pokerstats

用户将从github克隆我的项目-然后我希望他们能够运行docker容器,而无需先使用gradle构建项目-即我希望docker文件进行构建并将jar复制到容器中。

共有1个答案

贝镜
2023-03-14

阅读本文后,我已经能够使用多阶段Docker构建来解决此问题。请参阅下面的 Docker 文件:

# using multistage docker build
# ref: https://docs.docker.com/develop/develop-images/multistage-build/
    
# temp container to build using gradle
FROM gradle:5.3.0-jdk-alpine AS TEMP_BUILD_IMAGE
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME
COPY build.gradle settings.gradle $APP_HOME
  
COPY gradle $APP_HOME/gradle
COPY --chown=gradle:gradle . /home/gradle/src
USER root
RUN chown -R gradle /home/gradle/src
    
RUN gradle build || return 0
COPY . .
RUN gradle clean build
    
# actual container
FROM adoptopenjdk/openjdk11:alpine-jre
ENV ARTIFACT_NAME=pokerstats-0.0.1-SNAPSHOT.jar
ENV APP_HOME=/usr/app/
    
WORKDIR $APP_HOME
COPY --from=TEMP_BUILD_IMAGE $APP_HOME/build/libs/$ARTIFACT_NAME .
    
EXPOSE 8080
ENTRYPOINT exec java -jar ${ARTIFACT_NAME}
 类似资料:
  • 我已经在我的主机虚拟机上安装了docker。现在想用vi创建一个文件。 但它向我展示了一个错误:

  • Debug.DockerFile 运行命令 正在连接RabbitMQ

  • 问题内容: 我正在研究Centos7。我有一个运行Jenkins的Docker容器。在那个Jenkins容器中,我必须构建并运行其他Docker容器。但是詹金斯不认识码头工人。我能够执行一个shell并将docker安装在容器中。但是,是否有可能让容器在主机上使用我的docker- engine?如何使用? 在Jenkins-(docker)-容器中安装Docker的最佳选择是什么? 问题答案:

  • Azure文档(https://docs.microsoft.com/en-us/Azure/devops/pipelines/tasks/build/docker?view=azure-devops)没有指定如何在Azure pipeline中运行docker容器。我们可以使用docker@2任务来构建/推送docker图像,但它没有运行容器的命令。通过查看旧版本Docker task的源代码,

  • 问题内容: 我试图在docker容器中运行cron作业 但对我没有用 我的容器只有cron.daily和cron.weekly文件 crontab,cron.d,cron.hourly …在我的容器中不存在 crontab -e也无法正常工作 我的容器使用/ bin / bash运行 问题答案: 这是我运行我的cron容器之一的方法。 Dockerfile: crontab.txt entry.s

  • 问题内容: 我正在尝试在调用shell脚本的docker容器中运行cronjob。 昨天我一直在网上搜索和堆栈溢出,但是我找不到真正可行的解决方案。 我怎样才能做到这一点? 编辑: 我已经创建了一个(带注释的)github存储库,上面有一个工作的docker cron容器,该容器以给定的时间间隔调用shell脚本。 问题答案: 您可以将crontab复制到映像中,以使从该映像启动的容器运行该作业。