当前位置: 首页 > news >正文

创建一个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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++笔记15•数据结构:二叉树之二叉搜索树•
  • STM32 系列MCU 开发利器 STM32CubeIDE
  • Pandas_[‘index‘]_is_not_found_in_axis
  • 解读:以RTC为基,AI为脑的“超拟人”AI实时互动解决方案
  • 【IEEE出版,IEEE Xplore等多数据库检索】第五届智能设计国际会议(ICID 2024,10月25-27)
  • Excel如何把表格变成图表
  • 什么叫做 “沿着晶体平面偏析”
  • 优质的产业园都在怎么做运营?
  • 想开公司不知道需要什么资料?
  • NXP,S32K1XX J-Link调试器 J-Flash烧录指南
  • 项目实战系列三: 家居购项目 第三部分
  • 【开源免费】基于SpringBoot+Vue.JS图书个性化推荐系统(JAVA毕业设计)
  • 【Bug】Ubuntu22.04英伟达驱动安装失败,重启后服务器卡在进入系统/grub的页面
  • WS2812B驱动
  • MacBook真的不能打游戏吗?Mac打游戏会损坏电脑吗?苹果电脑怎么玩游戏
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript设计模式系列一:工厂模式
  • k8s如何管理Pod
  • MD5加密原理解析及OC版原理实现
  • mongo索引构建
  • node-glob通配符
  • Phpstorm怎样批量删除空行?
  • Promise面试题,控制异步流程
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 多线程 start 和 run 方法到底有什么区别?
  • 猴子数据域名防封接口降低小说被封的风险
  • 排序算法之--选择排序
  • 如何解决微信端直接跳WAP端
  • 如何在GitHub上创建个人博客
  • 入门到放弃node系列之Hello Word篇
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • #Spring-boot高级
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (rabbitmq的高级特性)消息可靠性
  • (二十三)Flask之高频面试点
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (回溯) LeetCode 131. 分割回文串
  • (循环依赖问题)学习spring的第九天
  • (转)四层和七层负载均衡的区别
  • (转)我也是一只IT小小鸟
  • .NET Core 2.1路线图
  • .net mvc部分视图
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 快速重构概要1
  • .NET 指南:抽象化实现的基类
  • .NET 中创建支持集合初始化器的类型
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET分布式缓存Memcached从入门到实战
  • .NET技术成长路线架构图
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @NotNull、@NotEmpty 和 @NotBlank 区别