【工作记录】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.hqwc.cn/news/674769.html

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

相关文章

《十九》Qt Http协议及实战

前言 本篇文章来给大家讲解QT中的Http协议,Http协议主要用于网络中数据的请求和响应,那么这篇文章将给大家讲解一下这个协议。 一、HTTP概述 HTTP(超文本传输协议)是互联网上应用最为广泛的协议之一,它定义了客户端…

书生·浦语大模型实战营之 OpenCompass大模型评测

书生浦语大模型实战营之 OpenCompass :是骡子是马,拉出来溜溜 为什么要研究大模型的评测? 百家争鸣,百花齐放。 首先,研究评测对于我们全面了解大型语言模型的优势和限制至关重要。尽管许多研究表明大型语言模型在多…

庐山西海服务区:从高速服务区到旅游热点的华丽转身

五一假期期间,庐山西海服务区以其独特的魅力吸引了众多游客的目光。曾经只是一个供汽车加油和休息的普通服务区,如今却焕发出了绚丽的光彩,成为了周边地区备受瞩目的旅游热点。庐山西海服务区的转型,不仅为游客带来了丰富多样的娱…

20230507,LIST容器

学了又忘学了又忘,明知道会忘又不想复习又还得学 LIST容器 1.1 基本概念 链表是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的;链表由一系列结点组成 结点:一个是存储数据元素的数据域&a…

算法提高之树的最长路径

算法提高之树的最长路径 核心思想&#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 …

JavaScript异步编程——02-Ajax入门和发送http请求

同步和异步回顾 同步和异步的简单理解 同步&#xff1a;必须等待前面的任务完成&#xff0c;才能继续后面的任务。 异步&#xff1a;不受当前任务的影响。 拿排队举例&#xff1a; 同步&#xff1a;在银行排队时&#xff0c;只有等到你了&#xff0c;才能够去处理业务。 异…

NumPy及Matplotlib基本用法

NumPy及Matplotlib基本用法 导语NumPy导入与生成算术运算N维数组广播元素访问 Matplotlib简单图案绘制多函数绘制图像显示参考文献 导语 深度学习中经常需要对图像和矩阵进行操作&#xff0c;好在python提供了Numpy和Matplotlib库&#xff0c;前者类似一个已经定义的数组类&am…

基于FPGA的DDS波形发生器VHDL代码Quartus仿真

名称&#xff1a;基于FPGA的DDS波形发生器VHDL代码Quartus仿真&#xff08;文末获取&#xff09; 软件&#xff1a;Quartus 语言&#xff1a;VHDL 代码功能&#xff1a; DDS波形发生器VHDL 1、可以输出正弦波、方波、三角波 2、可以控制输出波形的频率 DDS波形发生器原理…

Linux信号捕捉

要处理信号&#xff0c; 我们进程就得知道自己是否收到了信号&#xff0c; 收到了哪些信号&#xff0c; 所以进程需要再合适的时候去查一查自己的pending位图 block 位图 和 hander表&#xff0c; 什么时候进行检测呢&#xff1f; 当我们的进程从内核态返回到用户态的时候&…

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

演示视频&#xff1a; 基于Springboot的教学辅助系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

【Linux】Linux线程

一、Linux线程的概念 1.什么是线程 1.一个进程的一个执行线路叫做线程&#xff0c;线程的一个进程内部的控制序列。 2.一个进程至少有一个执行线程 3.线程在进程内部&#xff0c;本质是在进程地址空间内运行 4.操作系统将进程虚拟地址空间的资源分配给每个执行流&#xff0…

上位机图像处理和嵌入式模块部署(树莓派4b代码优化)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 我们把程序从pc端port到嵌入式开发板上面&#xff0c;好处是降低了部署成本&#xff0c;代价是牺牲了设备性能。所以等到程序真正在开发板子上面运…