Skip to content

JRE8基础镜像制作

JRE8基础镜像制作 是指为运行 Java 应用构建一个包含 Java 运行环境(JRE)、系统配置、监控组件及应用启动脚本的标准化 Docker 基础镜像的过程^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。

该镜像作为应用容器的基础底包(Base Image),确保所有运行在其上的业务服务具有一致的环境配置、时区设置及监控能力^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。

核心组件

在构建 JRE8 基础镜像时,通常需要集成以下关键组件以确保生产环境的可用性与可观测性^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]:

  • JRE 环境: 使用特定版本的 JRE(例如 8u112)作为运行基础^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。
  • 时区配置: 将容器时区设置为 Asia/Shanghai,以符合本地化运维需求^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。
  • 监控 Agent: 集成 jmx_prometheus_javaagent,用于采集 JMX 指标并暴露给 Prometheus 抓取^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。
  • 启动脚本: 配置通用的 entrypoint.sh,通过环境变量动态传递 JVM 参数(如 -Duser.timezone)和 Java Agent 配置^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。

Dockerfile 配置示例

以下 Dockerfile 展示了如何将上述组件组合构建为 harbor.od.com/base/jre8:8u112 镜像^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]:

FROM harbor.od.com/public/jre:8u112

# 设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
    echo 'Asia/Shanghai' >/etc/timezone

# 添加监控配置文件和 Agent JAR 包
ADD config.yml /opt/prom/config.yml
ADD jmx_javaagent-0.3.1.jar /opt/prom/

# 设置工作目录并添加启动脚本
WORKDIR /opt/project_dir
ADD entrypoint.sh /entrypoint.sh

# 容器启动时执行脚本
CMD ["/entrypoint.sh"]

辅助文件与配置

1. 监控配置 (config.yml)

定义 Prometheus JMX Exporter 的抓取规则^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]:

---
rules:
  - pattern: '.*'

2. 启动脚本 (entrypoint.sh)

该脚本负责最终启动 Java 应用,利用环境变量动态组装启动命令^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]:

#!/bin/sh
# 定义 JVM 和 JMX Agent 基础选项
M_OPTS="-Duser.timezone=Asia/Shanghai -javaagent:/opt/prom/jmx_javaagent-0.3.1.jar=$(hostname -i):${M_PORT:-"12346"}:/opt/prom/config.yml"

# 获取额外的 JVM 选项(如果有)
C_OPTS=${C_OPTS}

# 获取要运行的 JAR 包名
JAR_BALL=${JAR_BALL}

# 执行 Java 命令
exec java -jar ${M_OPTS} ${C_OPTS} ${JAR_BALL}

构建与部署流程

完成上述文件准备后,通过 Docker 命令构建镜像并推送到私有仓库^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]:

  1. 构建镜像:
    docker build . -t harbor.od.com/base/jre8:8u112
    
  2. 推送镜像:
    docker push harbor.od.com/base/jre8:8u112
    

构建成功后,该镜像即可作为 Jenkins 流水线中 base_image 参数的默认值,用于构建各类 Java 业务服务(如 Dubbo 服务)的运行镜像^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。

相关概念

  • Jenkins Pipeline: 用于自动化拉取代码、构建并推送业务镜像的流程。
  • [[Docker]]: 容器化技术基础。
  • Prometheus: 监控数据的接收端。

Sources

  • 400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md