jav*_*900 7 java jar gradle docker
我有以下运行的 docker 文件spring boot application:
# 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"]
Run Code Online (Sandbox Code Playgroud)
问题是目前我必须首先gradle clean build在我的主机上运行才能在我的本地机器上的路径上创建 jar 文件:
/build/libs/pokerstats-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
如何将其gradle clean build放入我的 docker 文件中,以便在容器内完成构建步骤?
编辑:
我希望用户的步骤是:
githubdocker build -t pokerstats .- 这将进行 gradle 构建用户将从 github 克隆我的项目 - 然后我希望他们能够运行 docker 容器,而不必先用 gradle 构建项目 - 即我希望 docker 文件进行构建并将 jar 复制到容器中。
After reading this article I have been able to solve this using a Multi Stage Docker Build. Please see the Docker file below:
# 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}
Run Code Online (Sandbox Code Playgroud)
多阶段构建。确保在您的项目目录中包含build.gradle和settings.gradle文件,我尝试使其尽可能干净和简洁:
#Build stage
FROM gradle:latest AS BUILD
WORKDIR /usr/app/
COPY . .
RUN gradle build
# Package stage
FROM openjdk:latest
ENV JAR_NAME=app.jar
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME
COPY --from=BUILD $APP_HOME .
EXPOSE 8080
ENTRYPOINT exec java -jar $APP_HOME/build/libs/$JAR_NAME
Run Code Online (Sandbox Code Playgroud)
确保将 JAR_NAME 变量更改为您生成的 jar 文件名。
| 归档时间: |
|
| 查看次数: |
11115 次 |
| 最近记录: |