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

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

相关文章

Redis 入坑基本指南

引言 本指南将帮助您了解如何安装、配置和基本使用 Redis。Redis 是一款开源的高性能键值存储系统,可用于缓存、数据库、消息中间件等多种用途。 1. 安装 Redis a. 下载 Redis: 可以从 Redis 官方网站(https://redis.io)下载最…

jenkins目录下的vue3项目——pnpm install后运行报错——奇葩问题解决

昨天到今天,同事那边遇到一个问题,就是关于vue3vite的项目,在执行了自动打包后,运行代码会提示报错的问题。 报错信息如下: 具体错误信息如下: ERROR 11:28:14 [vite] Pre-transform error: Cannot find …

动手写一个简单的Android 表格控件支持固定列

Android 动手写一个简洁版表格控件 简介 源码已放到 Github Gitee 作为在测绘地理信息行业中穿梭的打工人,遇到各种数据采集需求,既然有数据采集需求,那当然少不了数据展示功能,最常见的如表格方式展示。 当然,类似…

一机游领航旅游智慧化浪潮:借助前沿智能设备,革新旅游服务效率,构建高效便捷、生态友好的旅游服务新纪元,开启智慧旅游新时代

目录 一、引言 二、一机游的定义与特点 (一)一机游的定义 (二)一机游的特点 三、智能设备在旅游服务中的应用 (一)旅游前的信息查询与预订支付 (二)旅游中的导航导览与互动体…

stm32之hal库串口中断和ringbuffer的结合

前言 结合hal库封装的中断处理函数使用rt-thread内部的rt-ringbuffer数据结构源码改造hal库串口部分的源码,将内部静态方法变为弱引用的函数,方便重写标志位采用信号量或变量的两种方式,内部数据分配方式采用动态和静态两种方式 hal库部分串…

开箱子咸鱼之王H5游戏源码_内购修复优化_附带APK完美运营无bug最终版__GM总运营后台_附带安卓版本

内容目录 一、详细介绍二、效果展示2.效果图展示 三、学习资料下载 一、详细介绍 1.包括原生打包APK,资源全部APK本地化,基本上不跑服务器宽带 2.优化后端,基本上不再一直跑内存,不炸服响应快! 3.优化前端&#xff0c…

【再探】设计模式—适配器、装饰及外观模式

结构型设计模式是用于设计对象和类之间关系的一组设计模式。一共有7种:适配器模式、装饰器模式、外观模式、桥接模式、组合模式、享元模式及代理模式。 1 适配器模式 需求:在软件维护阶段,已存在的方法与目标接口不匹配,需要个中…

【DeepLearning.AI】吴恩达系列课程——使用ChatGPT API构建系统(持续更新中——)

目录 前言一、Language Models, the Chat Format and Tokens(LLM,交互形式)1-1、加载api-key1-2、使用辅助函数(即指令调整LLM)1-2、使用辅助函数(聊天格式)1-3、辅助函数修改(输出字…

2024年船舶、机械制造与海洋科学国际会议(ICSEMMS2024)

2024年船舶、机械制造与海洋科学国际会议(ICSEMMS2024) 会议简介 我们诚挚邀请您参加将在重庆隆重举行的2024年国际造船、机械制造和海洋科学大会(ICSEMMS024)。作为一项跨学科和跨学科的活动,本次会议旨在促进造船…

北京大学-知存科技存算一体联合实验室揭牌,开启知存科技产学研融合战略新升级

5月5日,“北京大学-知存科技存算一体技术联合实验室”在北京大学微纳电子大厦正式揭牌,北京大学集成电路学院院长蔡一茂、北京大学集成电路学院副院长鲁文高及学院相关负责人、知存科技创始人兼CEO王绍迪、知存科技首席科学家郭昕婕博士及企业研发相关负…

深入Django:用户认证与权限控制实战指南

title: 深入Django:用户认证与权限控制实战指南 date: 2024/5/7 18:50:33 updated: 2024/5/7 18:50:33 categories: 后端开发 tags: AuthDecoratorsPermissionsGuardianRESTAuthSessionMgmtMFA 第1章:入门Django与设置 1.1 Django安装与环境配置 在…

大数据分析入门之10分钟掌握GROUP BY语法

前言 书接上回大数据分析入门10分钟快速了解SQL。 本篇将会进一步介绍group by语法。 基本语法 SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY column_name HAVING condition假设我们有students表,其中有id,grade_number,class…

Golang | Leetcode Golang题解之第70题爬楼梯

题目: 题解: func climbStairs(n int) int {sqrt5 : math.Sqrt(5)pow1 : math.Pow((1sqrt5)/2, float64(n1))pow2 : math.Pow((1-sqrt5)/2, float64(n1))return int(math.Round((pow1 - pow2) / sqrt5)) }

docker jenkins 部署springboot项目

1、创建jenkins容器 1,首先,我们需要创建一个 Jenkins 数据卷,用于存储 Jenkins 的配置信息。可以通过以下命令创建一个数据卷: docker volume create jenkins_data启动 Jenkins 容器并挂载数据卷: docker run -dit…

【区块链】智能合约简介

智能合约起源 智能合约这个术语至少可以追溯到1995年,是由多产的跨领域法律学者尼克萨博(NickSzabo)提出来的。他在发表在自己的网站的几篇文章中提到了智能合约的理念。他的定义如下:“一个智能合约是一套以数字形式定义的承诺&a…

上位机图像处理和嵌入式模块部署(树莓派4b镜像烧录经验总结)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 陆陆续续也烧录了好多次树莓派的镜像了,这里面有的时候很快,有的时候很慢。特别是烧录慢的时候,也不知道是自己…

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

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

用Docker 创建并运行一个MySQL容器

可以在DockerHub官网上荡:mysql - Official Image | Docker Hub 指令是:docker pull mysql; 因为文件比较大可能时间比较长,我是跟着黑马的课走的 课程提供的有文件,我就用已有的资源了。 在tmp目录里放入mysql.tar包 然后cd进去 输入指令:docker lo…

STM32——WWDG(窗口看门狗)

技术笔记! 1.WWDG(窗口看门狗)简介 本质:能产生系统复位信号和提前唤醒中断的计数器。 特性: 递减的计数器; 当递减计数器值从 0x40减到0x3F时复位(即T6位跳变到0); …

FTP协议与工作原理

一、FTP协议 FTP(FileTransferProtocol)文件传输协议:用于Internet上的控制文件的双向传输,是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同…