本文使用的 Docker 镜像
本文基于 rockylinux/rockylinux:9.8,实测引擎 Rocky Linux 9.8 (Blue Onyx),测试平台 Ubuntu 24.04 Linux。
Jenkins 流水线还在 FROM centos:7,安全扫描一亮红灯;联调机装了 Alma,业务容器却是旧 RHEL 小版本,包名对得上、systemctl 一启就报单元找不到。有人把脚本拷进本机 root 目录「先跑通」,换同事笔记本又差一截 glibc。要的其实很具体:一个免费、可再分发、功能对齐 RHEL 的容器底,标签写清楚,CI 和笔记本拉到的是同一份。
构建缓存、安全补丁和中间产物最好落在自己的盘上。公有云托管构建按分钟计费,等保机房也不宜把源码和依赖送出域。很多团队已经有一台跑 Docker 的 Ubuntu,缺的是镜像能拉、容器能常驻、dnf 能装包、FROM 能写进流水线——而不是再装一台物理 Rocky。
Rocky Linux(文档、Wiki)是社区支持的企业级 Linux:源码来自 Red Hat 公开的 RHEL 源码,目标功能兼容 RHEL,主要去掉上游厂商品牌与图标,免费可再分发;每个大版本约有长达 10 年的安全更新周期。容器镜像 rockylinux/rockylinux(镜像页)把这套系统做成 Docker 基础镜像,适合当 Dockerfile 底、CI 构建环境,以及临时的 RHEL 兼容沙箱。
部署跑通之后,你实际能做这些事:
| 场景 | 部署后怎么用 |
|---|---|
| 验证版本 | docker compose exec rockylinux cat /etc/os-release(实测 9.8 Blue Onyx) |
| 进沙箱装包 | exec 进 bash,用 dnf 联调(注意 curl-minimal,见 Q8) |
| 写业务镜像 | FROM docker.xuanyuan.run/rockylinux/rockylinux:9.8 |
| 挂工作目录 | ./workspace ↔ /workspace,脚本与产物落在宿主机 |
| 备份搬家 | 停容器后打包 docker-compose.yml 与挂载目录 |
本文按「能跟做」写完整链路:用 轩辕镜像 加速拉取 rockylinux/rockylinux:9.8,Docker Compose 起常驻沙箱并验证版本;真正落地以第六节 Dockerfile FROM 为主。无 Compose 见第八节。
上手要点
- 部署:第五节 Compose(沙箱);生产用法见第六节
FROM;临时 shell 见第八节- 无 Web 控制台:验证靠终端与
/etc/os-release(实测SUPPORT_END=2032-05-31)- 标签:跟做
9.8;勿写latest。要持续吃补丁用滚动9,或在 Dockerfile 里dnf -y update- 坐标:用
rockylinux/rockylinux,勿依赖短名rockylinux(library/rockylinux可能过时或缺标签)- 包管理:
dnf(实测 4.14.0)。已带curl-minimal/vim-minimal,勿再装完整curl- 体积:DISK 348MB / CONTENT 87.6MB
- 数据:
./workspace→/workspace- systemd:默认未激活;仅依赖
systemctl时看第七节
一、Rocky Linux 镜像是什么?
rockylinux/rockylinux 是 RHEL 兼容的操作系统基础镜像:没有业务 Web 后台,入口是终端、dnf 和 Dockerfile。跟「继续用停更的 CentOS 容器」或「本机装一套再往里拷脚本」比,容器底更容易复现、换机器、进 CI。
| Rocky Linux(本文) | 停更 CentOS 容器 | RHEL UBI / 订阅镜像 | |
|---|---|---|---|
| 定位 | 社区、免费可再分发、对齐 RHEL | 已停更,不适合新项目 | 厂商支持,依赖订阅与合规策略 |
| 怎么用 | FROM / CI / exec 沙箱 | 遗留兼容 | 同上 + 厂商文档 |
| 更新 | 滚动标签 9,或 Dockerfile 内 dnf update | 不宜再当生产底 | 按订阅仓库 |
| 适合 | 企业基础镜像、流水线、联调 | 仅存量 | 已有 Red Hat 订阅 |
text宿主机 Ubuntu(Docker) │ ▼ rockylinux/rockylinux:9.8 ├── bash / dnf(实测 4.14.0) ├── ./workspace → /workspace └── 业务进程写在你的 Dockerfile 里(可选 systemd)
同站还有 library/rockylinux、arm64v8/rockylinux 等坐标。本文只用社区维护的 rockylinux/rockylinux:9.8。/r/ 与 /zh/r/ 是同一镜像的不同页面语言。
二、环境要求
| 项目 | 建议 |
|---|---|
| 系统 | Linux,建议 Ubuntu 24.04 |
| Docker | Engine + Compose V2 |
| 架构 | amd64 / arm64(以 tags 为准;本文实测 x86_64) |
| 内存 | ≥ 512 MB;装大量包或跑 systemd 再加 |
| 磁盘 | DISK 348MB / CONTENT 87.6MB + 挂载目录 |
| 端口 | 沙箱不映射;httpd / systemd 示例用 8080→80 |
bashdocker --version docker compose version
Linux 未装 Docker 可使用轩辕镜像一键安装脚本:
bashbash <(wget -qO- https://get.xuanyuan.cloud/docker.sh)
备用地址:
bashbash <(wget -qO- https://get.xuanyuan.me/docker.sh)
更多见 轩辕镜像使用手册。
映射 8080 前可先查占用:
bashss -tlnp | grep ':8080'
冲突则改映射左侧(如 "18080:80")。
三、标签怎么选
跟做使用 9.8。完整列表:tags。
| 标签 | 含义 | 推荐 |
|---|---|---|
9.8 | 次要版本,贴近安装介质 | 本文跟做;镜像层不滚动打补丁 |
9.8.20260525.0 | 带构建日期 | 需要可追溯时 |
9 | 主版本滚动(约每月或紧急修复时更新) | 生产想持续吃补丁时 |
9-minimal / 9.8-minimal | 精简变体 | 体积敏感 |
9-ubi / 9.8-ubi | UBI 风格变体 | 按上游说明 |
10 / 10.2 | Rocky Linux 10 | 新栈评估 |
8 / 8.10 | Rocky Linux 8 | 遗留兼容 |
latest | 跟踪当前最新大版本线 | 勿写入跟做命令 |
次要标签(如 9.8)对齐 ISO 内容,官方说明不会持续更新镜像层——Dockerfile 里应加 RUN dnf -y update && dnf clean all,或改用滚动 9(流水线建议记录 digest)。升级时同步改 pull、Compose、docker run、Dockerfile 四处标签,并核对 发行说明。
四、拉取镜像
用 轩辕镜像 加速拉取:
bashdocker pull docker.xuanyuan.run/rockylinux/rockylinux:9.8
Ubuntu 24.04 实测:
text9.8: Pulling from rockylinux/rockylinux 99c753a880cc: Pull complete Digest: sha256:8101994123cf3d0a8fee517bee7f39e555c7d92bd2d9eb3303cc988a0eeed00f Status: Downloaded newer image for docker.xuanyuan.run/rockylinux/rockylinux:9.8 docker.xuanyuan.run/rockylinux/rockylinux:9.8
bashdocker images docker.xuanyuan.run/rockylinux/rockylinux:9.8
textIMAGE ID DISK USAGE CONTENT SIZE EXTRA docker.xuanyuan.run/rockylinux/rockylinux:9.8 8101994123cf 348MB 87.6MB
| 官方镜像 | 轩辕镜像加速拉取 |
|---|---|
rockylinux/rockylinux:9.8 | docker pull docker.xuanyuan.run/rockylinux/rockylinux:9.8 |
401 / 402 见 常见问题。
五、Docker Compose 部署(推荐 · 沙箱)
| 平台 | 工作目录 |
|---|---|
| Linux(正文默认) | /www/wwwroot/rockylinux |
| macOS | ~/docker/rockylinux |
基础镜像没有常驻业务进程。跟作用 sleep infinity 保活,再用 exec 进 shell——方便对照版本、试 dnf、挂工作目录。业务镜像请走第六节 FROM,不要把空沙箱长期当生产进程。
5.1 准备目录
bashsudo mkdir -p /www/wwwroot/rockylinux/workspace cd /www/wwwroot/rockylinux # macOS:mkdir -p ~/docker/rockylinux/workspace && cd ~/docker/rockylinux
非 root 给 mkdir / docker 加 sudo。
5.2 编写 docker-compose.yml
bashcat > docker-compose.yml <<'EOF' services: rockylinux: image: docker.xuanyuan.run/rockylinux/rockylinux:9.8 container_name: rockylinux restart: unless-stopped environment: - TZ=Asia/Shanghai command: ["sleep", "infinity"] volumes: - ./workspace:/workspace EOF
| 项 | 说明 |
|---|---|
command | sleep infinity 保活。不写 command 时入口多为交互 shell,无 TTY 会立刻退出 |
./workspace | 宿主机与容器共享目录 |
| 端口 | 沙箱不必映射;对外服务在自建镜像里声明 |
5.3 启动并验证
bashdocker compose up -d docker compose ps
Ubuntu 24.04 实测:
text[+] up 2/2 ✔ Network rockylinux_default Created ✔ Container rockylinux Started
textNAME IMAGE COMMAND SERVICE CREATED STATUS PORTS rockylinux docker.xuanyuan.run/rockylinux/rockylinux:9.8 "sleep infinity" rockylinux 6 seconds ago Up 2 seconds
PORTS 为空是预期(未映射端口)。sleep infinity 几乎无应用日志,不必盯 compose logs。
bashdocker compose exec rockylinux cat /etc/os-release docker compose exec rockylinux bash -lc 'dnf --version; uname -m'
实测关键字段:
textNAME="Rocky Linux" VERSION="9.8 (Blue Onyx)" ID="rocky" VERSION_ID="9.8" PRETTY_NAME="Rocky Linux 9.8 (Blue Onyx)" SUPPORT_END="2032-05-31" ROCKY_SUPPORT_PRODUCT_VERSION="9.8"
text4.14.0 Installed: dnf-0:4.14.0-34.el9_8.rocky.0.1.noarch at Mon May 25 20:18:55 2026 … x86_64
进入交互 shell:
bashdocker compose exec -it rockylinux bash # 退出:exit
容器内可按需装包。镜像已带 vim-minimal、curl-minimal(命令行仍叫 curl),不要再执行 dnf install curl(会冲突,见 Q8)。示例:
bashdnf -y install less procps-ng && dnf clean all
宿主机把文件放进 ./workspace,容器内路径为 /workspace。
5.4 可选:临时演示 httpd(非生产)
只想看「容器内起服务 + 端口映射」时可用;每次启动都会 dnf install,勿当长期方案。正式服务请写成 Dockerfile。
yamlservices: rockylinux-httpd: image: docker.xuanyuan.run/rockylinux/rockylinux:9.8 container_name: rockylinux-httpd restart: unless-stopped ports: - "8080:80" command: - bash - -lc - | dnf -y install httpd && echo 'Hello from Rocky Linux container' > /var/www/html/index.html && exec /usr/sbin/httpd -DFOREGROUND
bashcurl -s http://127.0.0.1:8080/
六、当作 Dockerfile 基础镜像(生产主路径)
联调用第五节沙箱即可;交付业务镜像应 FROM 固化依赖,而不是长期挂一个空 sleep 容器。
dockerfileFROM docker.xuanyuan.run/rockylinux/rockylinux:9.8 # 次要标签不滚动更新时,自行打补丁: RUN dnf -y update && dnf clean all RUN dnf -y install python3 && dnf clean all WORKDIR /app COPY . /app CMD ["python3", "--version"]
bashdocker build -t local/rocky-app:9.8 . docker run --rm local/rocky-app:9.8
6.1 包文档(nodocs)
官方默认启用 nodocs 以减小体积。若缺 man / 文档文件:
bashsed -i 's/^tsflags=nodocs/#tsflags=nodocs/' /etc/yum.conf dnf -y reinstall <package-name> && dnf clean all
部分环境配置在 /etc/dnf/dnf.conf,以容器内实际文件为准。
七、可选:启用 systemd(进阶)
镜像含 systemd,但默认不是 PID 1。只有必须 systemctl enable … 时才需要;普通前台进程(如 httpd -DFOREGROUND)跳过本节。
7.1 systemd 基础镜像
dockerfileFROM docker.xuanyuan.run/rockylinux/rockylinux:9.8 ENV container=docker RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ "$i" = \ systemd-tmpfiles-setup.service ] || rm -f "$i"; done); \ rm -f /lib/systemd/system/multi-user.target.wants/*; \ rm -f /etc/systemd/system/*.wants/*; \ rm -f /lib/systemd/system/local-fs.target.wants/*; \ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*; \ rm -f /lib/systemd/system/anaconda.target.wants/*; VOLUME [ "/sys/fs/cgroup" ] CMD ["/usr/sbin/init"]
bashdocker build --rm -t local/r9-systemd .
7.2 带 httpd 的应用镜像
dockerfileFROM local/r9-systemd RUN dnf -y install httpd && dnf clean all && systemctl enable httpd.service EXPOSE 80 CMD ["/usr/sbin/init"]
bashdocker build --rm -t local/r9-systemd-httpd . docker run -d --name rocky-httpd \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -p 8080:80 \ local/r9-systemd-httpd
Ubuntu 宿主机若 systemd 起不来,可再挂临时 /run:
bashdocker run -d --name rocky-httpd \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v /tmp/$(mktemp -d):/run \ -p 8080:80 \ local/r9-systemd-httpd
访问:http://服务器IP:8080/。用完:docker stop rocky-httpd && docker rm rocky-httpd。
八、备选:docker run
临时进一次 shell:
bashdocker run -it --rm \ --name rockylinux \ -e TZ=Asia/Shanghai \ -v /www/wwwroot/rockylinux/workspace:/workspace \ docker.xuanyuan.run/rockylinux/rockylinux:9.8 \ bash
常驻后台(等价第五节):
bashdocker run -d \ --name rockylinux \ --restart unless-stopped \ -e TZ=Asia/Shanghai \ -v /www/wwwroot/rockylinux/workspace:/workspace \ docker.xuanyuan.run/rockylinux/rockylinux:9.8 \ sleep infinity docker exec -it rockylinux bash docker exec rockylinux cat /etc/os-release
bashdocker stop rockylinux && docker rm rockylinux
九、迁移 / 升级
- 备份
docker-compose.yml、./workspace与自建 Dockerfile。 - 在 tags 选定新标签(更新的次要版本,或改滚动
9)。 - 改标签后:
bashcd /www/wwwroot/rockylinux docker compose pull docker compose up -d docker compose exec rockylinux cat /etc/os-release
- 大版本跨越(8→9、9→10)按官方策略评估;容器场景优先重建镜像,少在容器内做原地跨大版本升级。
十、常见问题 FAQ
Q1:docker pull rockylinux:9.8 失败,完整名可以?
短名走 library/rockylinux,标签可能缺失或过时。统一用 rockylinux/rockylinux:9.8(经轩辕镜像:docker.xuanyuan.run/rockylinux/rockylinux:9.8)。
Q2:为什么用 9.8 而不是 latest / 9?
latest 会漂移,跟做步骤易对不上。9.8 可复现,但不滚动打镜像补丁——要持续更新用滚动 9,或在 Dockerfile 里 dnf update,并记录 digest。
Q3:容器一启动就退出?
守护场景加上 command: ["sleep", "infinity"],或换成你的前台业务命令;交互试玩用 docker run -it … bash。
Q4:和 AlmaLinux / RHEL UBI 怎么选?
都是 RHEL 兼容生态。Rocky 侧重社区免费可再分发;已有 Red Hat 订阅可评估 UBI。本文只覆盖 rockylinux/rockylinux。
Q5:一定要 systemd 吗?
不必。前台进程即可时跳过第七节。
Q6:示例为什么映射 8080 而不是 80?
减少与宿主机已有 Web 冲突;可按环境改左侧端口。
Q7:有默认管理员密码吗?
无 Web 登录。容器内多为 root;限制谁能 docker exec,业务进程尽量非 root。
Q8:dnf install curl 与 curl-minimal 冲突?
实测 9.8 已装 curl-minimal(命令仍可用)。勿再装完整 curl;必须换包时用 dnf -y install curl --allowerasing。vim-minimal 亦已预装。
十一、命令速查
bashdocker pull docker.xuanyuan.run/rockylinux/rockylinux:9.8 cd /www/wwwroot/rockylinux docker compose up -d docker compose ps docker compose exec -it rockylinux bash docker compose exec rockylinux cat /etc/os-release docker compose pull && docker compose up -d docker compose down # 备选 docker run -it --rm docker.xuanyuan.run/rockylinux/rockylinux:9.8 bash
十二、延伸阅读
总结
- 跟做
rockylinux/rockylinux:9.8:Compose +sleep infinity,用exec验/etc/os-release - 生产主路径是 Dockerfile
FROM;次要标签自行dnf update,或改用滚动9 - 坐标用完整名;勿默认
latest;注意curl-minimal冲突 - systemd 仅在需要时启用
阅读原文
评论交流
免责声明
本博客文章所提供的内容、技术方案、配置示例及部署指南等信息,仅供学习交流和技术参考使用。文章内容基于发布时的技术环境和版本信息编写,可能因时间推移、技术更新或环境差异而存在不适用的情况。
用户在参考本博客内容进行部署操作前,应当充分了解相关技术风险,并建议在测试环境中进行充分验证和测试,确认无误后再考虑在生产环境中使用。生产环境部署前,请务必进行数据备份,并制定相应的回滚方案。
用户因使用本博客内容进行部署操作而产生的任何损失、数据丢失、系统故障、安全风险或其他问题,均由用户自行承担全部责任。轩辕镜像官方不对因使用本博客内容而产生的任何直接或间接损失承担责任。
本免责声明的最终解释权归轩辕镜像官方所有。
