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

背景

近期使用到的框架底层都用的是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.mzph.cn/bicheng/7769.shtml

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

相关文章

6.移除元素

文章目录 题目简介题目解答解法一:双指针代码:复杂度分析: 解法二:双指针优化代码:复杂度分析: 题目链接 大家好,我是晓星航。今天为大家带来的是 相关的讲解!😀 题目简…

上海计算机学会2021年1月月赛C++丙组T2康托表

题目背景 康托是一名数学家,他证明了一个重要的定理,需要使用一张表: 这个表的规律是: 从上到下:每一行的分子依次增大;从左到右:每一列的分母依次增大。 康托以一种不重复、不遗漏的方式&am…

基于Springboot的教学辅助系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的教学辅助系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

QSPI的使用

Quad SPI接口(QSPI)是一种同步串行数据链路,在主模式下提供与外部设备的通信。它类似于SPI协议,只是它有额外的数据线。 普通SPI有四条通信线路:芯片选择、时钟、MOSI和MISO。对于QSPI,可提供额外的数据线。因此,命令/数据/地址是根据所选模式通过单、四或双IO发送的。由…

Linux内核--设备驱动(七)媒体驱动框架整理--HDMI框架(1)

目录 一、引言 二、HDMI框架 ------>2.1、硬件结构 ------>2.2、上层协议 ------------>2.2.1、HDCP协议 ------>2.3、HDMI驱动源码分析 ------------>2.3.1、HDMI dts节点 ------------>2.3.2、驱动 ------------>2.3.3、热插拔 三、HDMI时序 …

Git使用经验总结4-撤回上一次本地提交

这个问题的意义在于,Git提交代码是先提交到本地,然后再推送到远端。一些比较严格的Git仓库会有一些代码提交检查,一旦检查到问题就会禁止提交。那么这个时候就尴尬了,本地已经提交了,但是远端又推送不上去。基于当前版…

git 更换远程仓库地址三种方法总结

git 更换远程仓库地址三种方法总结 一、前言 由于私服的 gitlab 的地址变更,导致部分项目代码提交不上去,需要修改远端仓地址。 其它需要修改远程仓地址的情况如:切换git clone 协议由ssh变为https。 二、环境 windows 10git version 2.3…

跨域初识--.如何解决跨域

04 【跨域初识】 1.同源策略 同源策略(Same-Origin Policy)最早由Netscape 公司提出,是浏览器的一种安全策略同源: 协议、域名、端口号必须完全相同跨域: 违背同源策略就是跨域 2.如何解决跨域 2.1 JSONP jsonp只支持get请求不支持post请…

Linux实操之常用指令详解

文章目录 vi 和 vimvi 和 vim 基本使用 开机、重启和用户登录注销关机&重启命令用户登录和注销 用户管理基本介绍基本语法细节说明修改密码删除用户查询用户信息指令切换用户查看当前用户/登录用户用户组 实用指令指定运行级别帮助指令文件目录类时间和日期类搜索查找类压缩…

C语言从入门到入门

一、引言 C语言是一种通用的、过程式的计算机编程语言,支持结构化编程、词汇变量作用域和递归等功能,其设计提供了低级别的存取权限,并且要求程序员管理所有的内存细节。C语言具有高效、灵活和可移植性等特点,因此被广泛应用于系统编程、嵌入式系统开发、游戏开发等领域。 …

ENVI下实现遥感矿物蚀变信息提取

蚀变岩石是在热液作用影响下,使矿物成分、化学成分、结构、构造等发生变化的岩石。由于它们经常见于热液矿床的周围,因此被称为蚀变围岩,蚀变围岩是一种重要的找矿标志。利用围岩蚀变现象作为找矿标志已有数百年历史,发现的大型金…

uni-app H5上传图片压缩体积大小

// 用户上传头像 uploadAvatar(){ let _this this uni.chooseImage({ success: (chooseImageRes) > { const tempFilePaths chooseImageRes.tempFilePaths; …

Linux\_c输出

第一条Linux_c输出 初界面 : ls # 显示目录下的文件cd # 进入到某个目录 # 比如 我进入了Codels # 发现没有显示, 说明为文件下为空vim cpucdoe.c # 创建一个 .c的源码文件进入到了vim的编辑界面: i # 按i 就可以进行编辑 , 下面显示插入标识在编辑模式下, 可以通…

自定义类如何实现信号与槽机制

如果直接创建一个类&#xff0c;他是没有信号与槽机制的&#xff0c;我们需要人为的干预才可以 #ifndef TCPSERVER_H #define TCPSERVER_H#include <QTcpServer>class TcpServer : public QTcpServer {public:TcpServer(); };#endif // TCPSERVER_H在头文件里面加入Q_O…

云计算导论(1)---云计算概述

文章目录 1. 云计算定义与特点2. 云计算的技术架构3. 云计算面临的挑战 1. 云计算定义与特点 1. 云是网络、互联网的一种比喻说法。云计算是基于互联网的相关服务的增加、使用和交付模式&#xff0c;通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。 2. 云计算是一种…

Java性能优化(五)-多线程调优-Lock同步锁的优化

作者主页&#xff1a; &#x1f517;进朱者赤的博客 精选专栏&#xff1a;&#x1f517;经典算法 作者简介&#xff1a;阿里非典型程序员一枚 &#xff0c;记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法&#xff08;公众号同名&#xff09; ❤️觉得文章还…

Android getevent命令详细分析

在调试Android 的输入事件时&#xff0c;经常使用 “getevent -lrt” 命令&#xff0c;来确认驱动上报数据是否正常。从源码的角度来详细的分析一下getevent 这个程序。 首先用ls命令来看一下getevent lrwxr-xr-x 1 root shell 7 2023-11-20 10:08 system/bin/getevent -> …

独有病眼花,春风吹不落。 (二维坐标压缩成一个点,并查集)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例&#xff1a; 输入 3 8 1 1 D 1 1 R 1 2 D 2 1 D 2 2 R 3 1 R 3 2 R 2 3 D 输出 8 思路&#xff1a; 根据题意&#xff0c;要求连接线段后&#xff0c;操作多少次&#xff0c;连接的线段闭合&…

cmake install命令无法覆盖同名文件

文章目录 1. 问题记录2. 原因排查3. 解决方案 1. 问题记录 我有两个同名文件test.txt&#xff0c;它们内容不同&#xff0c;但时间戳相同&#xff08;文件属性中的修改时间相同&#xff09; 我希望在cmake中利用install命令&#xff0c;将${PATH_SRC}/test.txt替换${PATH_DES…

智能网联汽车网络和数据安全态势分析

文章目录 前言一、我国智能网联汽车安全态势分析(一)我国高度重视智能网联汽车安全发展(二)产业高速发展伴随网络安全隐患(三)网络和数据安全风险事件威胁加剧二、智能网联汽车网络和数据安全典型实践剖析(一)立标准规范,把牢安全发展“方向盘”(二)强车主服务,系好…