01_以RockyLinux的镜像为基础_构建自己开发学习所需的镜像

目录

  • [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)
  • [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.xzRocky-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 了。

6 感谢阅读

相关推荐
学无止境_永不停歇11 小时前
从零手写高性能 C++ TCP 服务器框架(一):项目介绍
linux·服务器·c++·中间件
dingxingdi11 小时前
Linux 清理过程
linux·运维·服务器
szxinmai主板定制专家11 小时前
基于ZYNQ MPSOC ARM+FPGA的超高清实时图像采集与压缩系统设计
linux·运维·服务器·arm开发·人工智能·嵌入式硬件·fpga开发
于小猿Sup12 小时前
ROS Noetic搭建PX4仿真环境
linux·c++·自动驾驶
曦夜日长12 小时前
Linux系统篇,开发工具(六):文件的编译配置、调试的理解、cgdb和gdb的操作使用
java·linux·php
相思难忘成疾12 小时前
Linux 网络服务综合实战:双机搭建 NFS+DNS+LNMP 博客平台
linux·运维·服务器·ssh·rhce
英辰朗迪AI获客12 小时前
Claude 官方插件生态落地应用指南
java·linux·运维
林熙蕾LXL12 小时前
线程池介绍
linux
枳实-叶12 小时前
【Linux驱动开发】第13天:Linux内核设备树解析 OF API 超详细全解
linux·运维·驱动开发