【工作记录】openjdk-22基础镜像的构建

news2024/11/27 4:34:39

背景

近期使用到的框架底层都用的是springboot3.0+,要求jdk版本在17+甚至更高。

于是决定制作一个基于openjdk22的基础镜像,本文对这一过程进行记录。

作为记录的同时也希望能够帮助到需要的朋友。

期望效果

  1. 容器内可以正常使用java相关命令且版本是22
  2. 替换容器内的镜像源为aliyun的源
  3. 容器内的时区是东八区
  4. (非必须)容器内包含一些内置工具
  5. (非必须)添加一些字体文件

准备工作

  1. 安装docker环境
  2. 下载openjdk22压缩包

实现

1、新建目录,并新建Dockerfile文件

mkdir -p /opt/docker/openjdk22
cd /opt/docker/openjdk22
vim Dockerfile

2、编写Dockerfile

FROM debian:buster-slim

# 更换为阿里云的Debian镜像源
RUN sed -i 's/http:\/\/archive\.debian\.org\/debian/http:\/\/mirrors\.aliyun\.com\/debian/g' /etc/apt/sources.list && \
    sed -i 's/http:\/\/security\.debian\.org\/debian-security/http:\/\/mirrors\.aliyun\.com\/debian-security/g' /etc/apt/sources.list && \
    sed -i 's/http:\/\/deb\.debian\.org\/debian/http:\/\/mirrors\.aliyun\.com\/debian/g'  /etc/apt/sources.list
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
# 复制jdk安装包
ADD openjdk-22_linux-x64_bin.tar.gz /opt
# 设置环境变量
ENV JAVA_HOME=/opt/jdk-22
ENV PATH=$JAVA_HOME/bin:$PATH
# 清理无用的系统文件和缓存
RUN apt-get update && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# 验证Java版本
RUN java -version

3、构建镜像并上传到镜像仓库

docker build -t 172.16.10.205:5000/openjdk22 .

等待构建完成后可以使用docker images|grep openjdk22查看结果。

查看镜像构建结果

构建完成后执行如下命令上传到镜像仓库:

docker push 172.16.10.205:5000/openjdk22

注意:

  1. 步骤3命令中的172.16.10.205:5000是自建的私有docker镜像仓库的地址,请替换成实际仓库地址
  2. 上述构建镜像时使用的基础镜像是debian:buster-slim 版本,对应debian10,同时slim系统相对更轻量,没有过多的附加软件,所以最终打包的镜像只有418M(不敢说最小,但相对那些动辄上G的来说已经很浓缩了)。
  3. 上述构建镜像的Dockerfile中有个引用的文件openjdk-22_linux-x64_bin.tar.gz,请根据实际情况下载并放在Dockerfile同级目录即可。

4、验证

其实上述Dockerfile中最后一行命令已经打印了java -verison, 正常构建完成的话应该会在最后打印如下内容:

查看java版本

​ 另外一种方式就是运行刚才生成的镜像并进入到容器内执行java -version命令,具体命令是: docker run -it 043e1978d383 bash, 进入容器内部后执行java -version ,看到上述截图中的输出即为正常。

​ 注意: 上述命令中的043e1978d383是通过docker images|grep openjdk-22查询出来的镜像ID,请替换为实际镜像ID后执行。

总结

​ 本文简单记录了构建openjdk22基础镜像的过程,希望能够帮助到需要的朋友。

​ 针对以上内容有任何疑问或者建议欢迎评论区留言。

创作不易,欢迎一键三连~~~~

PS: 最近在阅读《Java高并发核心编程卷一》书籍,后续会推出读书笔记系列,欢迎持续关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1650672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vm虚拟机安装网络适配器驱动卡死/无响应/无限等待状态

大部分原因都是以前的vm没有卸载干净所导致的,只需要使用CCleaner清楚干净就好 使用控制面板里的卸载把VM卸载干净 使用CCleaner软件删除干净注册表,这个软件百度很容易找到,只有十兆左右 打开下载好的软件,不需要注册码&#xff…

保研面试408复习 2——操作系统、计网

文章目录 1、操作系统一、进程、线程的概念以及区别?二、进程间的通信方式? 2、计算机网络一、香农准则二、协议的三要素1. 语法2. 语义3. 时序 标记文字记忆,加粗文字注意,普通文字理解。 1、操作系统 一、进程、线程的概念以及…

Pycharm无法链接服务器环境(host is unresponsived)

困扰了很久的一个问题,一开始是在服务器ubuntu20.04上安装pycharm community,直接运行服务器上的pycharm community就识别不了anaconda中的环境 后来改用pycharm professional也无法远程连接上服务器的环境,识别不了服务器上的环境&#xff…

ASP.NET网上鲜花销售系统的设计

摘 要 本系统实现了一般电子商务所具备的功能,如商品浏览、用户登录注册、网上与购物、结算、后台数据库管理等,利用这些功能可以对鲜花销售信息进行较好的管理。 网上鲜花销售系统的使用者主要是客户和销售管理者,对于客户来说&#xff0…

小米手机miui14 android chrome如何取消网页自动打开app

搜索媒体打开应用 选择你要阻止打开的app,以github为例 取消勾选打开支持的链接。 参考:https://www.reddit.com/r/chrome/s/JBsGkZDkRZ

期权怎么开户?

今天期权懂带你了解期权怎么开户?近年来,随着股市的持续低迷,市场交易痛点越发明显的氛围中,所以有人看到了双向交易的期权。 期权怎么开户? 1、首先是证券账户内的资金需要满足50万保留20个交易日; 2、其…

算法提高之树的最长路径

算法提高之树的最长路径 核心思想&#xff1a;树形dp 枚举路径的中间节点用f1[i] 表示i的子树到i的最长距离,f2[i]表示次长距离最终答案就是max(f1[i]f2[i]) #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N …

Python批量计算多张遥感影像的NDVI

本文介绍基于Python中的gdal模块&#xff0c;批量基于大量多波段遥感影像文件&#xff0c;计算其每1景图像各自的NDVI数值&#xff0c;并将多景结果依次保存为栅格文件的方法。 如下图所示&#xff0c;现在有大量.tif格式的遥感影像文件&#xff0c;其中均含有红光波段与近红外…

便捷的驾驶证识别API,简化工作流程

随着社会的发展和人们生活水平的提高&#xff0c;机动车的数量也越来越多。为了确保交通安全和减少违法行为&#xff0c;每个驾驶机动车的人都需要携带驾驶证。然而&#xff0c;识别驾驶证上的信息却是一个繁琐的过程。为了简化这个工作流程&#xff0c;提高工作效率&#xff0…

echarts学习笔记:柱状图+雷达图+双环形图+地图可视化+数据传递关系图+关键词条图+数据总览图+AntV/G2/DataV

GitHub - lgd8981289/imooc-visualization: https://www.bilibili.com/video/BV1yu411E7cm/?vd_source391a8dc379e0da60c77490e3221f097a 课程源码 国内echarts镜像站&#xff1a;ISQQW.COM x ECharts 文档&#xff08;国内同步镜像&#xff09; - 配置项 echarts图表集&…

栈(使用顺序表构建)

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 目录 1、栈的概念2、栈的数组构建方法2.1 前言2.2 正文2.2.1 栈的初始化2.2.2 栈的销毁2.2.3 压…

Leetcode—289. 生命游戏【中等】

2024每日刷题&#xff08;126&#xff09; Leetcode—289. 生命游戏 算法思想 实现代码 class Solution { public:void gameOfLife(vector<vector<int>>& board) {int rows board.size();int cols board[0].size();int neighbors[3] {0, 1, -1};vector<…

微搭低代码入门06分页查询

目录 1 创建自定义代码2 编写分页代码3 创建页面4 创建变量5 配置数据列表总结 我们在数据模型章节介绍了微搭后端服务编写的三种方式&#xff0c;包括Http请求、自定义代码、云函数。本篇我们详细讲解一下利用自定义代码开发分页查询的功能。 1 创建自定义代码 打开控制台&am…

Python 全栈体系【四阶】(四十一)

第五章 深度学习 九、图像分割 1. 基本介绍 1.1 什么是图像分割 图像分割&#xff08;Segmentation&#xff09;是图像处理和机器视觉一个重要分支&#xff0c;其目标是精确理解图像场景与内容。图像分割是在像素级别上的分类&#xff0c;属于同一类的像素都要被归为一类&a…

微软“叛变”了!本月或将推出5000亿新AI模型MAI-1,对抗谷歌和OpenAI | 最新快讯

&#xff08;图片来源&#xff1a;钛媒体 App 编辑拍摄&#xff09; 钛媒体 App 5 月 6 日消息&#xff0c;据 The information 报道&#xff0c;美国科技巨头微软公司&#xff08;Microsoft&#xff09;将推出一款参数达 5000 亿的全新 AI 模型产品&#xff0c;内部称为 MAI-1…

【LAMMPS学习】八、基础知识(5.9)LAMMPS 近场动力学

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各种模拟。 …

『 Linux 』基础IO/文件IO (万字)

文章目录 &#x1f984; 什么是IO&#x1f984; 文件IO(库级别)&#x1f47e; 文件的打开与关闭&#x1f47e; 当前路径&#x1f47e; 文件的读写 &#x1f984; 标准输入输出流&#x1f984; 文件IO(系统级别)&#x1f47e; 文件的打开&#x1f47e; 文件的关闭&#x1f47e; …

加州大学欧文分校英语中级语法专项课程03:Tricky English Grammar 学习笔记

Tricky English Grammar Course Certificate Course Intro 本文是学习 https://www.coursera.org/learn/tricky-english-grammar?specializationintermediate-grammar 这门课的学习笔记 文章目录 Tricky English GrammarWeek 01: Nouns, Articles, and QuantifiersLearning …

latex参考文献引用网址,不显示网址问题

以引用UCI数据集为例 1、加入宏包 \usepackage{url} 2、在参考文献bib文件中加入网址文献 misc{UCI, author {{D. Dua, E. Karra Taniskidou}}, year {2024}, title {UCI Machine Learning Repository}, howpublished {\url{http://archive.ics.uci.edu/ml}} } 完成&#x…