2025-09-16 21:25:24 +08:00

135 lines
4.2 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 使用 RockyLinux 8 最小化镜像作为基础
FROM rockylinux:8.9-minimal
# 维护者信息
LABEL maintainer="XXXX团队" \
description="Minimal JDK 17.0.16 on RockyLinux 8 with Chinese support" \
version="1.0" \
java.version="17.0.16"
# 设置环境变量
ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8
ENV JAVA_HOME /opt/jdk-17.0.16
ENV PATH $JAVA_HOME/bin:$PATH
ENV CLASSPATH .:$JAVA_HOME/lib/jrt-fs.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 一次性安装所有依赖并设置环境
RUN set -eux && \
# 配置国内镜像源加速
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak \
/etc/yum.repos.d/*.repo && \
\
# 安装最小必要包使用microdnf更轻量
microdnf update -y && \
microdnf install -y \
fontconfig \
glibc-langpack-zh \
glibc-locale-source \
glibc-common \
&& \
\
# 设置中文语言环境
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 && \
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf && \
echo 'LC_ALL="zh_CN.UTF-8"' >> /etc/locale.conf && \
\
# 设置时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo 'Asia/Shanghai' > /etc/timezone && \
\
# 创建字体目录
mkdir -p /usr/share/fonts/ && \
chmod 755 /usr/share/fonts/ && \
\
# 清理缓存
microdnf clean all && \
rm -rf /var/cache/yum /var/tmp/* /tmp/*
# 复制最小字体文件(只复制必需的中文字体)
COPY ./fonts/simsun.ttf /usr/share/fonts/
# 可选:如果需要更多字体支持,可以添加其他字体
# COPY ./fonts/msyh.ttc /usr/share/fonts/
# 更新字体缓存
RUN fc-cache -fv && rm -rf /var/cache/fontconfig/*
# 添加并精简 JDK
ADD jdk-17.0.16_linux-x64_bin.tar.gz /opt/
# 精简JDK删除不必要的文件
RUN set -eux && \
# 重命名JDK目录
mv /opt/jdk-17.0.16 /opt/jdk-17.0.16-original && \
\
# 创建新的精简JDK目录
mkdir -p /opt/jdk-17.0.16 && \
\
# 保留必要的目录和文件
cp -r /opt/jdk-17.0.16-original/bin /opt/jdk-17.0.16/ && \
cp -r /opt/jdk-17.0.16-original/lib /opt/jdk-17.0.16/ && \
cp -r /opt/jdk-17.0.16-original/conf /opt/jdk-17.0.16/ && \
cp -r /opt/jdk-17.0.16-original/include /opt/jdk-17.0.16/ && \
\
# 删除调试文件(使用通配符)
rm -rf /opt/jdk-17.0.16/lib/*.diz \
/opt/jdk-17.0.16/lib/*/*.diz \
/opt/jdk-17.0.16/lib/*/*/*.diz \
/opt/jdk-17.0.16/lib/*.debuginfo \
/opt/jdk-17.0.16/lib/*/*.debuginfo \
/opt/jdk-17.0.16/lib/*/*/*.debuginfo \
/opt/jdk-17.0.16/lib/*.pdb \
/opt/jdk-17.0.16/lib/*/*.pdb \
/opt/jdk-17.0.16/lib/*/*/*.pdb && \
\
# 删除不必要的模块和文件
rm -rf /opt/jdk-17.0.16/lib/src.zip \
/opt/jdk-17.0.16/lib/missioncontrol \
/opt/jdk-17.0.16/lib/visualvm \
/opt/jdk-17.0.16/lib/jfr \
/opt/jdk-17.0.16/lib/security/cacerts.dummy \
\
# 删除演示和样例
/opt/jdk-17.0.16-original/demo \
/opt/jdk-17.0.16-original/sample \
/opt/jdk-17.0.16-original/man \
\
# 删除文档
/opt/jdk-17.0.16-original/legal \
/opt/jdk-17.0.16-original/README.md \
/opt/jdk-17.0.16-original/release && \
\
# 删除原始JDK目录
rm -rf /opt/jdk-17.0.16-original && \
\
# 设置权限
chmod -R 755 /opt/jdk-17.0.16 && \
chown -R root:root /opt/jdk-17.0.16 &&\
\
# 验证JDK安装
/opt/jdk-17.0.16/bin/java -version && \
/opt/jdk-17.0.16/bin/javac -version
# 创建非root用户
RUN set -eux && \
groupadd -r esxi -g 1000 && \
useradd -r -g esxi -u 1000 -m -d /app -s /bin/bash esxi && \
chown -R esxi:esxi /app
# 清理临时文件
RUN rm -rf /tmp/* /var/tmp/* /var/log/*.log /*.repo.bak
# 设置工作目录
WORKDIR /opt/apps
# 切换到非root用户
#USER esxi
# # 健康检查
# HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
# CMD java -version || exit 1
# 默认命令
CMD ["java", "-version"]