当前位置: 首页 > backend >正文

部署-k8s和docker、jenkins的区别和联系

k8s和docker、jenkins的区别和联系

Kubernetes (k8s)DockerJenkins 是现代云原生开发中常用的三个核心工具,它们分别承担不同的角色,但又可以协同工作,实现高效的 CI/CD(持续集成与持续交付) 流程。


一、三者的核心定位

工具定位主要功能
Docker容器化平台构建、运行和管理容器镜像
Kubernetes (k8s)容器编排系统管理大规模容器集群的部署、调度、扩缩容等
JenkinsCI/CD 工具实现代码自动构建、测试、部署流水线

二、区别详解

1. Docker:容器构建与运行

  • 作用:将应用及其依赖打包成一个标准化的容器镜像,并在任何支持 Docker 的环境中运行。
  • 典型使用场景
    • 开发环境本地运行微服务
    • 打包应用为镜像供其他系统使用
    • 快速启动、停止、复制容器

2. Kubernetes:容器编排与集群管理

  • 作用:管理多个 Docker 容器在多台主机上的部署、调度、伸缩、服务发现等。
  • 典型使用场景
    • 微服务架构下的服务部署
    • 高可用、弹性伸缩的应用管理
    • 多租户资源隔离与调度

3. Jenkins:自动化构建与部署流水线

  • 作用:监听代码变更,触发构建、测试、打包、部署流程,实现 DevOps 中的自动化操作。
  • 典型使用场景
    • 每次 Git 提交后自动构建项目
    • 自动执行单元测试、集成测试
    • 自动推送镜像到仓库并通知 Kubernetes 部署

三、联系与协作流程

这三个工具可以组成一个完整的 CI/CD + 容器化部署体系,典型的协作流程如下:

Git Commit → Jenkins 触发构建 → Maven/Gradle 编译 → Docker 构建镜像 → 推送至镜像仓库↓
Jenkins 调用 Kubernetes API 或 Helm 命令 → Kubernetes 拉取镜像并部署新版本

示例流程说明:

  1. 开发者提交代码到 Git
  2. Jenkins 监听到提交事件,触发 Pipeline
    • 下载代码、编译、打包成 jar/war/docker 镜像
  3. Jenkins 将镜像推送到私有仓库(如 Harbor)
  4. Jenkins 调用 Kubernetes 的命令或更新 Helm Chart
  5. Kubernetes 拉取新镜像并滚动更新服务

四、类比理解

类比描述
Docker = 集装箱把货物(应用)打包进集装箱(容器),便于运输
Kubernetes = 港口调度中心负责调度集装箱、安排码头、物流路线
Jenkins = 物流管理系统自动安排何时发货、走哪条路线、是否需要质检

五、常见组合方式

场景使用方式
本地开发调试Docker + Docker Compose
单机部署Docker + Shell 脚本
小型团队部署Jenkins + Docker
企业级部署Jenkins + Docker + Kubernetes
云厂商部署Jenkins + Helm + K8s + Harbor

六、总结对比表

功能DockerKubernetesJenkins
容器构建
容器运行✅(底层调用 Docker)
容器编排
自动化构建
CI/CD 支持
服务部署✅(配合使用)

七、实际应用场景示例

以 Spring Boot 微服务为例:

  1. 开发人员编写代码并提交到 GitLab
  2. Jenkins Pipeline 启动构建任务
    • 使用 Maven 编译项目
    • 使用 Dockerfile 构建镜像并推送到 Harbor
  3. Jenkins 调用 Kubernetes 更新 Deployment
    • 修改镜像版本号
    • Kubernetes 滚动更新 Pod
  4. 服务自动上线,完成部署

八、结语

  • Docker 是基础:负责容器化;
  • Kubernetes 是中枢:负责容器编排与集群管理;
  • Jenkins 是引擎:驱动整个 CI/CD 流水线;
  • 三者结合:构成了现代云原生应用的标准技术栈,适用于从开发到生产的一体化交付流程。
http://www.xdnf.cn/news/15597.html

相关文章:

  • 深入理解 SemaphoreSlim 在.NET Core API 开发中的应用
  • Spring Boot整合阿里云OSS:企业级文件存储最佳实践
  • 贪心算法思想草稿
  • Spring AI之Prompt开发
  • Perspective:一款开源的交互式分析和数据可视化组件
  • 找不到或无法加载主类 org.gradle.wrapper.GradleWrapperMain
  • Maven详细解
  • 网络基础11 上公网--Internet接入技术
  • Python eval函数详解 - 用法、风险与安全替代方案
  • NLP——迁移学习
  • SQLite的可视化界面软件的安装
  • 【后端】.NET Core API框架搭建(8) --配置使用RabbitMQ
  • Kotlin属性重写
  • C++ AVL树实现详解:平衡二叉搜索树的原理与代码实现
  • 深度学习之神经网络(二)
  • cell2location复现
  • Clip微调系列:《CLIP-Adapter: Better Vision-Language Models with FeatureAdapters》
  • 深度学习中的注意力机制:原理、应用与实践
  • STM32-RTC内部时钟
  • 力扣 hot100 Day46
  • LVS集群实践
  • 前后端分离项目中的接口设计与调用流程——以高仙机器人集成为例
  • 数字ic后端设计从入门到精通11(含fusion compiler, tcl教学)全定制设计入门
  • 基于深度学习的情感分析模型:从文本数据到模型部署
  • c语言-数据结构-二叉树的遍历
  • [特殊字符] 第1篇:什么是SQL?数据库是啥?我能吃吗?
  • [特殊字符] Electron 中的 `global` 变量
  • 用Amazon Q Developer助力Python快捷软件开发
  • 创建SprngBoot项目的四种方式
  • 网络编程(数据库)