走啊走
加油

使用jenkins构建基础镜像,可以选择rockylinux作为基础镜像吗?

服务器价格表

可以,完全支持。

在 Jenkins 中构建 Docker 镜像时,选择 Rocky Linux 作为基础镜像(Base Image)是非常常见且推荐的做法。Rocky Linux 是 RHEL(Red Hat Enterprise Linux)的下游社区发行版,与 CentOS Stream 或 AlmaLinux 一样,提供了与企业级生产环境高度兼容的运行环境。

以下是关于在 Jenkins 中使用 Rocky Linux 构建镜像的关键点和操作建议:

1. 为什么选择 Rocky Linux?

  • 兼容性:它与 RHEL 二进制兼容,适合需要稳定、长期支持的企业级应用部署。
  • 安全性:继承了 RHEL 的安全更新机制和漏洞修复策略。
  • 资源占用:相比其他重型发行版,Rocky Linux 通常具有较好的性能表现,适合作为容器基础镜像。

2. 如何在 Dockerfile 中指定

你只需要在 Dockerfile 的第一行使用 FROM 指令引用官方的 Rocky Linux 镜像即可。例如:

# 使用最新的 Rocky Linux 9 版本
FROM rockylinux:9

# 或者使用具体的小版本号以确保稳定性
# FROM rockylinux:9-stream

# 设置工作目录
WORKDIR /app

# 安装必要的工具(以 DNF 为例)
RUN dnf install -y java-17-openjdk-headless git && 
    dnf clean all

# 复制项目代码
COPY . .

# 构建或运行命令
CMD ["java", "-jar", "app.jar"]

3. Jenkins 中的配置步骤

在 Jenkins Pipeline 中,你可以通过以下方式调用构建过程:

方式 A:使用 Declarative Pipeline (Groovy)

pipeline {
    agent any
    stages {
        stage('Build Image') {
            steps {
                script {
                    // 定义镜像名称
                    def imageName = 'my-project/rocky-app:latest'

                    // 执行 docker build 命令,Jenkins 会自动拉取基础镜像
                    sh """
                        docker build -t ${imageName} .
                    """
                }
            }
        }
        stage('Push to Registry') {
            steps {
                script {
                    // 登录并推送镜像
                    withDockerRegistry(credentialsId: 'your-docker-registry-id', toolName: 'docker') {
                        sh "docker push ${imageName}"
                    }
                }
            }
        }
    }
}

方式 B:注意事项

  • 网络权限:确保运行 Jenkins 的节点(Agent)能够访问互联网,以便从 Docker Hub 或其他镜像仓库拉取 rockylinux 的基础镜像。如果是在内网环境,可能需要提前将镜像导入到本地仓库。
  • Docker 守护进程:确保 Jenkins 节点已正确安装 Docker 插件,并且有权限执行 docker build 命令(通常需要加入 docker 用户组或使用 root 权限)。
  • 多阶段构建优化:为了减小最终镜像体积,建议在构建过程中利用多阶段构建(Multi-stage builds),先基于 rockylinux 编译代码,最后将产物复制到精简版的 rockylinux 镜像中。

总结

使用 Jenkins 构建基于 Rocky Linux 的镜像不仅可行,而且是企业级 DevOps 流程中的标准实践之一。只要你的 Jenkins 环境能正常拉取该镜像,后续的配置逻辑与其他 Linux 发行版(如 Ubuntu, CentOS)基本一致。