[Docker/K8S]Docker与K8S的区别
Posted 千千寰宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Docker/K8S]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 参考文献

本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
什么是K-S检验
Kolmogorov-Smirnov是比较一个频率分布f(x)与理论分布g(x)或者两个观测值分布的检验方法。其原假设H0:两个数据分布一致或者数据符合理论分布。D=max| f(x)- g(x)|,当实际观测值D>D(n,α)则拒绝H0,否则则接受H0假设。KS检验与t-检验之类的其他方法不同是KS检验不需要知道数据的分布情况,可以算是一种非参数检验方法。当然这样方便的代价就是当检验的数据分布符合特定的分布事,KS检验的灵敏度没有相应的检验来的高。在样本量比较小的时候,KS检验作为非参数检验在分析两组数据之间是否不同时相当常用。假定两个样本的样本量分别为n1和n2,用F1(X)和F2(X)分别表示两个样本的累积经验分布函数。再记Dj=F1(Xj)-F2(Xj)。检验统计量近似正态分布,表达式为:Z=max| Dj |根号下(n1n2/(n1+n2))
方法步骤是:
(1)令f(x)为假设所特定的理论累积分布函数;
(2)令sn(x)为n个观察值的样本累积函数。对每一个观察值x,sn(x)=k/n,k是小于或等于x的观察例数;
(3)确定最大距离D,定义为:
D=max|f(x)-sn(x)|
检验假设H0: f(x)=sn(x)
备择假设H1:
(4)对于选定的显著水平,如果D值等于或大于附表的临界值,则拒绝原假设 参考技术A K-S检验是统计学中在对一组数据进行统计分析是所用到的一种方法。它是将需要做统计分析的数据和另一组标准数据进行对比,求得它和标准数据之间的偏差的方法。一般在K-S检验中,先计算需要做比较的两组观察数据的累积分布函数,然后求这两个累积分布函数的差的绝对值中的最大值D。最后通过查表以确定D值是否落在所要求对应的置信区间内。若D值落在了对应的置信区间内,说明被检测的数据满足要求。反之亦然。本回答被提问者采纳
以上是关于[Docker/K8S]Docker与K8S的区别的主要内容,如果未能解决你的问题,请参考以下文章
手把手搭建jenkins + docker + k8s 持续集成、自动化发布环境
项目环境搭建Docker+k8s四 || 部署Docker环境
容器技术Docker K8s 27 容器服务ACK基础与进阶-监控管理
容器技术Docker K8s 20 容器服务ACK基础与进阶-存储管理