目录
- [1 前言](#1 前言)
- [2 RockyLinux 的官方镜像](#2 RockyLinux 的官方镜像)
- [3 用 docker image load 来加载前面下载好的 RockyLinux 镜像](#3 用 docker image load 来加载前面下载好的 RockyLinux 镜像)
-
- [3.1 加载 `Rocky-10-Container-UBI-10.1-20251116.0.aarch64.oci.tar.xz`](#3.1 加载
Rocky-10-Container-UBI-10.1-20251116.0.aarch64.oci.tar.xz) - [3.2 加载 `Rocky-10-Container-Minimal-10.1-20251116.0.aarch64.oci.tar.xz`](#3.2 加载
Rocky-10-Container-Minimal-10.1-20251116.0.aarch64.oci.tar.xz) - [3.3 docker image ls](#3.3 docker image ls)
- [3.1 加载 `Rocky-10-Container-UBI-10.1-20251116.0.aarch64.oci.tar.xz`](#3.1 加载
- [4 打造 JDK 8、11、17、21、25 的镜像](#4 打造 JDK 8、11、17、21、25 的镜像)
-
- [4.1 到 Oracle 的官网下载 JDK8、11、17、21、25](#4.1 到 Oracle 的官网下载 JDK8、11、17、21、25)
- [4.2 打造 JDK8 的镜像](#4.2 打造 JDK8 的镜像)
- [4.3 打造 JDK11 的镜像](#4.3 打造 JDK11 的镜像)
- [4.4 打造 JDK17 的镜像](#4.4 打造 JDK17 的镜像)
- [4.5 打造 JDK21 的镜像](#4.5 打造 JDK21 的镜像)
- [4.6 打造 JDK25 的镜像](#4.6 打造 JDK25 的镜像)
- [5 打造 MariaDB 的镜像](#5 打造 MariaDB 的镜像)
- [6 感谢阅读](#6 感谢阅读)
1 前言
最近开始学习 Docker,得知 DockerHub 在国内不能访问了。虽然说网上有一些替代的镜像源,但是不知道它们是否安全、是否稳定。反正是学习,手动搞几个开发过程中会用到镜像得了,也不用连接什么镜像源了。所以有了这篇文章,以 RockyLinux 的官方镜像为基础,自己做一些 JDK 和 MariaDB 等的镜像,用于开发学习。
2 RockyLinux 的官方镜像
RockyLinux 的官网是 https://rockylinux.org/ ,它的下载页面 https://rockylinux.org/download 如下图:

由图片可知,我们可以下载各种芯片架构的 RockyLinux。由于我的电脑是 ARM 架构的,所以点击 ARM(aarch64)。然后向下滑动页面,可以找到 Docker 镜像的下载按钮,如下图:

但是可惜它的2个下载按钮,都是指向 DockerHub 的,我们访问不了。所以只能求助于国内的 RockyLinux 镜像了,比如我们可以访问阿里的 RockyLinux 镜像,网址是 https://developer.aliyun.com/mirror/rockylinux/,如下图:

点击此页面上的 https://mirrors.aliyun.com/rockylinux/ 可以进入如下页面:

然后我们可以点击 10.1/ 进去之后,如下图:

然后我们再点击 images/ 进去之后,如下图:

然后我们再点击 aarch64/ 进去之后,如下图:

我们可以下载如图所示的 Rocky-10-Container-Minimal-10.1-20251116.0.aarch64.oci.tar.xz 和 Rocky-10-Container-UBI-10.1-20251116.0.aarch64.oci.tar.xz 这2个镜像的压缩包。
Minimal 和 UBI 的区别是:Minimal 比 UBI 的体积小、功能简单。具体的区别,可参考网上的文章: 《如何正确选择 Rocky Linux Docker 镜像》https://www.rockylinux.cn/notes/how-to-choose-rocky-linux-docker-images-correctly.html
3 用 docker image load 来加载前面下载好的 RockyLinux 镜像
访问 docker 的官网 https://www.docker.com/ 可以下载安装 docker。安装好 docker 之后,我们就可以用 docker image load 来加载前面刚刚下载好的 RockyLinux 镜像了。
3.1 加载 Rocky-10-Container-UBI-10.1-20251116.0.aarch64.oci.tar.xz
相关的命令如下:
bash
# 加载镜像
docker image load -i Rocky-10-Container-UBI-10.1-20251116.0.aarch64.oci.tar.xz
# 查看镜像
docker image ls
# 得到如下内容
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
rockylinux:10-ubi cd98339dd165 411MB 97.1MB
rockylinux:10-ubi cd98339dd165 411MB 97.1MB
# 由此可见 rockylinux:10-ubi 这个镜像的名称出现了2次
# 解决办法如下:
# 1. 使用镜像ID,为它打一个新标签
docker image tag cd98339dd165 rockylinux:10-ubi-clean
# 2. 删除所有旧的、重复的标签(执行一次即可)
docker image rm rockylinux:10-ubi
# 3. 再次查看镜像,应该就只有 rockylinux:10-ubi-clean 了
docker image ls
# 4. 使用镜像ID,为它打上原来的标签
docker image tag cd98339dd165 rockylinux:10-ubi
# 5. 删除 rockylinux:10-ubi-clean
docker image rm rockylinux:10-ubi-clean
# 6. 再次查看镜像,应该就只有一个 rockylinux:10-ubi 了
docker image ls
3.2 加载 Rocky-10-Container-Minimal-10.1-20251116.0.aarch64.oci.tar.xz
相关的命令如下:
bash
# 加载镜像
docker image load -i Rocky-10-Container-Minimal-10.1-20251116.0.aarch64.oci.tar.xz
# 查看镜像
docker image ls
# 得到如下内容
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
rockylinux:10-minimal a9d9f9836e69 204MB 51.4MB
rockylinux:10-minimal a9d9f9836e69 204MB 51.4MB
# 由此可见 rockylinux:10-minimal 这个镜像的名称出现了2次
# 解决办法如下:
# 1. 使用镜像ID,为它打一个新标签
docker image tag a9d9f9836e69 rockylinux:10-minimal-clean
# 2. 删除所有旧的、重复的标签(执行一次即可)
docker image rm rockylinux:10-minimal
# 3. 再次查看镜像,应该就只有 rockylinux:10-minimal-clean 了
docker image ls
# 4. 使用镜像ID,为它打上原来的标签
docker image tag a9d9f9836e69 rockylinux:10-minimal
# 5. 删除 rockylinux:10-minimal-clean
docker image rm rockylinux:10-minimal-clean
# 6. 再次查看镜像,应该就只有一个 rockylinux:10-minimal 了
docker image ls
3.3 docker image ls
bash
docker image ls
# 得到如下内容
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
rockylinux:10-minimal a9d9f9836e69 204MB 51.4MB
rockylinux:10-ubi cd98339dd165 411MB 97.1MB
4 打造 JDK 8、11、17、21、25 的镜像
4.1 到 Oracle 的官网下载 JDK8、11、17、21、25
Oracle 的官网是 https://www.oracle.com/java/technologies/downloads/
把它们分别下载到如下位置:
~/MyDocker/MyImages/jdk8/jdk-8u491-linux-aarch64.tar.gz~/MyDocker/MyImages/jdk11/jdk-11.0.31_linux-aarch64_bin.tar.gz~/MyDocker/MyImages/jdk17/jdk-17.0.19_linux-aarch64_bin.tar.gz~/MyDocker/MyImages/jdk21/jdk-21_linux-aarch64_bin.tar.gz~/MyDocker/MyImages/jdk25/jdk-25_linux-aarch64_bin.tar.gz
4.2 打造 JDK8 的镜像
把文件 ~/MyDocker/MyImages/jdk8/jdk-8u491-linux-aarch64.tar.gz 解压后,得到 jdk1.8.0_491/ 目录,可知到时候在 docker 里面解压的时候,解压后的目录也是 jdk1.8.0_491/ 。
现在主要是把 Dockerfile 这个文件写好。相关的命令如下:
bash
# 到 ~/MyDocker/MyImages/jdk8/ 目录下
cd ~/MyDocker/MyImages/jdk8/
# 创建并编辑 Dockerfile 文件
vim Dockerfile
Dockerfile 的内容如下:
bash
# ---------- 第一阶段:解压 JDK ----------
FROM rockylinux:10-minimal AS builder
# 安装解压工具
RUN microdnf install -y tar gzip && microdnf clean all
# 复制并解压 JDK
COPY jdk-8u491-linux-aarch64.tar.gz /tmp/
RUN tar -xzf /tmp/jdk-8u491-linux-aarch64.tar.gz -C /opt/ && \
rm -f /tmp/jdk-8u491-linux-aarch64.tar.gz && \
mv /opt/jdk1.8.0_491 /opt/jdk8
# ---------- 第二阶段:最终镜像 ----------
FROM rockylinux:10-minimal
# 直接从第一阶段把解压好的 JDK 目录复制过来
# 这样就不会携带 tar、gzip 等临时工具
COPY --from=builder /opt/jdk8 /opt/jdk8
# 配置环境变量
ENV JAVA_HOME=/opt/jdk8
ENV PATH="${JAVA_HOME}/bin:${PATH}"
CMD ["java", "-version"]
然后,使用 docker 的命令,构建镜像就ok,如下:
bash
docker image build -t jdk:8u491-linux-aarch64 .
最后查看镜像:
bash
docker image ls
# 结果如下:
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
jdk:8u491-linux-aarch64 41cb70fc45a7 463MB 128MB
rockylinux:10-minimal a9d9f9836e69 204MB 51.4MB
rockylinux:10-ubi cd98339dd165 411MB 97.1MB
4.3 打造 JDK11 的镜像
把文件 ~/MyDocker/MyImages/jdk11/jdk-11.0.31_linux-aarch64_bin.tar.gz 解压后,得到 jdk-11.0.31/ 目录,可知到时候在 docker 里面解压的时候,解压后的目录也是 jdk-11.0.31/ 。
现在主要是把 Dockerfile 这个文件写好。相关的命令如下:
bash
# 到 ~/MyDocker/MyImages/jdk11/ 目录下
cd ~/MyDocker/MyImages/jdk11/
# 创建并编辑 Dockerfile 文件
vim Dockerfile
Dockerfile 的内容如下:
bash
# ---------- 第一阶段:解压 JDK ----------
FROM rockylinux:10-minimal AS builder
# 安装解压工具
RUN microdnf install -y tar gzip && microdnf clean all
# 复制并解压 JDK
COPY jdk-11.0.31_linux-aarch64_bin.tar.gz /tmp/
RUN tar -xzf /tmp/jdk-11.0.31_linux-aarch64_bin.tar.gz -C /opt/ && \
rm -f /tmp/jdk-11.0.31_linux-aarch64_bin.tar.gz && \
mv /opt/jdk-11.0.31 /opt/jdk11
# ---------- 第二阶段:最终镜像 ----------
FROM rockylinux:10-minimal
# 直接从第一阶段把解压好的 JDK 目录复制过来
# 这样就不会携带 tar、gzip 等临时工具
COPY --from=builder /opt/jdk11 /opt/jdk11
# 配置环境变量
ENV JAVA_HOME=/opt/jdk11
ENV PATH="${JAVA_HOME}/bin:${PATH}"
CMD ["java", "-version"]
然后,使用 docker 的命令,构建镜像就ok,如下:
bash
docker image build -t jdk:11.0.31-linux-aarch64 .
最后查看镜像:
bash
docker image ls
# 结果如下:
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
jdk:11.0.31-linux-aarch64 4b64ef5ec973 658MB 221MB
jdk:8u491-linux-aarch64 41cb70fc45a7 463MB 128MB
rockylinux:10-minimal a9d9f9836e69 204MB 51.4MB
rockylinux:10-ubi cd98339dd165 411MB 97.1MB
4.4 打造 JDK17 的镜像
把文件 ~/MyDocker/MyImages/jdk17/jdk-17.0.19_linux-aarch64_bin.tar.gz 解压后,得到 jdk-17.0.19/ 目录,可知到时候在 docker 里面解压的时候,解压后的目录也是 jdk-17.0.19/ 。
现在主要是把 Dockerfile 这个文件写好。相关的命令如下:
bash
# 到 ~/MyDocker/MyImages/jdk17/ 目录下
cd ~/MyDocker/MyImages/jdk17/
# 创建并编辑 Dockerfile 文件
vim Dockerfile
Dockerfile 的内容如下:
bash
# ---------- 第一阶段:解压 JDK ----------
FROM rockylinux:10-minimal AS builder
# 安装解压工具
RUN microdnf install -y tar gzip && microdnf clean all
# 复制并解压 JDK
COPY jdk-17.0.19_linux-aarch64_bin.tar.gz /tmp/
RUN tar -xzf /tmp/jdk-17.0.19_linux-aarch64_bin.tar.gz -C /opt/ && \
rm -f /tmp/jdk-17.0.19_linux-aarch64_bin.tar.gz && \
mv /opt/jdk-17.0.19 /opt/jdk17
# ---------- 第二阶段:最终镜像 ----------
FROM rockylinux:10-minimal
# 直接从第一阶段把解压好的 JDK 目录复制过来
# 这样就不会携带 tar、gzip 等临时工具
COPY --from=builder /opt/jdk17 /opt/jdk17
# 配置环境变量
ENV JAVA_HOME=/opt/jdk17
ENV PATH="${JAVA_HOME}/bin:${PATH}"
CMD ["java", "-version"]
然后,使用 docker 的命令,构建镜像就ok,如下:
bash
docker image build -t jdk:17.0.19-linux-aarch64 .
最后查看镜像:
bash
docker image ls
# 结果如下:
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
jdk:11.0.31-linux-aarch64 4b64ef5ec973 658MB 221MB
jdk:17.0.19-linux-aarch64 8c521bfc1dda 710MB 235MB
jdk:8u491-linux-aarch64 41cb70fc45a7 463MB 128MB
rockylinux:10-minimal a9d9f9836e69 204MB 51.4MB
rockylinux:10-ubi cd98339dd165 411MB 97.1MB
4.5 打造 JDK21 的镜像
把文件 ~/MyDocker/MyImages/jdk21/jdk-21_linux-aarch64_bin.tar.gz 解压后,得到 jdk-21.0.11 目录,可知到时候在 docker 里面解压的时候,解压后的目录也是 jdk-21.0.11 。
现在主要是把 Dockerfile 这个文件写好。相关的命令如下:
bash
# 到 ~/MyDocker/MyImages/jdk21/ 目录下
cd ~/MyDocker/MyImages/jdk21/
# 创建并编辑 Dockerfile 文件
vim Dockerfile
Dockerfile 的内容如下:
bash
# ---------- 第一阶段:解压 JDK ----------
FROM rockylinux:10-minimal AS builder
# 安装解压工具
RUN microdnf install -y tar gzip && microdnf clean all
# 复制并解压 JDK
COPY jdk-21_linux-aarch64_bin.tar.gz /tmp/
RUN tar -xzf /tmp/jdk-21_linux-aarch64_bin.tar.gz -C /opt/ && \
rm -f /tmp/jdk-21_linux-aarch64_bin.tar.gz && \
mv /opt/jdk-21.0.11 /opt/jdk21
# ---------- 第二阶段:最终镜像 ----------
FROM rockylinux:10-minimal
# 直接从第一阶段把解压好的 JDK 目录复制过来
# 这样就不会携带 tar、gzip 等临时工具
COPY --from=builder /opt/jdk21 /opt/jdk21
# 配置环境变量
ENV JAVA_HOME=/opt/jdk21
ENV PATH="${JAVA_HOME}/bin:${PATH}"
CMD ["java", "-version"]
然后,使用 docker 的命令,构建镜像就ok,如下:
bash
docker image build -t jdk:21.0.11-linux-aarch64 .
最后查看镜像:
bash
docker image ls
# 结果如下:
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
jdk:11.0.31-linux-aarch64 4b64ef5ec973 658MB 221MB
jdk:17.0.19-linux-aarch64 8c521bfc1dda 710MB 235MB
jdk:21.0.11-linux-aarch64 cc4e3cfaf855 752MB 249MB
jdk:8u491-linux-aarch64 41cb70fc45a7 463MB 128MB
rockylinux:10-minimal a9d9f9836e69 204MB 51.4MB
rockylinux:10-ubi cd98339dd165 411MB 97.1MB
4.6 打造 JDK25 的镜像
把文件 ~/MyDocker/MyImages/jdk25/jdk-25_linux-aarch64_bin.tar.gz 解压后,得到 jdk-25.0.3 目录,可知到时候在 docker 里面解压的时候,解压后的目录也是 jdk-25.0.3 。
现在主要是把 Dockerfile 这个文件写好。相关的命令如下:
bash
# 到 ~/MyDocker/MyImages/jdk25/ 目录下
cd ~/MyDocker/MyImages/jdk25/
# 创建并编辑 Dockerfile 文件
vim Dockerfile
Dockerfile 的内容如下:
bash
# ---------- 第一阶段:解压 JDK ----------
FROM rockylinux:10-minimal AS builder
# 安装解压工具
RUN microdnf install -y tar gzip && microdnf clean all
# 复制并解压 JDK
COPY jdk-25_linux-aarch64_bin.tar.gz /tmp/
RUN tar -xzf /tmp/jdk-25_linux-aarch64_bin.tar.gz -C /opt/ && \
rm -f /tmp/jdk-25_linux-aarch64_bin.tar.gz && \
mv /opt/jdk-25.0.3 /opt/jdk25
# ---------- 第二阶段:最终镜像 ----------
FROM rockylinux:10-minimal
# 直接从第一阶段把解压好的 JDK 目录复制过来
# 这样就不会携带 tar、gzip 等临时工具
COPY --from=builder /opt/jdk25 /opt/jdk25
# 配置环境变量
ENV JAVA_HOME=/opt/jdk25
ENV PATH="${JAVA_HOME}/bin:${PATH}"
CMD ["java", "-version"]
然后,使用 docker 的命令,构建镜像就ok,如下:
bash
docker image build -t jdk:25.0.3-linux-aarch64 .
最后查看镜像:
bash
docker image ls
# 结果如下:
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
jdk:11.0.31-linux-aarch64 4b64ef5ec973 658MB 221MB
jdk:17.0.19-linux-aarch64 8c521bfc1dda 710MB 235MB
jdk:21.0.11-linux-aarch64 cc4e3cfaf855 752MB 249MB
jdk:25.0.3-linux-aarch64 a6bb94d46fb8 813MB 267MB
jdk:8u491-linux-aarch64 41cb70fc45a7 463MB 128MB
rockylinux:10-minimal a9d9f9836e69 204MB 51.4MB
rockylinux:10-ubi cd98339dd165 411MB 97.1MB
5 打造 MariaDB 的镜像
相关的命令:
bash
# 1. 先到指定目录
cd /MyDocker/MyImages
# 2. 创建目录
mkdir mariadb
# 3. 进入新的目录
cd mariadb
# 4. 新建并编辑 Dockerfile
vim Dockerfile
Dockerfile 的内容如下:
bash
# 使用功能完整的 ubi 镜像来安装
FROM rockylinux:10-ubi
# 运行官方脚本 添加 MariaDB 的源
RUN curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
# 安装 MariaDB Server
RUN dnf install -y MariaDB-server && dnf clean all
# 暴露 MariaDB 默认端口
EXPOSE 3306
# 启动 MariaDB
CMD ["mariadbd", "--user=root"]
然后,使用 docker 的命令,构建镜像就ok,如下:
bash
docker image build -t mariadb:linux-aarch64-12.2.2 .
然后查看镜像:
bash
docker image ls
# 结果如下:
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
jdk:11.0.31-linux-aarch64 4b64ef5ec973 658MB 221MB
jdk:17.0.19-linux-aarch64 8c521bfc1dda 710MB 235MB
jdk:21.0.11-linux-aarch64 cc4e3cfaf855 752MB 249MB
jdk:25.0.3-linux-aarch64 a6bb94d46fb8 813MB 267MB
jdk:8u491-linux-aarch64 41cb70fc45a7 463MB 128MB
mariadb:linux-aarch64-12.2.2 e5c3f212f2cc 966MB 184MB
rockylinux:10-minimal a9d9f9836e69 204MB 51.4MB
rockylinux:10-ubi cd98339dd165 411MB 97.1MB
然后试验性地启动 mariadb 的镜像,相关命令如下:
bash
docker container run -d \
--name my-mariadb-instance \
-p 53306:3306 \
mariadb:linux-aarch64-12.2.2
然后宿主机连接上这个 mariadb 的 /bin/bash,相关命令如下:
bash
# 1. 先查看容器详情
docker container ls -a
# 得到如下结果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3abd28638e32 mariadb:linux-aarch64-12.2.2 "mariadbd --user=root" 7 hours ago Up 7 hours 0.0.0.0:53306->3306/tcp, [::]:53306->3306/tcp my-mariadb-instance
# 2. 连接容器的 shell
docker container exec -it 3ab /bin/bash
# 然后就可以开始配置 mariadb 了
参考我之前的文档 《RockyLinux安装MariaDB》https://blog.csdn.net/ShiJunzhiCome/article/details/132968494,我们可以新建管理员账号 sjzadmin 并授权,然后还可以设置 MariaDB 表名称不区分大小写,最后就可以用 DBeaver 连接 mariadb 了。