java Gradle和Docker:如何在Docker容器中运行Gradle构建?

u59ebvdq  于 2022-11-27  发布在  Java
关注(0)|答案(2)|浏览(181)

我有以下运行spring boot application的docker文件:

# 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

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

    • 编辑:**

我希望用户的步骤是:
1.从github克隆我的项目
1.运行docker build -t pokerstats .-这将执行gradle构建
1.运行码头集装箱运行-d-p 8080:8080扑克统计
用户将从github克隆我的项目-然后我希望他们能够运行docker容器,而不必先使用gradle构建项目-也就是说,我希望docker文件进行构建并将jar复制到容器中。

wwtsj6pe

wwtsj6pe1#

在阅读this article后,我已经能够使用多阶段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}
hgqdbh6s

hgqdbh6s2#

构建阶段

FROM等级:jdk 11-alpine竣工图_阶段
COPY --chown=gradle:gradle . /主页/gradle
RUN分级构建||返回1

Package 阶段

从打开的文件:11.0.11-jre
应用程序主目录=/app
复制--from=构建阶段/主目录/分级目录/构建/库/$商品名$应用程序主目录/
工作目录$应用程序主目录
运行组添加-r -g 1000用户&&用户添加-r -g用户-u 1000用户运行chown -R用户:用户/应用程序
USER用户

入口点执行java -jar ${人工制品名称}

相关问题