从Docker到Kubernetes的深度研究与分析
启迪云 | 贾娜玲
❖ Docker简介
什么是Docker ?
Docker是开发,运行和部署应用程序的开放管理平台。
• 开发人员能利用docker 开发和运行应用程序
• 运维人员能利用docker 部署和管理应用程序
• Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker平台介绍(The Docker platform)
1、Docker提供了在一个完全隔离的环境中打包和运行应用程序的能力,这个隔离的环境被称为容器。
2、由于容器的隔离性和安全性,因此可以在一个主机(宿主机)上同时运行多个相互隔离的容器,互不干预。
3、Docker已经提供工具和组件(Docker Client、Docker Daemon等)来管理
容器的生命周期:
• 使用容器来开发应用程序及其支持组件。
• 容器成为分发和测试你的应用程序的单元。
• 准备好后,将您的应用程序部署到生产环境中,作为容器或协调服务。无论您的生产环境是本地数据中心,云提供商还是两者的混合,这都是一样的。
为什么使用Docker
• Docker使您能够将应用程序与基础架构分开,以便您可以快速交付软件。
• 借助Docker,您可以像管理应用程序一样管理基础架构。
• 通过利用Docker的方法快速进行运输,测试和部署代码,您可以显着缩短编写代码和在生产环境中运行代码之间的延迟。
如:
• 开发人员在本地编写代码,可以使用Docker同事进行共享,实现协同工作。
• 使用Docker开发完成程序,可以直接对应用程序执行自动和手动测试。
• 当开发人员发现错误或BUG时,可以直接在开发环境中修复后,并迅速将它们重新部署到测试环境进行测试和验证。
• 利用Docker开发完成后,交付时,直接交付Docker,也就意味着交付完成。后续如果有提供修补程序或更新,需要推送到生成环境运行起来,也是一样的简单。
Docker主要解决的问题
• 保证程序运行环境的一致性;
• 降低配置开发环境、生产环境的复杂度和成本;
• 实现程序的快速部署和分发。
❖ Docker整体结构了解
Docker引擎介绍(Docker Engine)
• Docker Engine是一个包含以下组件的客户端-服务端(C/S)应用程序
• 服务端--- 一个长时间运行的守护进程(Docker Daemon)
• REST API --- 一套用于与Docker Daemon通信并指示其执行操作的接口
• 客户端--- 命令行接口CLI( Command Line Interface)
• CLI利用Docker命令通过REST API直接操控Docker Daemon执行操作
• Docker Daemon负责创建并管理Docker的对象(镜像、容器、网络、数据卷)
Docker结构概览图
Docker结构简介:
Docker客户端(Docker Client)
• Docker客户端(Docker Client)是用户与Docker进行交互的最主要方式。当在终端输入docker命令时,对应的就会在服务端产生对应的作用,并把结果返回给客户端。Docker Client除了连接本地服务端,通过更改或指定DOCKER_HOST连接远程服务端。
Docker服务端(Docker Server)
• Docker Daemon其实就是Docker 的服务端。它负责监听Docker API请求(如Docker Client)并管理Docker对象(Docker Objects),如镜像、容器、网络、数据卷等
Docker Registries
• 俗称Docker仓库,专门用于存储镜像的云服务环境.
• Docker Hub就是一个公有的存放镜像的地方,类似Github存储代码文件。同样的也可以类似Github那样搭建私有的仓库。
Docker 对象(Docker Objects)
• 镜像:一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。
• 容器:镜像被运行起来后的实例。
• 网络:外部或者容器间如何互相访问的网络方式,如host模式、bridge模式。
• 数据卷:容器与宿主机之间、容器与容器之间共享存储方式,类似虚拟机与主机之间的共享文件目录。
❖ Docker底层技术了解
Docker底层使用的技术介绍:
Docker使用Go语言实现。
Docker利用linux内核的几个特性来实现功能:
• 利用linux的命名空间(Namespaces)
• 利用linux控制组(Control Groups)
• 利用linux的联合文件系统(Union File Systems)
这也就意味着Docker只能在linux上运行。
在windows、MacOS上运行Docker,其实本质上是借助了虚拟化技术,然后在linux虚拟机上运行的Docker程序。
容器格式(Container Format ):
• Docker Engine将namespace、cgroups、UnionFS进行组合后的一个package,就是一个容器格式(Container Format)。Docker通过对这个package中的namespace、cgroups、UnionFS进行管理控制实现容器的创建和生命周期管理。
• 容器格式(Container Format)有多种,其中Docker目前使用的容器格式被称为libcontainer
Namespaces(命名空间):为Docker容器提供操作系统层面的隔离
• 进程号隔离:每一个容器内运行的第一个进程,进程号总是从1开始起算
• 网络隔离:容器的网络与宿主机或其他容器的网络是隔离的、分开的,也就是相当于两个网络
• 进程间通隔离:容器中的进程与宿主机或其他容器中的进程是互相不可见的,通信需要借助网络
• 文件系统挂载隔离: 容器拥有自己单独的工作目录
• 内核以及系统版本号隔离:容器查看内核版本号或者系统版本号时,查看的是容器的,而非宿主机的
Control Groups(控制组-cgroups):为Docker容器提供硬件层面的隔离
• 控制组能控制应用程序所使用的硬件资源。
• 基于该性质,控制组帮助docker引擎将硬件资源共享给容器使用,并且加以约束和限制。如控制容器所使用的内存大小。
• Union File Systems(联合文件系统--UnionFS):利用分层(layer)思想管理镜像和容器 ❖ 镜像
• 镜像是一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。
• 通过镜像可以创建一个或多个容器。
❖ 容器
容器(Container):容器是一种轻量级、可移植、并将应用程序进行的打包的技术,使应用程序可以在几乎任何地方以相同的方式运行
• Docker将镜像文件运行起来后,产生的对象就是容器。容器相当于是镜像运行起来的一个实例。
• 容器具备一定的生命周期。
• 另外,可以借助docker ps命令查看运行的容器,如同在linux上利用ps命令查看运行着的进程那样。
❖ Docker容器与镜像
Docker容器与镜像的关系:
❖ Docker仓库
Docker仓库就是存放docker镜像并有docker pull方法下载的云环境
• Docker仓库分为公有仓库和私有仓库。
• 公有仓库指Docker Hub(官方)等开放给用户使用、允许用户管理镜像。
• 私有仓库指由用户自行搭建的存放镜像的云环境。
❖ Docker容器与虚拟机相同点
容器和虚拟机一样,都会对物理硬件资源进行共享使用。
• 容器和虚拟机的生命周期比较相似(创建、运行、暂停、关闭等等)。
• 容器中或虚拟机中都可以安装各种应用,如redis、mysql、nginx等。也就是说,在容器中的操作,如同在一个虚拟机(操作系统)中操作一样。
• 同虚拟机一样,容器创建后,会存储在宿主机上:linux上位于/var/lib/docker/containers下 ❖ Docker容器与虚拟机不同点
注意:容器并不是虚拟机,但它们有很多相似的地方
• 虚拟机的创建、启动和关闭都是基于一个完整的操作系统。一个虚拟机就是一个完整的操作系统。而容器直接运行在宿主机的内核上,其本质上以一系列进程的结合。
• 容器是轻量级的,虚拟机是重量级的。首先容器不需要额外的资源来管理(不需要Hypervisor、Guest OS),虚拟机额外更多的性能消耗;其次创建、启动或关闭容器,如同创建、启动或者关闭进程那么轻松,而创建、启动、关闭一个操作系统就没那么方便了。
• 也因此,意味着在给定的硬件上能运行更多数量的容器,甚至可以直接把Docker运行在虚拟机上。
好了,简单介绍完Docker,我们再把目光转向K8S:
❖ Kubernetes简介
就在Docker容器技术被炒得热火朝天之时,大家发现,如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。
Kubernetes 是一个自动化部署、伸缩和操作应用程序容器的开源平台。
使用Kubernetes,你可以快速、高效地满足用户以下的需求:
• 快速精准地部署应用程序
• 即时伸缩你的应用程序
• 无缝展现新特征
• 限制硬件用量仅为所需资源
我们的目标是培育一个工具和组件的生态系统,以减缓在公有云或私有云中运行的程序的压力。
Kubernetes 的优势
• 可移动: 公有云、私有云、混合云、多态云
• 可扩展: 模块化、插件化、可挂载、可组合
• 自修复: 自动部署、自动重启、自动复制、自动伸缩 ❖ 为什么需要Kubernetes?
Kubernetes 能在实体机或虚拟机集群上调度和运行程序容器。而且,Kubernetes 也能让开发者斩断联系着实体机或虚拟机的"锁链",从以主机为中心的架构跃至以容器为中心的架构。该架构最终提供给开发者诸多内在的优势和便利。Kubernetes 提供给基础架构以真正的以容器为中心的开发环境。 ❖ Kubernetes是一个什么样的平台
虽然Kubernetes 提供了非常多的功能,总会有更多受益于新特性的新场景出现。针对特定应用的工作流程,能被流水线化以加速开发速度。特别的编排起初是可接受的,这往往需要拥有健壮的大规模自动化机制。这也是为什么Kubernetes 也被设计为一个构建组件和工具的生态系统的平台,使其更容易地部署、缩放、管理应用程序。 ❖ Kubernetes架构
一个K8S系统,通常称为一个K8S集群(Cluster)。
这个集群主要包括两个部分:一个Master节点(主节点)一群Node节点(计算节点)
Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。
深入来看这两种节点。
首先是Master节点。
Master节点包括API Server、Scheduler、Controller manager、etcd。
- API Server是整个系统的对外接口,供客户端和其它组件调用,相当"营业厅"。
- Scheduler负责对集群内部的资源进行调度,相当于"调度室"。
- Controller manager负责管理控制器,相当于"大总管"。
Node节点:
1、Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod。
2、Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。
3、K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。
4、Docker,创建容器。
5、Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。
6、Kube-proxy,主要负责为Pod对象提供代理。
❖ K8S的全生命周期管理
在k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。
在k8s里面,集群调度的最小单元就是一个pod,一个pod可以是一个容器,也可以是多个容器,例如你运行一个程序,其中使用了nginx,使用mysql了,使用了jetty,那么可以将这三个使用在同一个pod中,对他们提供统一的调配能力,一个pod只能运行在一个主机上,而一个主机上可以有多个pod。
总结:
云计算、大数据,移动技术的快速发展,加之企业业务需求的不断变化,导致企业架构要随时更改以适合业务需求,跟上技术更新的步伐。毫无疑问,这些重担都将压在企业开发人员身上;团队之间如何高效协调,快速交付产品,快速部署应用,以及满足企业业务需求,是开发人员亟需解决的问题。Docker技术恰好可以帮助开发人员解决这些问题。
而k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。
微信支付怎么变成服务了?有个朋友问我,为毛微信支付改成了服务,是不哪里搞错了?说早上点早餐找了半天没找的付款入口,还发我截屏给我看,我也对比了下自己的。我自己的没变,老样子,还是支付。我朋友手机微信截屏我
性骚扰丑闻促成4000亿元交易?微软收购动视暴雪始末科蒂克卷入性骚扰丑闻凤凰网科技讯北京时间1月19日消息,微软公司昨晚突然宣布豪掷687亿美元(约合4365亿元)收购游戏巨头动视暴雪。在此之前,这笔爆炸性交易没有走漏一点风声,它是
字节跳动布局房地产近日,天眼查App说明,北京福旺房地产经纪有限公司发生工商变更,新增字节跳动关联公司北京好房有幸信息技术有限公司为股东,持股比例100。公司的原股东退出,法定代表人也由吴存胜变更为
短信验证码的安全隐患在当下这个年代,几乎是人人都在用手机,只要在用手机,就没有不知道短信验证码的。随着手机更新换代的速度变快,各大APP也随之诞生。一般要使用APP,都需要进行登录认证,最常见的就是将
三星4纳米工艺Exynos2200移动处理器发布,ARMv9AMD架构三星发布了5G移动SOC芯片三星Exynos2200处理器,这款芯片功能强大采用ARMv9架构,与AMD长期合作,这款芯片包含了AMDRDNA2图形架构的GPU功能芯片,支持硬件加
深度体验丨iQOO9Pro距离全能旗舰只有一步之遥?iQOO数字旗舰自诞生之日起,便拥有了性能怪兽的江湖称号!历经数代更新,也开始寻求新的突破和蜕变那就是全面的硬件升级融合更智能的系统!所以,当iQOO9Pro出现在我手中时,我对它
软件产品商标注册有没有必要?应该注册哪几类APP注册关键类主要分为9类35类38类和42类,很多人由于注册了这几个关键类商标就歹意攻击不在此类别的商标的APP,也有人由于没有注册到这几类商标而堕入担忧,这都是不正确的。ap
18G512G现货充足,6000mAh坐镇,就是价格稍微贵了些ROG作为全球知名的高端主板品牌,旗下产品,无论是电脑配件还是手机,都是以性能为优先级,想要体验超频的快乐和极致的流畅度,ROG游戏手机无疑是最好的选择,ROG游戏手机5s也是目前
江苏银行布局金融元宇宙近日,江苏银行基于对互联网金融发展和数字化金融底层逻辑的研判,结合自身优势,开始积极布局金融元宇宙,为客户提供更加优质的金融服务体验。元宇宙是指利用科技手段进行链接与创造的,与现实
NFT与元宇宙,价值还是陷阱新年伊始,NFT的热度有增无减。国内外明星艺术家互联网大厂纷纷入局,NFT,一时成为了投资(投机)领域的显贵。毫无疑问,NFT使艺术品的价值实现更加便利。通过NFT,把现实世界的资
在世界手机舞台上,传音控股打造来自中国的标杆企业手机行业经历飞速变革和发展,衍生出一批中国科技公司,它们在全球形成了巨大的品牌优势。据市场分析机构DIGITIMESResearch数据显示,2021年下半年,手机全球销量排名从高