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

[Docker/K8S]Docker与K8S的区别

时间:2023-06-07 14:13:03浏览次数:45  
标签:容器 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 参考文献

标签:容器,k8s,区别,部署,虚拟机,应用程序,Docker,K8S
From: https://www.cnblogs.com/johnnyzen/p/17463114.html

相关文章

  • 关于input( )和sys.stdin.readline( )的区别
    sys.stdin.readline()会将标准输入全部获取,包括末尾的'\n',input()会把‘\n’忽略sys.stdin.readline().strip() 去掉末尾的换行符, importsysa=sys.stdin.readline().strip()b=input()print(a,type(a))print(b,type(b))#678<class'str'>#678<clas......
  • SX1262 与 SX1278、SX1276 有什么区别?
    通常的物联网解决方案和设备一直都非常昂贵,或在实施中不切合实际。理想的无线连接技术应该是低成本、高可靠性的,可进行长距离传输,且拥有超长的电池续航时间。像zigbee、Bluetooth和Wi-Fi这样的短距离技术不能满足这些要求,蜂窝移动网络虽然支持更长的距离,但电池续航时间太短。为了......
  • C#中委托和事件的区别
    大致来说,委托是一个类,该类内部维护着一个字段,指向一个方法。事件可以被看作一个委托类型的变量,通过事件注册、取消多个委托或方法。本篇分别通过委托和事件执行多个方法,从中体会两者的区别。 □通过委托执行方法classProgram{staticvoidMain(string[]args){Exampleexample=......
  • 渗透测试、漏洞扫描、代码审计指什么?三者有何区别?
    在网络安全体系中,渗透测试、漏洞扫描、代码审计都是非常重要的存在,属于三种不同的安全评估类型,那么渗透测试、漏洞扫描、代码审计三者区别是什么?本文为大家简单介绍一下。漏洞扫描是指基于漏洞数据库,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,发......
  • 探讨B/S与C/S架构的区别
    前言这几天听课,听到关于B/S架构和C/S架构的东西,颇有感触。边查阅资料边写了这篇随笔。C/S架构C/S架构是比较早期出现的一种系统设计架构。曾经出现过两层C/S和三层C/S架构。我们一般常见的以两层C/S架构为主。我们大家在使用计算机软件过程中基本上一定会遇见C/S架构,例如我们玩......
  • DockerFile编写以及指令
    DockerFile编写以及指令什么是Dockerfile?(重点是构建镜像)Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和命令使用Dockerfile定制镜像这里仅讲解如何运行Dockerfile文件来定制一个镜像,具体Dockerfile文件内指令详解,将在下一节中介绍,......
  • Dockerfile指令说明简洁版
    Dockerfile指令说明简洁版FROM构建镜像基于哪个镜像MAINTAINER镜像维护者姓名或邮箱地址RUN构建镜像时运行的指令CMD运行容器时执行的shell环境VOLUME指定容器挂载点到宿主机自动生成的目录或其他容器USER为RUN、CMD、和ENTRYPOINT执行命令指定运行用户......
  • 一文理清排序算法中的直接插入、快排和希尔排序的区别
    前言在上一篇文章中,给大家介绍了冒泡排序和选择排序,这两种算法都是排序算法。实际上排序算法还有插入、希尔、快速排序等,接下来我们就来学习一下这几种排序算法。全文大约【5400】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图视频,让你更好地理......
  • docker 部署db2
    拉取镜像dockerpullibmcom/db2:11.5.8.0启动db2dockerrun-d-p50000:50000--namedb2--privileged=true-eDB2INSTANCE=test-eDB2INST1_PASSWORD=123456-eDBNAME=testdb-eLICENSE=acceptibmcom/db2:11.5.8.0dockerrun-d在后台启动容器-p50000:50000......
  • docker镜像使用
    可以去https://github.com搜索dockerfileMySQL默认会在3306端口启动数据库。$sudodockerrun--namesome-mysql-eMYSQL_ROOT_PASSWORD=mysecretpassword-dmysql之后就可以使用其它应用来连接到该容器。$sudodocke......