2025-09-18 21:04:09 +08:00

129 lines
4.2 KiB
Docker
Raw 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.

# 使用 Debian 13 (trixie) 作为基础镜像
# debian:trixie-slimDebian 13 的代号)
FROM debian:trixie-slim
# 维护者信息
LABEL maintainer="小蚂蚁云团队" \
description="JDK 17 on Debian with Chinese support" \
version="1.0"
# 设置环境变量
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 TZ Asia/Shanghai
# 设置工作目录
WORKDIR /tmp
# 配置阿里云 Debian 镜像源并安装基础软件包
RUN echo "deb http://mirrors.aliyun.com/debian/ trixie main non-free non-free-firmware" > /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian/ trixie-updates main non-free non-free-firmware" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian/ trixie-backports main non-free non-free-firmware" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian-security trixie-security main non-free non-free-firmware" >> /etc/apt/sources.list && \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
ca-certificates \
wget \
curl \
fontconfig \
locales \
tzdata \
&& \
# 安装中文语言支持
apt-get install -y --no-install-recommends locales-all && \
# 生成中文locale
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 LC_ALL=zh_CN.UTF-8 && \
# 设置时区
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone && \
dpkg-reconfigure --frontend noninteractive tzdata && \
# 清理apt缓存
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# 添加并精简 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/ && \
\
# 使用find命令删除调试文件更可靠
find /opt/jdk-17.0.16 -name "*.diz" -delete && \
find /opt/jdk-17.0.16 -name "*.debuginfo" -delete && \
find /opt/jdk-17.0.16 -name "*.pdb" -delete && \
\
# 删除不必要的模块和文件
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-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
# 清理临时文件和缓存
RUN rm -rf /tmp/* /var/tmp/* /var/log/*log \
/var/log/*.log /var/log/dmesg /var/log/audit/*log \
/root/.cache
# 复制字体文件(如果需要)
# COPY ./fonts/ /usr/share/fonts/
# RUN fc-cache -fv
# 创建非 root 用户运行应用
RUN groupadd -r esxi && \
useradd -r -g esxi -m -d /app esxi && \
chown -R esxi:esxi /app && \
# 设置JDK目录权限
chown -R esxi:esxi $JAVA_HOME
# 验证 JDK 安装
RUN $JAVA_HOME/bin/java -version && \
$JAVA_HOME/bin/javac -version
# 设置最终工作目录
WORKDIR /opt/apps
# # 切换到非root用户
# USER esxi
# 健康检查(可选)
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD $JAVA_HOME/bin/java -version || exit 1
# 默认命令
CMD ["java", "-version"]