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

(转)Docker与K8S的区别

1 定义角度

  • Docker是一种开放源码的应用容器引擎,允许开发人员将其应用依赖包打包成可移植的容器/镜像中;然后,发布到任何流行的 Linux 或 Windows 机器上,也能实现虚拟化。该容器完全使用沙箱机制,彼此之间没有任何接口。

  • k8s,全称 kubernetes,是一种开放源码的容器集群管理系统,能够实现自动化部署自动化扩缩容器集群维护等功能;同时提供完善的管理工具,涵盖了开发、部署、测试、运行监控等各个环节。

2 虚拟化角度

虚拟化技术的发展过程

虚拟化技术已经走过了三个时代(物理机时代-->虚拟机时代-->容器化时代),没有容器化技术的演进就不会有 Docker 技术的诞生。

物理机时代:多个应用程序可能会跑在一台机器上

虚拟机时代:一台物理机器安装多个虚拟机(VM),一个虚拟机跑多个程序。

容器化时代:一台物理机安装多个容器实例(container),一个容器跑多个程序。

开发人员编写代码,在自己本地环境测试完成后,将代码部署到测试或生产环境中,经常会遇到各种各样的问题。明明本地完美运行的代码为什么部署后出现很多 bug,原因有很多:不同的操作系统、不同的依赖库等,总结一句话就是因为本地环境和远程环境不一致。

容器化技术正好解决了这一关键问题,它将软件程序和运行的基础环境分开。开发人员编码完成后将程序打包到一个容器镜像中,镜像中详细列出了所依赖的环境,在不同的容器中运行标准化的镜像,从根本上解决了环境不一致的问题。

虽然容器概念已经出现不短的时间,但 2013 年推出的开源项目 Docker 在很大程度上帮助推广了容器这项技术,并推动了软件开发中容器化和微服务的趋势,这种趋势后来被称为云原生开发

Virtual Machines VS. Docker

上图是Docker容器(可用k8s管理的玩意儿)与传统虚拟化方式的不同之处:

  • 传统的虚拟化技术,在将物理硬件虚拟成多套硬件后,需要再每套硬件上都部署一个操作系统,接着在这些操作系统上运行相应的应用程序。
  • Docker容器,容器内的应用程序进程直接运行在宿主机(真实物理机)的内核上,Docker引擎将一些各自独立的应用程序和它们各自的依赖打包,相互独立直接运行于未经虚拟化的宿主机硬件上,同时各个容器也没有自己的内核,显然比传统虚拟机更轻便。
  • 每个集群有多个节点,每个节点可以部署多个Docker容器(container)

我们的kuberbete就是管理这些应用程序所在的小运行环境container)而生。

3 部署角度

注意,大家别把这幅图与上面Docker的那张图混淆了

  • 图1是从虚拟化角度,说明了为应用提供必要的运行环境所需要做的虚拟化操作。即:
  • 传统 :虚拟出的虚拟机装操作系统
  • Docker :容器引擎管理下的容器
  • 图2是在这些具体运行环境上进行真实应用部署时的情况
  • 传统方式是将所有应用直接部署在同一个物理机器节点上,这样每个App的依赖都是完全相同的,但无法做到App之间隔离。

当然,为了隔离,我们也可以通过创建虚拟机的方式来将App部署到其中(就像图1上半部分那样),但这样太过繁重,故比虚拟机更轻便的Docker技术出现。

  • Docker 容器化技术

现在我们通过部署Container容器的技术来部署应用,全部Container运行在容器引擎上即可。
既然嫌弃虚拟机繁重,想用Docker,那好,你用吧,怎么用呢?手动一个一个创建?

  • K8S容器集群管理技术

当然不,故kubernetes技术便出现了,以kubernetes为代表的容器集群管理系统,这时候就该上场表演了。
说白了,我们用kubernetes去管理Docker集群,即可以将Docker看成Kubernetes内部使用的低级别组件。
另外,kubernetes不仅仅支持Docker;还支持Rocket,这是另一种容器技术。

4 其他角度

4.1 系统角度

从系统角度来看:

  • docker是一种单机容器技术,在单独的主机上运行。

小型应用程序部署的话直接使用docker或者docker-compose编排就可以了。

  • k8s是一种分布式集群系统,可以在多个主机上面协调和管理容器。

如果是大型的应用的话,使用k8s多机部署编排则更合适

4.2 功能角度

从功能上来看的话

  • docker提供对容器的创建、启动、停止和删除等。
  • k8s则提供丰富的容器编排和管理,比如自动扩容,负载均衡、服务发现和滚动更新等。

4.3 各自优势

  • Docker的优势:容器技术
  • 隔离性:Docker容器是相互隔离的,每个容器运行着自己的进程、文件系统和网络接口,从而保证了应用程序容器之间的独立性和安全性。
  • 可移植性:Docker容器可以在任何地方运行,无需修改,从而实现了在不同的环境中快速分发、部署和移植应用。
  • 简洁性:Docker容器中仅包含所需的组件和软件包,不像虚拟机需要运行整个操作系统,因此具有更小的存储和内存开销。
  • 可重复性:Docker容器的构建和部署过程可以自动化,从而保证了应用程序的可重复性和一致性。
  • Kubernetes的优势:容器编排技术
  • 可扩展性:Kubernetes可以快速伸缩应用程序,从而应对不同的流量和负载变化,提高生产效率和灵活度。
  • 健壮性:Kubernetes可以自动进行容器的部署、扩展、更新和滚动回滚,从而使线上应用具有更高的可用性和健壮性。
  • 自适应性:Kubernetes可以根据资源需求自动部署、迁移和删除容器,从而实现了应用程序的自适应性,避免了资源浪费和性能瓶颈。
  • 可观察性:Kubernetes提供了丰富的监控和日志记录功能,可以对应用程序和容器进行细粒度的监控和调试。

X 参考文献

  • 面试官:请你说说k8s 和 Docker的区别? - CSDN
  • Docker和k8s的区别与介绍 - 博客园
  • K8S 弃用 Docker 了?Docker 不能用了?别逗了! - Zhihu
  • 三年Java开发转运维----面试官问我:docker和k8s有什么区别,我应该怎么回答? - Zhihu
  • 一文带你认识「Docker」与「k8s」 - juejin

本文链接: [Docker/K8S] Docker与K8S的区别 - 千千寰宇 - 博客园 

http://www.lryc.cn/news/2387322.html

相关文章:

  • 服务器数据迁移
  • VB.NET与SQL连接问题解决方案
  • 商用密码 vs 普通密码:安全加密的核心区别
  • MYSQL中的分库分表及产生的分布式问题
  • 拥塞控制算法cubic 和bbr
  • 投影机三色光源和单色光源实拍对比:一场视觉体验的终极较量
  • 电子电气架构 --- 下一代汽车电子电气架构中的连接性
  • 解析极限编程-拥抱变化(第2版)笔记
  • 手写Tomcat(一)
  • 【机器学习基础】机器学习入门核心算法:支持向量机(SVM)
  • 定时清理流媒体服务器录像自动化bash脚本
  • Logi鼠标切换桌面失效
  • Go语言之匿名字段与组合 -《Go语言实战指南》
  • Linux 进阶命令篇
  • OpenCV CUDA模块图像处理------颜色空间处理之拜耳模式去马赛克函数demosaicing()
  • 2025年全国青少年信息素养大赛复赛C++集训(15):因子问题(题目及解析)
  • 如何通过仿真软件优化丝杆升降机设计
  • Vue3进阶教程:1.初次了解vue
  • WordPress免费网站模板下载
  • 【深度学习新浪潮】以图搜地点是如何实现的?(含大模型方案)
  • element的el-table翻页选中功能
  • Python打卡训练营学习记录Day38
  • deepseek开源资料汇总
  • CollUtil详解
  • Elasticsearch的运维
  • Linux编辑器——vim的使用
  • 线性回归原理推导与应用(八):逻辑回归二分类乳腺癌数据分类
  • Jenkins分配对应项目权限与用户管理
  • Mate桌面环境系统与终端模拟器参数配置
  • fabric 是一个开源框架,用于使用 AI 增强人类能力。它提供了一个模块化框架,用于使用一组可在任何地方使用的众包人工智能提示来解决特定问题