【发布时间】:2019-10-07 16:34:00
【问题描述】:
我希望我的 Dockerfile 自动克隆我的 GitHub 存储库,使用 Maven 构建 .jar 文件,最后在映像中使用所述 .jar 文件,而不包括源文件或 Git 和 Maven 包。
这可能吗,还是我必须在 Dockerfile 之外手动编译我的 .jar 文件才能在构建时将其复制到映像中?
我的目标是让 DockerHub 在我向其推送新代码时自动重建我的项目映像。
目前,我的 Dockerfile 安装了 Git 和 Maven,克隆了我的存储库并编译了 .jar 文件。这工作正常,但感觉不是最佳解决方案,因为 Git 和 Maven 包仍然安装在映像中。
#Where we start
FROM openjdk:12-alpine
#Get APK up to date
RUN apk update && apk upgrade
#Install Maven
RUN apk add maven
#Git
RUN apk add git
RUN mkdir /HungryBoiiGit
RUN git clone https://github.com/hannesknutsson/HungryBoii.git /HungryBoiiGit
#Build
RUN mvn -f /HungryBoiiGit clean install
#Save result
RUN mkdir /Executables
RUN cp -r /HungryBoiiGit/target/HungryBoii-distributable/* /Executables
#Remove Git repo
RUN rm -rf /HungryBoiiGit
#Add user and group for running as unprivileged user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
#Define how to start
WORKDIR /Executables
ENTRYPOINT ["java", "-jar", "HungryBoii-1.0-SNAPSHOT.jar"]
我知道每当我决定构建我的项目时,都会有 maven 插件构建和推送 Docker 映像,但这并不是我真正想要的方式。我希望 DockerHub 上的自动构建能够为我完成,而无需包含任何包或源。
【问题讨论】:
-
一种方法是使用多阶段构建。 docs.docker.com/develop/develop-images/multistage-build
-
这正是我一直在寻找的!将此作为回复,我会将其标记为正确。 :)
标签: java git maven docker dockerfile