可以,完全支持。
在 Jenkins 中构建 Docker 镜像时,选择 Rocky Linux 作为基础镜像(Base Image)是非常常见且推荐的做法。Rocky Linux 是 RHEL(Red Hat Enterprise Linux)的社区重建版本,与 CentOS 具有极高的兼容性,因此被广泛用于企业级容器化场景中。
以下是关于在 Jenkins 中使用 Rocky Linux 构建镜像的关键点和注意事项:
1. 基础镜像的选择
你可以直接使用官方提供的 Rocky Linux 镜像作为 Dockerfile 的起点。常见的标签包括:
rockylinux:9(当前主流版本)rockylinux:8(旧版支持)rockylinux:latest(不推荐用于生产环境,因为可能包含非预期的更新)
示例 Dockerfile:
FROM rockylinux:9
# 安装必要的工具(例如 yum-utils, git 等)
RUN dnf install -y git vim &&
dnf clean all
WORKDIR /app
COPY . .
RUN echo "Build complete on Rocky Linux"
2. Jenkins 中的配置方式
在 Jenkins Pipeline (Jenkinsfile) 中,你通常通过以下方式实现:
方案 A:使用 Docker 插件 (Docker Pipeline Plugin)
这是最常用的方式,利用 Jenkins 宿主机上的 Docker Daemon 或 Docker-in-Docker (dind) 来执行构建命令。
pipeline {
agent any
stages {
stage('Build') {
steps {
// 构建基于 Rocky Linux 的镜像
sh '''
docker build -t my-rocky-app:1.0 .
'''
}
}
stage('Push') {
steps {
// 推送到仓库
sh '''
docker push my-rocky-app:1.0
'''
}
}
}
}
方案 B:使用 Kubernetes Agent (Kubernetes Pod Template)
如果你的 Jenkins 运行在 K8s 上,可以在 Pod 模板中指定使用带有 Docker 环境的镜像,或者直接利用节点上的 Docker。
3. 需要注意的关键点
-
权限问题 (Rootless vs Root):
Rocky Linux 默认对dnf包管理器的使用需要 root 权限。在 Docker 构建过程中,默认是以 root 用户运行的,所以RUN dnf install ...可以直接工作。但如果你是在宿主机的 Jenkins 节点上直接运行docker build,请确保 Jenkins 用户有权限访问 Docker Socket (/var/run/docker.sock)。 -
缓存优化:
Rocky Linux 的dnf命令比apt更重,构建速度受网络影响较大。建议在Dockerfile中合理使用--no-cache或在构建步骤前清理缓存,或者将依赖安装层放在代码复制层之前以利用 Docker 缓存。 -
安全性:
虽然 Rocky Linux 非常稳定,但在容器构建完成后,建议遵循“最小权限原则”。不要长期以 root 身份运行应用,可以在Dockerfile末尾创建普通用户并切换:RUN useradd -m appuser USER appuser -
替代方案对比:
- CentOS Stream: 也是红帽系,但处于滚动开发状态,稳定性略逊于 Rocky。
- AlmaLinux: Rocky 的直接竞争对手,同样兼容 RHEL,两者在 Jenkins 中表现几乎一致。
- Debian/Ubuntu: 如果你不需要 RHEL 生态的特定兼容性(如特定的 RPM 包或 SELinux 策略),这些发行版的镜像体积通常更小,启动更快。
总结
可以使用 Rocky Linux 作为基础镜像。 它提供了企业级的稳定性和安全性,非常适合需要长期维护、高可靠性的生产环境容器构建。只要在 Jenkins 环境中正确配置了 Docker 访问权限和构建脚本即可。
轻量云Cloud