From 7b150758f796fbf5807b433fa031055de467b31b Mon Sep 17 00:00:00 2001 From: gitadmin Date: Thu, 18 Sep 2025 21:23:44 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=BE=E5=85=A5=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dockerfiles/jre/8u202-centos8-dos/Dockerfile | 2 +- dockerfiles/jre/8u202-debian13-dos/Dockerfile | 108 +++++++++ dockerfiles/jre/8u202-debian13-dos/deploy.sh | 209 ++++++++++++++++++ dockerfiles/jre/8u202-utunbu22-dos/deploy.sh | 2 +- 4 files changed, 319 insertions(+), 2 deletions(-) create mode 100644 dockerfiles/jre/8u202-debian13-dos/Dockerfile create mode 100644 dockerfiles/jre/8u202-debian13-dos/deploy.sh diff --git a/dockerfiles/jre/8u202-centos8-dos/Dockerfile b/dockerfiles/jre/8u202-centos8-dos/Dockerfile index d83c094..516d198 100644 --- a/dockerfiles/jre/8u202-centos8-dos/Dockerfile +++ b/dockerfiles/jre/8u202-centos8-dos/Dockerfile @@ -4,7 +4,7 @@ FROM centos:8 # 设置元数据标签 LABEL maintainer="小蚂蚁云团队" \ version="1.0" \ - description="基于Rocky Linux 8的JRE 8u202运行环境(支持中英文)" \ + description="基于CentOS 8的JRE 8u202运行环境(支持中英文)" \ java.version="1.8.0_202" # 设置环境变量 diff --git a/dockerfiles/jre/8u202-debian13-dos/Dockerfile b/dockerfiles/jre/8u202-debian13-dos/Dockerfile new file mode 100644 index 0000000..ed6abed --- /dev/null +++ b/dockerfiles/jre/8u202-debian13-dos/Dockerfile @@ -0,0 +1,108 @@ +# 使用 Debian 13 (trixie) 作为基础镜像 +# debian:trixie-slim(Debian 13 的代号) +FROM debian:trixie-slim + +# 设置元数据标签 +LABEL maintainer="小蚂蚁云团队" \ + version="1.0" \ + description="基于Debian的JRE 8u202运行环境(支持中英文)" \ + java.version="1.8.0_202" + +# 设置环境变量 +ENV TZ=Asia/Shanghai \ + LANG=zh_CN.UTF-8 \ + LANGUAGE=zh_CN:zh:en_US:en \ + LC_ALL=zh_CN.UTF-8 \ + JAVA_HOME=/usr/local/jre1.8.0_202 \ + PATH=/usr/local/jre1.8.0_202/bin:$PATH \ + DEBIAN_FRONTEND=noninteractive + +# 设置工作目录 +WORKDIR /tmp + +# 复制本地JRE压缩包到镜像中 +COPY jre-8u202-linux-x64.tar.gz /tmp/ + +# 安装必要的系统包并配置环境 +RUN set -eux; \ + \ + # 配置阿里云Debian镜像源 + echo "deb http://mirrors.aliyun.com/debian/ bookworm main non-free non-free-firmware" > /etc/apt/sources.list; \ + echo "deb http://mirrors.aliyun.com/debian/ bookworm-updates main non-free non-free-firmware" >> /etc/apt/sources.list; \ + echo "deb http://mirrors.aliyun.com/debian/ bookworm-backports main non-free non-free-firmware" >> /etc/apt/sources.list; \ + echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main non-free non-free-firmware" >> /etc/apt/sources.list; \ + \ + # 更新系统并安装中文语言支持 + apt-get update && \ + apt-get install -y --no-install-recommends \ + tzdata \ + locales \ + fontconfig \ + fonts-dejavu \ + fonts-wqy-microhei \ + ca-certificates \ + && \ + \ + # 清理apt缓存以减少镜像大小 + apt-get clean && \ + rm -rf /var/lib/apt/lists/*; \ + \ + # 配置时区 + ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \ + echo $TZ > /etc/timezone; \ + \ + # 生成中文本地化配置 + echo "zh_CN.UTF-8 UTF-8" > /etc/locale.gen; \ + echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen; \ + locale-gen; \ + \ + # 设置系统语言环境 + update-locale LANG=zh_CN.UTF-8; \ + \ + # 解压JRE到/usr/local目录 + tar -xzf jre-8u202-linux-x64.tar.gz -C /usr/local/ && \ + \ + # 删除临时文件 + rm -f jre-8u202-linux-x64.tar.gz; \ + \ + # 创建符号链接以便版本升级时更容易管理 + ln -sf /usr/local/jre1.8.0_202 /usr/local/jre; \ + \ + # 创建全局可执行文件链接 + update-alternatives --install "/usr/bin/java" "java" "/usr/local/jre/bin/java" 1 && \ + update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/jre/bin/javac" 1 && \ + update-alternatives --set java /usr/local/jre/bin/java; \ + \ + # 创建字体目录并设置权限 + mkdir -p /usr/share/fonts/truetype/ && \ + chmod 755 /usr/share/fonts/truetype/; \ + \ + # 更新字体缓存 + fc-cache -fv; \ + \ + # 验证JRE安装 + java -version && \ + /usr/local/jre/bin/java -version; \ + \ + # 创建非root用户用于运行Java应用 + groupadd -r esxi && \ + useradd -r -g esxi -d /opt/esxi -s /bin/bash esxi && \ + mkdir -p /opt/esxi && \ + chown -R esxi:esxi /opt/esxi; \ + \ + # 设置文件权限 + chmod -R 755 /usr/local/jre1.8.0_202 && \ + chown -R root:root /usr/local/jre1.8.0_202 + +# 切换到应用目录 +WORKDIR /opt/apps + +# 设置默认用户 +#USER esxi + +# 设置健康检查 +HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \ + CMD java -version > /dev/null 2>&1 || exit 1 + +# 设置默认启动命令 +CMD ["java", "-version"] \ No newline at end of file diff --git a/dockerfiles/jre/8u202-debian13-dos/deploy.sh b/dockerfiles/jre/8u202-debian13-dos/deploy.sh new file mode 100644 index 0000000..3134473 --- /dev/null +++ b/dockerfiles/jre/8u202-debian13-dos/deploy.sh @@ -0,0 +1,209 @@ +#!/bin/bash +set -euo pipefail + +# 配置参数 +IMAGE_NAME="jre" +VERSION="8u202-debian13-dos" +HARBOR_REGISTRY="192.168.10.102:8001" # 替换为实际的Harbor地址 +HARBOR_PROJECT="xiaomayi-base" # 替换为实际的Harbor项目名 +HARBOR_USERNAME="deploy" # 替换为Harbor用户名 +HARBOR_PASSWORD="Harbor20240330" # 替换为Harbor密码 + +# 完整的镜像标签 +FULL_IMAGE_NAME="${HARBOR_REGISTRY}/${HARBOR_PROJECT}/${IMAGE_NAME}" +TAG_VERSION="${VERSION}" +TAG_LATEST="latest" + +# 颜色输出函数 +red() { echo -e "\033[31m$*\033[0m"; } +green() { echo -e "\033[32m$*\033[0m"; } +yellow() { echo -e "\033[33m$*\033[0m"; } +blue() { echo -e "\033[34m$*\033[0m"; } + +# 检查必要文件 +check_requirements() { + blue "检查构建所需文件..." + + if [ ! -f "jre-8u202-linux-x64.tar.gz" ]; then + red "错误: jre-8u202-linux-x64.tar.gz 不存在" + echo "请从Oracle官网下载JRE 8u202并放置在当前目录" + exit 1 + fi + + if [ ! -d "fonts" ]; then + yellow "提示: fonts 目录不存在,创建空目录" + mkdir -p fonts/ + yellow "可以放置中文字体文件到 fonts/ 目录以获得更好的中文支持" + fi + + green "✓ 文件检查完成" +} + +# 登录Harbor仓库 +login_to_harbor() { + blue "登录Harbor仓库: ${HARBOR_REGISTRY}" + + if echo "${HARBOR_PASSWORD}" | docker login -u "${HARBOR_USERNAME}" --password-stdin "${HARBOR_REGISTRY}"; then + green "✓ Harbor登录成功" + else + red "✗ Harbor登录失败" + exit 1 + fi +} + +# 构建Docker镜像 +build_image() { + blue "开始构建Docker镜像..." + + local build_cmd=( + docker build + # --pull + # --no-cache + -t "${FULL_IMAGE_NAME}:${TAG_VERSION}" + # -t "${FULL_IMAGE_NAME}:${TAG_LATEST}" + . + ) + + echo "执行命令: ${build_cmd[*]}" + + if "${build_cmd[@]}"; then + green "✓ 镜像构建成功" + else + red "✗ 镜像构建失败" + exit 1 + fi +} + +# 显示镜像信息 +show_image_info() { + blue "镜像构建信息:" + echo "----------------------------------------" + docker images "${FULL_IMAGE_NAME}" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" + echo "----------------------------------------" + + # 显示详细大小信息 + local image_size=$(docker image inspect "${FULL_IMAGE_NAME}:${TAG_VERSION}" --format='{{.Size}}' | awk '{printf "%.2f MB", $1/1024/1024}') + green "镜像大小: ${image_size}" +} + +# 测试镜像功能 +test_image() { + blue "测试镜像功能..." + + echo "1. 测试Java版本:" + if docker run --rm "${FULL_IMAGE_NAME}:${TAG_VERSION}" java -version; then + green "✓ Java测试通过" + else + red "✗ Java测试失败" + exit 1 + fi + + echo "2. 测试区域设置:" + if docker run --rm "${FULL_IMAGE_NAME}:${TAG_VERSION}" locale; then + green "✓ 区域设置测试通过" + else + red "✗ 区域设置测试失败" + exit 1 + fi + + echo "3. 测试时区设置:" + if docker run --rm "${FULL_IMAGE_NAME}:${TAG_VERSION}" date; then + green "✓ 时区测试通过" + else + red "✗ 时区测试失败" + exit 1 + fi +} + +# 推送镜像到Harbor +push_to_harbor() { + blue "推送镜像到Harbor仓库..." + + # 推送版本标签 + if docker push "${FULL_IMAGE_NAME}:${TAG_VERSION}"; then + green "✓ 版本标签推送成功: ${TAG_VERSION}" + else + red "✗ 版本标签推送失败" + exit 1 + fi + + # # 推送latest标签 + # if docker push "${FULL_IMAGE_NAME}:${TAG_LATEST}"; then + # green "✓ latest标签推送成功" + # else + # red "✗ latest标签推送失败" + # exit 1 + # fi +} + +# 清理本地镜像 +cleanup_local() { + blue "清理本地镜像..." + + docker rmi "${FULL_IMAGE_NAME}:${TAG_VERSION}" "${FULL_IMAGE_NAME}:${TAG_LATEST}" 2>/dev/null || true + green "✓ 本地镜像清理完成" +} + +# 验证远程镜像 +verify_remote_image() { + blue "验证远程镜像..." + + # 尝试拉取验证 + if docker pull "${FULL_IMAGE_NAME}:${TAG_VERSION}"; then + green "✓ 远程镜像验证成功" + docker rmi "${FULL_IMAGE_NAME}:${TAG_VERSION}" 2>/dev/null || true + else + red "✗ 远程镜像验证失败" + exit 1 + fi +} + +# 生成使用说明 +generate_usage() { + cat << EOF + +$(green "=== 镜像构建和推送完成 ===") +$(blue "镜像名称:") ${FULL_IMAGE_NAME} +$(blue "可用标签:") ${TAG_VERSION}, ${TAG_LATEST} + +$(yellow "使用方法:") +1. 拉取镜像: + docker pull ${FULL_IMAGE_NAME}:${TAG_VERSION} + +2. 运行测试: + docker run --rm ${FULL_IMAGE_NAME}:${TAG_VERSION} java -version + +3. 作为基础镜像使用: + FROM ${FULL_IMAGE_NAME}:${TAG_VERSION} + +$(green "镜像已成功推送到Harbor仓库!") +EOF +} + +# 主函数 +main() { + echo "$(blue '=== Debian 13 JRE 8u202 基础镜像构建脚本 ===')" + echo "$(blue "目标仓库: ${HARBOR_REGISTRY}")" + echo "$(blue "镜像名称: ${IMAGE_NAME}")" + echo "$(blue "版本标签: ${VERSION}")" + echo "----------------------------------------" + + # 执行步骤 + check_requirements + login_to_harbor + build_image + show_image_info + test_image + push_to_harbor + cleanup_local + verify_remote_image + generate_usage + + green "✅ 所有步骤完成!" +} + +# 异常处理 +trap 'red "脚本执行被中断"; exit 1' INT TERM + +# 执行主函数 +main "$@" \ No newline at end of file diff --git a/dockerfiles/jre/8u202-utunbu22-dos/deploy.sh b/dockerfiles/jre/8u202-utunbu22-dos/deploy.sh index d94d841..94fbb45 100644 --- a/dockerfiles/jre/8u202-utunbu22-dos/deploy.sh +++ b/dockerfiles/jre/8u202-utunbu22-dos/deploy.sh @@ -182,7 +182,7 @@ EOF # 主函数 main() { - echo "$(blue '=== Ubuntu 22.04 JDK 17 基础镜像构建脚本 ===')" + echo "$(blue '=== Ubuntu 22.04 JRE 8u202 基础镜像构建脚本 ===')" echo "$(blue "目标仓库: ${HARBOR_REGISTRY}")" echo "$(blue "镜像名称: ${IMAGE_NAME}")" echo "$(blue "版本标签: ${VERSION}")"