【问题标题】:How can I automatically build my Docker image without including sources?如何在不包含源的情况下自动构建我的 Docker 映像?
【发布时间】: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 上的自动构建能够为我完成,而无需包含任何包或源。

【问题讨论】:

标签: java git maven docker dockerfile


【解决方案1】:

一种方法是使用此处所述的多阶段构建:https://docs.docker.com/develop/develop-images/multistage-build/

多阶段构建允许您在一个阶段安装构建依赖项并构建发布工件,然后仅将构建工件复制到最终映像。

例如:

#Where we start
FROM openjdk:12-alpine AS builder

#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

# Build release image
FROM openjdk:12-alpine

#Copy result
WORKDIR /Executables
COPY --from=builder /HungryBoiiGit/target/HungryBoii-distributable .

#Add user and group for running as unprivileged user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

#Define how to start
ENTRYPOINT ["java", "-jar", "HungryBoii-1.0-SNAPSHOT.jar"]

【讨论】:

  • 谢谢!正如我之前提到的,这正是我一直在寻找的东西,并且像魅力一样工作!
猜你喜欢
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 2020-04-30
  • 2016-06-03
  • 2020-04-06
  • 2019-02-09
相关资源
最近更新 更多