Jenkins、Docker、K8s (Kubernetes) 是云原生与 DevOps 领域的三大核心技术,分别负责 自动化流程、应用容器化、容器集群管理,三者常组合使用,构建完整的 CI/CD 自动化交付体系。

一、核心概念与定位

1. Docker —— 应用的 "集装箱"
  • 定位容器化引擎,解决 "在我的机器上能跑" 的问题。
  • 核心作用
    • 将应用代码、运行环境、依赖库、配置文件打包为镜像(Image)
    • 以 ** 容器(Container)** 形式运行,环境隔离、轻量、启动快。
    • 保证 "一次构建,处处运行",消除环境差异。

2. Kubernetes (K8s) —— 容器的 "调度中心"
  • 定位容器编排平台,解决 "容器多了怎么管" 的问题。
  • 核心作用
    • 自动化部署、扩缩容、自愈 Docker 容器。
    • 管理集群(多台服务器)资源、负载均衡、服务发现。
    • 实现应用高可用、滚动更新、快速回滚

3. Jenkins —— 自动化的 "流水线大脑"
  • 定位CI/CD 自动化服务器,解决 "手动部署太麻烦" 的问题。
  • 核心作用
    • 自动拉取代码 → 编译 → 测试 → 构建 Docker 镜像。
    • 自动推送镜像到仓库,再调用 K8s API 完成部署。
    • 可视化流水线,丰富插件生态,适配各种工具链。

二、三者关系与协同流程(CI/CD 流水线)

标准工作流:代码提交 → 构建 → 镜像 → 仓库 → 部署 → 运行

  1. 开发提交代码(GitLab/GitHub)
  2. Jenkins 触发:自动拉取代码、编译、测试
  3. Docker 构建镜像:通过 Dockerfile 打包应用
  4. 推送镜像:到 Docker Hub/Harbor 私有仓库
  5. K8s 部署:Jenkins 调用 kubectl 更新 K8s 集群
  6. K8s 运行:拉取新镜像、创建 Pod、滚动更新、对外提供服务

三、核心区别对比

表格

维度 Docker K8s Jenkins
核心功能 应用打包、容器运行 容器集群调度、管理 自动化构建、测试、部署
解决问题 环境一致性、应用标准化 大规模容器管理、高可用 流程自动化、效率提升
层级 底层运行时(单机) 上层编排(集群) 顶层流程控制(CI/CD)
关系 被 K8s 管理 调度 Docker 容器 调用 Docker、操作 K8s

四、经典组合实战(极简示例)

1. 用 Docker 运行 Jenkins

bash

运行

docker run -d --name jenkins -p 8080:8080 -p 50000:50000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkins/jenkins:lts
  • 挂载 docker.sock 让 Jenkins 容器内可调用宿主机 Docker
2. Jenkins 必备插件
  • Pipeline:流水线核心
  • Git:拉取代码
  • Docker Pipeline:构建推送镜像
  • Kubernetes CLI / Kubernetes:操作 K8s 集群
3. 典型 Jenkinsfile (Pipeline 脚本)

groovy

pipeline {
  agent any
  environment {
    IMAGE_NAME = "my-app"
    IMAGE_TAG  = "${BUILD_NUMBER}"
    REGISTRY   = "docker.io/your-repo"
    K8S_NS     = "default"
  }
  stages {
    stage('拉取代码') { steps { git 'https://github.com/xxx/your-project.git' } }
    stage('构建镜像') { steps { sh "docker build -t ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} ." } }
    stage('推送镜像') { steps { sh "docker push ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}" } }
    stage('部署到K8s') {
      steps {
        sh "kubectl set image deployment/${IMAGE_NAME} ${IMAGE_NAME}=${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} -n ${K8S_NS}"
      }
    }
  }
}

五、总结

  • Docker造容器(应用打包)
  • K8s管容器(集群运行)
  • Jenkins自动化全流程(从代码到上线)

一句话记忆Jenkins 指挥 Docker 打包,再让 K8s 去运行管理

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐