创建一个Oracle版本的JDK的Docker镜像

背景说明

OpenJDK 和Oracle JDK 一般情况下我们选择OpenJDK,两者针对大部分场景都可以满足,有些地方例如反射技术获得某些包路径下的类对象等,有时候选择OpenJDK会导致空指针异常。

两者在底层实现方面有部分区别。

创建镜像

这里是Linux环境,假设我们在路径 /apps/jdk 目录下:

下载 JDK17 jar jdk-17.0.11_linux-x64_bin.tar.gz 到该目录下,

  1. 创建Dockerfile
# 使用一个轻量级的 Linux 基础镜像
FROM ubuntu:24.04

# 设置环境变量
ENV JAVA_HOME=/usr/local/jdk-17
ENV PATH=$JAVA_HOME/bin:$PATH

# 创建目录并解压 JDK
WORKDIR /usr/local
COPY jdk-17.0.11_linux-x64_bin.tar.gz .
RUN tar -xzf jdk-17.0.11_linux-x64_bin.tar.gz && \
    mv jdk-17.0.11 jdk-17 && \
    rm jdk-17.0.11_linux-x64_bin.tar.gz

# 验证 JDK 安装
RUN java -version

# 设置默认工作目录
WORKDIR /
  1. 创建镜像
docker build -t oracle-jdk:17.0.11 .
  1. 测试镜像
    假设要运行一个SpringBoot的应用容器,
    当前目录下 ./target/yourSpringBoot.jar 创建容器,
    Dockerfile如下:
# 使用创建的Oracle JDK镜像  
FROM oracle-jdk:17.0.11
# 设置时区  
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo 'Asia/Shanghai' > /etc/timezone  
# 设置环境变量  
ENV LANG=C.UTF-8
# 将应用程序 JAR 文件复制到镜像中  
COPY target/yourSpringBoot.jar app.jar  
# 设置入口点  
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
  1. 导出镜像
    导出镜像用于其他服务器上
docker save -o oracle-jdk.tar oracle-jdk:17.0.11

注意: 要下载 oracle-jdk.tar 可能权限不足,记得 chmod 644 oracle-jdk.tar

  1. 导入镜像
docker load -i oracle-jdk.tar
Dockerfile是一种文本文件,它包含了构建 Docker 镜像的指令序列。当你需要创建一个包含 Linux 平台 ARM64 架构(也称为 arm64v8 或 aarch64)的 JDK 8 镜像时,可以在 Dockerfile 中按照以下步骤编写: ```dockerfile # 使用官方的 Oracle Java 8 镜像作为基础镜像,针对 arm64架构 FROM openjdk:8-jdk-alpine AS build # 设置工作目录 WORKDIR /app # 将本地的 JDK 安装包复制到镜像内 COPY --from=your-jdk-source /path/to/jdk-8uXX-linux-aarch64.tar.gz /tmp/ # 解压 JDK RUN tar -xzf /tmp/jdk-8uXX-linux-aarch64.tar.gz -C /usr/local && \ rm /tmp/jdk-8uXX-linux-aarch64.tar.gz # 创建一个新的标签,用于最终的镜像 FROM scratch # 将之前构建阶段的 JRE 环境复制到新的镜像中,并删除不必要的层 COPY --from=build /usr/lib/jvm/java-1.8-openjdk-arm64 /usr/lib/jvm/ ENTRYPOINT ["java"] CMD ["-Xms512m", "-Xmx512m"] ``` 在这个例子中: 1. `FROM` 指令指定了基础镜像,`openjdk:8-jdk-alpine` 表示使用官方的轻量级基于 Alpine 的 Java 8。 2. `COPY` 从一个地方(例如本地开发环境)将 JDK 安装包复制到镜像内部。 3. `RUN` 解压缩 JDK 并将其安装到 `/usr/local`。 4. `FROM scratch` 开始一个新的镜像层,只保留最小化的依赖。 5. 最后两行设置了默认的 Java 命令行入口点和内存限制。 请注意,你需要替换 `your-jdk-source` 和 `/path/to/jdk-8uXX-linux-aarch64.tar.gz` 为你实际的 JDK 安装包来源路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值