如何从Maven获取OpenJDK 11?Docker构建与CI/CD场景问询
解决方案:避免将OpenJDK存入Git,优化Docker构建的可移植性
首先明确一点:绝对不建议把完整的OpenJDK二进制包存入Git仓库。Git的设计初衷是管理源码,大体积的二进制文件会让仓库体积暴增、拉取速度变慢,还会污染提交历史,对CI/CD流程来说也会带来不必要的负担。下面给你几个更合理的方案,确保Docker构建能在任意机器(包括CI/CD环境)稳定运行:
1. 优先使用官方OpenJDK Docker镜像作为基础镜像
这是最简单也最推荐的方式。Docker Hub上有官方维护的OpenJDK镜像,包含你需要的OpenJDK 11版本,直接把它作为你的Docker镜像的基础,省去手动安装Java的步骤:
# 选择合适的官方镜像,比如带JRE的轻量版本,或者完整JDK版本 FROM openjdk:11-jre-slim # 后续步骤:部署Tomcat、安装JDBC驱动、部署你的应用
为什么这是最优解?
- 官方镜像经过严格测试,安全且维护及时,不会出现版本不一致的问题。
- 几乎所有CI/CD平台(GitHub Actions、GitLab CI、Jenkins等)都能直接拉取Docker Hub的官方镜像,无需额外配置。
- 你的Git仓库只需要维护Dockerfile,不需要任何大二进制文件,保持仓库整洁。
2. 若需自定义OpenJDK版本(官方镜像不满足):从可靠源下载并校验
如果你必须使用特定版本的OpenJDK(比如你提到的openjdk-11+28_linux-x64_bin.tar.gz),可以在Dockerfile中直接从官方源下载,同时添加校验步骤确保包的完整性,绝对不要把包存入Git:
# 用轻量基础镜像来下载并安装OpenJDK FROM alpine:latest # 安装依赖工具(curl、tar等) RUN apk add --no-cache curl tar # 下载OpenJDK包并校验SHA256哈希值(替换成你这个版本的真实校验值) RUN curl -O https://cdn.azul.com/zulu/bin/zulu11.37.19-ca-jdk11.0.6-linux_x64.tar.gz \ && echo "abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef zulu11.37.19-ca-jdk11.0.6-linux_x64.tar.gz" | sha256sum -c - \ && tar -xzf zulu11.37.19-ca-jdk11.0.6-linux_x64.tar.gz -C /opt \ && rm zulu11.37.19-ca-jdk11.0.6-linux_x64.tar.gz # 设置JAVA_HOME环境变量 ENV JAVA_HOME=/opt/zulu11.37.19-ca-jdk11.0.6-linux_x64 ENV PATH=$JAVA_HOME/bin:$PATH # 后续步骤...
注意事项:
- 选择稳定的官方下载源(比如Adoptium、Azul、Oracle的官方源),避免使用不可靠的第三方站点。
- 一定要添加哈希校验步骤,防止下载的包被篡改,保证构建的安全性和一致性。
- 如果是企业内部环境,可以把OpenJDK包上传到内部的Artifact仓库(比如Nexus、Artifactory),然后从内部源下载,确保网络访问稳定。
3. 其他依赖的处理建议(Tomcat、JDBC驱动、你的应用)
针对你提到的其他组件,也可以优化获取方式,适配CI/CD流程:
- Apache Tomcat:可以直接从Apache官方源下载指定版本的tar.gz,和OpenJDK的处理方式类似,不要把tar.gz存入Git。例如:
RUN curl -O https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.27/bin/apache-tomcat-9.0.27.tar.gz \ && tar -xzf apache-tomcat-9.0.27.tar.gz -C /opt \ && rm apache-tomcat-9.0.27.tar.gz - DB2 JDBC驱动(jcc-11.5.0.0.jar):利用Maven的
dependency:get命令在Docker构建过程中直接拉取,无需提前下载到本地:# 先安装Maven(或者用带Maven的基础镜像) RUN apk add --no-cache maven RUN mvn dependency:get -Dartifact=com.ibm.db2:jcc:11.5.0.0 -Ddest=/opt/tomcat/lib/ - 你的Web应用(my-app.tar.gz):在CI/CD流程中先执行Maven构建生成tar.gz,然后将其作为Docker构建上下文的一部分传入
docker build命令,或者将构建产物上传到Maven仓库,在Dockerfile中拉取。
总结
确保Docker构建可移植性的核心原则是:Git只存源码和配置文件,所有二进制依赖通过可靠的镜像源或下载源获取,并添加校验保证一致性。优先使用官方Docker镜像能帮你省去大部分麻烦,同时让CI/CD流程更简洁可靠。
内容的提问来源于stack exchange,提问作者Joe DiNottra
相关产品推荐
相关产品推荐

