背景
近期使用到的框架底层都用的是springboot3.0+,要求jdk版本在17+甚至更高。
于是决定制作一个基于openjdk22的基础镜像,本文对这一过程进行记录。
作为记录的同时也希望能够帮助到需要的朋友。
期望效果
- 容器内可以正常使用java相关命令且版本是22
- 替换容器内的镜像源为aliyun的源
- 容器内的时区是东八区
- (非必须)容器内包含一些内置工具
- (非必须)添加一些字体文件
准备工作
- 安装docker环境
- 下载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
注意:
- 步骤3命令中的
172.16.10.205:5000
是自建的私有docker镜像仓库的地址,请替换成实际仓库地址
。- 上述构建镜像时使用的基础镜像是debian:buster-slim 版本,对应debian10,同时slim系统相对更轻量,没有过多的附加软件,所以最终打包的镜像只有418M(不敢说最小,但相对那些动辄上G的来说已经很浓缩了)。
- 上述构建镜像的Dockerfile中有个引用的文件
openjdk-22_linux-x64_bin.tar.gz
,请根据实际情况下载并放在Dockerfile同级目录即可。
4、验证
其实上述Dockerfile中最后一行命令已经打印了java -verison
, 正常构建完成的话应该会在最后打印如下内容:
另外一种方式就是运行刚才生成的镜像并进入到容器内执行java -version
命令,具体命令是: docker run -it 043e1978d383 bash
, 进入容器内部后执行java -version
,看到上述截图中的输出即为正常。
注意: 上述命令中的043e1978d383
是通过docker images|grep openjdk-22
查询出来的镜像ID,请替换为实际镜像ID后执行。
总结
本文简单记录了构建openjdk22基础镜像的过程,希望能够帮助到需要的朋友。
针对以上内容有任何疑问或者建议欢迎评论区留言。
创作不易,欢迎一键三连~~~~
PS: 最近在阅读《Java高并发核心编程卷一》书籍,后续会推出读书笔记系列,欢迎持续关注。