精简 Dockerfile
# 1. 使用 Ubuntu 25.10 amd64 作为基础镜像
# 之所以指定平台,是因为你在 macOS(arm64)上构建 amd64 镜像。
FROM --platform=linux/amd64 ubuntu:25.10
# 2. 设置非交互模式,避免 tzdata 安装时卡住(要求输入)
ENV DEBIAN_FRONTEND=noninteractive
# 3. 安装最基本依赖:
# - ca-certificates:HTTPS 支持
# - tar:解压 JDK 包
# - tzdata:设置时区
# - locales:生成 UTF-8 语言环境
# 然后设置时区为上海、语言环境为中文 UTF-8。
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
tar \
tzdata \
locales \
# 设置系统时区为上海
&& ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& dpkg-reconfigure -f noninteractive tzdata \
# 生成中文 UTF-8 语言环境
&& locale-gen zh_CN.UTF-8 \
&& update-locale LANG=zh_CN.UTF-8 \
# 清理 apt 缓存,减小镜像体积
&& rm -rf /var/lib/apt/lists/*
# 4. 设置系统语言环境变量
# 让整个系统及 Java 默认都是中文 UTF-8 环境。
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN:zh
ENV LC_ALL=zh_CN.UTF-8
# 5. 设置工作目录为 /usr/local
WORKDIR /usr/local
# 6. 拷贝你本地下载好的 JDK 包(必须和 Dockerfile 在同目录)
COPY jdk-8u471-linux-x64.tar.gz /tmp/
# 7. 解压 JDK,并配置环境变量
# - 解压 tar.gz 到 /usr/local/
# - 重命名目录为 /usr/local/jdk
# - 删除安装包,减小体积
RUN tar -xzf /tmp/jdk-8u471-linux-x64.tar.gz -C /usr/local/ \
&& mv /usr/local/jdk1.8.0_471 /usr/local/jdk \
&& rm -rf /tmp/*
# 8. 设置 JAVA_HOME、PATH、以及 Java 默认启动参数:
# - file.encoding=UTF-8 保证 JVM 内中文编码正常
# - user.language/region=zh_CN 让 JVM 使用中文环境
ENV JAVA_HOME=/usr/local/jdk
ENV PATH=$JAVA_HOME/bin:$PATH
ENV JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8 -Duser.language=zh -Duser.region=CN"
# 9. 验证 JDK 是否安装成功
RUN java -version && javac -version
# 10. 设置默认工作目录
WORKDIR /workspace
# 11. 设置默认启动命令(进入 bash)
CMD ["bash"]
另外一种格式(有的人喜欢这种风格)
# ------------------------------------------------------------
# 基础镜像:Ubuntu 25.10(amd64 架构)
# ------------------------------------------------------------
FROM --platform=linux/amd64 ubuntu:25.10
# ------------------------------------------------------------
# 安装必要组件:
# - ca-certificates:根证书,用于安全访问
# - tar:解压工具
# - tzdata:时区管理
# ------------------------------------------------------------
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
tar \
tzdata \
# 设置系统时区为上海(Asia/Shanghai)
&& ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
# 重新配置 tzdata 以立即生效(静默模式)
&& dpkg-reconfigure -f noninteractive tzdata \
# 清理 apt 缓存,减少镜像体积
&& rm -rf /var/lib/apt/lists/*
# ------------------------------------------------------------
# 安装并配置本地化(Locale)
# - zh_CN.UTF-8:中文 UTF-8 编码
# ------------------------------------------------------------
RUN apt-get update && apt-get install -y locales \
&& locale-gen zh_CN.UTF-8 \
&& update-locale LANG=zh_CN.UTF-8 \
&& rm -rf /var/lib/apt/lists/*
# ------------------------------------------------------------
# 设置语言和区域环境变量
# ------------------------------------------------------------
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN:zh
ENV LC_ALL=zh_CN.UTF-8
# ------------------------------------------------------------
# 设置默认工作目录
# ------------------------------------------------------------
WORKDIR /usr/local
# ------------------------------------------------------------
# 拷贝 JDK 安装包到临时目录
# ------------------------------------------------------------
COPY jdk-8u471-linux-x64.tar.gz /tmp/
# ------------------------------------------------------------
# 解压并配置 JDK
# - 解压到 /usr/local/
# - 重命名目录为 /usr/local/jdk
# - 清除临时文件,减少镜像体积
# ------------------------------------------------------------
RUN tar -xzf /tmp/jdk-8u471-linux-x64.tar.gz -C /usr/local/ \
&& mv /usr/local/jdk1.8.0_471 /usr/local/jdk \
&& rm -rf /tmp/*
# ------------------------------------------------------------
# 设置 JAVA 环境变量
# ------------------------------------------------------------
ENV JAVA_HOME=/usr/local/jdk
ENV PATH=$JAVA_HOME/bin:$PATH
# ------------------------------------------------------------
# 验证 JDK 安装是否成功
# ------------------------------------------------------------
RUN java -version && javac -version
# ------------------------------------------------------------
# 设置默认工作目录为 /workspace
# ------------------------------------------------------------
WORKDIR /workspace
# ------------------------------------------------------------
# 启动容器后默认执行 bash
# ------------------------------------------------------------
CMD ["bash"]
构建命令
docker buildx build --platform linux/amd64 -t myjdk:8u471-cn .
说明:
--platform linux/amd64:在 Mac M 芯片(arm64)上构建 amd64 镜像。-t myjdk:8u471-cn:指定镜像名和标签。
验证运行结果
docker run --rm -it --platform=linux/amd64 myjdk:8u471-cn bash
进入容器后执行:
# 查看系统语言
locale
# 查看当前时间
date
# 查看 Java 信息
java -version
# 测试 Java 中文输出
echo 'public class T{public static void main(String[]a){System.out.println("hello,world");}}' > T.java
javac T.java && java T
预期输出:
hello,world
镜像体积说明
- 该镜像最终大小大约在 300MB~350MB
- 保留了必要的工具(
tar、ca-certificates) - 没有安装多余依赖(如
bash-completion、curl、apt-utils等)
