Dockerfile制作Java JDK精简版

半兽人 发表于: 2025-11-10   最后更新时间: 2025-11-10 10:46:52  
{{totalSubscript}} 订阅, 59 游览

精简 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
  • 保留了必要的工具(tarca-certificates
  • 没有安装多余依赖(如 bash-completioncurlapt-utils 等)
更新于 2025-11-10
在线,3小时前登录

查看Dockerfile更多相关的文章或提一个关于Dockerfile的问题,也可以与我们一起分享文章