You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:55:02