首页 > 其他分享 >Docker与K8S的区别

Docker与K8S的区别

时间:2024-12-30 15:53:34浏览次数:1  
标签:容器 虚拟化 区别 部署 虚拟机 应用程序 Docker K8S

目录

 

回到顶部(Back to Top)

1 定义角度

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

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

回到顶部(Back to Top)

2 虚拟化角度

虚拟化技术的发展过程

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

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

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

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

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

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

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

Virtual Machines VS. Docker

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

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

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

回到顶部(Back to Top)

3 部署角度

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

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

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

  • Docker 容器化技术

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

  • K8S容器集群管理技术

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

回到顶部(Back to Top)

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提供了丰富的监控和日志记录功能,可以对应用程序和容器进行细粒度的监控和调试。
回到顶部(Back to Top)

X 参考文献

         

标签:容器,虚拟化,区别,部署,虚拟机,应用程序,Docker,K8S
From: https://www.cnblogs.com/lhxsoft/p/18641412

相关文章

  • 块级迁移和文件级迁移的区别
    本文分享自天翼云开发者社区《块级迁移和文件级迁移的区别》,作者:张****强块级迁移和文件级迁移的区别1.迁移对象不同块级迁移是以存储设备中的数据块(Block)为单位进行迁移,每个块的大小通常是几十KB或几百KB。块级迁移通常是在底层的存储系统上进行的,例如硬盘或存储阵列等。块级......
  • TypeScript 中的 interface 和 type 有何区别?
    在TypeScript中,interface和type都可以用于定义类型,尤其是对于对象、函数、数组等复杂类型的定义。它们的用法和功能有一些重叠,但也有各自的特点和优势。理解这些差异对于编写更清晰、更有效的TypeScript代码至关重要。1.基本定义interfaceinterface用于定义一个对象......
  • this.$router.push路径带不带/的区别
    绝对路径(带斜杠)当路径以斜杠/开头时,它被视为绝对路径。这意味着无论当前的路由位置在哪里,新路径都将从应用程序的根路径开始解析。示例:this.$router.push('/formDesinger');行为:不论当前页面的位置如何,都会导航到/formDesinger。适用场景:当你想要确保......
  • cpp的序列容器极其区别
    上一篇文章cpp的STL之vector介绍了cpp里的vector包。除了vector容器之外,cpp的序列容器还有deque和list,这里主要介绍他们的区别。deque双端队列不同于vector容器,deque支持双向存取。因此,deque容器多了push_front和pop_front两个函数,分别表示在队列的头部插入一个数据和删......
  • linux软链接和硬链接区别
    在Linux中,软链接(SymbolicLink)和硬链接(HardLink)是两种文件链接方式,主要区别在于它们的实现方式和行为。以下是详细的比较:1.定义软链接(符号链接):类似于Windows的快捷方式。是一个指向目标文件路径的特殊文件。删除目标文件后,软链接会变成无效链接(“断链”)。硬......
  • DAPP(去中心化应用程序)开发与 APP(应用程序)开发存在多方面区别
    #DAPP#APP#去中心化应用#web3#Dapp架构架构与技术基础APP:通常基于客户端-服务器架构,数据存储和业务逻辑主要依赖中心化服务器。例如,常见的社交APP微信,用户数据存储在腾讯的服务器上,服务器统一处理用户的登录、消息收发等业务逻辑。开发技术栈成熟,前端开发针对......
  • Docker镜像优化 (转)
    Docker镜像优化 1、概述Docker作为一款广受欢迎的容器化技术,为开发者提供了极大的便利。它能够将应用程序以及其全部的依赖项整合并打包,形成一个标准化的独立单元——镜像。对Docker镜像进行优化意义非凡,一方面可以显著降低镜像的存储空间占用,进而大幅提升其......
  • Docker compose安装
    1.通过以下命令自动下载并安装适应系统版本的Compose:到:https://github.com/docker/compose/releases/查找最新版release,替换路径的1.10.0curl-L"https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/......
  • 公网全双工对讲机与普通公网对讲机的区别
    对讲机作为传统的通讯工具,经常被大家用到工作、生产中,对讲机也大致分为模拟对讲、数字对讲、公网对讲三类。模拟和数字对讲都是基于无线电频点进行自组网通话,差异是数字信号的对讲安全性更高,语音经过编码解码,不易串频,而公网对讲依托运营商物联网卡,利用公网(如4G/5G网络)进行语音......
  • 在js中undefined和undeclared有什么区别?
    在JavaScript中,undefined和undeclared(未声明)之间的主要区别体现在它们如何与变量作用域和变量生命周期进行交互。undefined:当你声明了一个变量,但没有给它赋值时,这个变量的值就是undefined。你可以显式地将一个变量的值设置为undefined。undefined是一个JavaScript的全局对......