技术三观之老黄谈物理机、虚拟机以及Docker

高效集装箱码头

12月底也是2018年的最后一天,从九月初到机关楼截止到现在,自己真正学的东西也没多少,这正应了一句话,人是容易迷失的动物,身处恶劣的环境会反思,会懊悔,会发誓如果再给自己一次机会一定要好好做人,但真正当上天把好的环境无私地送给你的时候,你又是否能够如之前所说坚守约定,为理想,信仰奋斗到底呢?成功的人,是能够在危亡之际展露惊人勇气的人,是经得起时间,困境考验而始终如一的人。

物理机与虚拟机的渊源

所谓物理机就是一台可以看得到摸得着的机器(个人PC一样是物理机),可以简单的认为就是一台电脑主机。虚拟机顾名思义是借组一种工具虚拟出来的机器,它是不存在的,所以你看不到也摸不着。但是当你使用它的时候,体验却和在使用一台真实物理机一模一样。“石器时代”,我们在部署一个计算机应用的时候,往往会将多个应用部署到一台物理机上,例如JavaWeb应用,我们会将无数的WebApp打包发布到Tomcat的webapps文件中,然后启动软件应用,服务开启。这种部署方式所暴露的最大问题就是应用集中部署,没有隔离,一旦某个应用由于误操作或者其他原因导致服务器崩溃,那么所有应用便不能正常使用,这就是我在之前的博客中提到的老黄概念之一“病态串联”,集中化管理有好处“但牵一发而动全身”,两军交战本应该是利益核心方的冲突,却苦了无辜的黎明百姓,“城门失火,殃及池鱼”,他搞坏了服务器,你就得和他一样不能运行。问题与解决问题往往是并存的,为了不让服务器崩掉,项目经理就想办法了,既然放在一台服务器上机器“受不了”,我们一共有十个应用,那搞他十个服务器不就行了。一旁的技术青年小张正是操营的徐庶,笑而不语。好了就不来“沉浸式”了,如果大家喜欢,我以后会专门来几篇这种有“沉浸式编程”风格的文章。为了解决单体机器的问题,就有了虚拟机技术,我们可以通过虚拟一个拥有自己硬件配置的机器来实现应用的隔离,可能只有一台物理真机但通过虚拟化我们就可以将一台机器虚拟成十个机器,然后将各个应用部署到不同的虚拟机上,这样就算是张三搞坏了服务器自己不能运行了,李四和他没有丝毫关系,也不会受到任何影响,因为李四有自己的机器,自己的软件应用环境。

物理资源的虚拟化Hypervisor

Hypervisor就是上边提到的物理资源的虚拟化技术,他可以将现有的硬件资源充分利用,解决我有三台真机却有十个应用的尴尬局面。这里需要强调几个概念:1.物理真机就是Host宿主机。2.虚拟机又叫客户机(Guest)。3. KVM、VMware以及Xen是Hypervisor的几种具体实现。3.Hypervisor可以直接在宿主机部署(没有安装系统应用),也可以在已安装系统应用的宿主机上部署,我们大部分是在已安装系统应用的真机上实现虚拟化(例如VMware)。理解了上边几个概念之后我再与大家谈谈云计算,去年在北京我和好基友小安同学探讨过云计算,当时我对这一块了解的不是很深,但有几个基本问题我却是明白的,我接触过阿里云,知道云端部署Android后台的基本流程,有过Xshell安装云服务环境的基本经验,知道DNS域名解析和IP的关系,当然曾经我的编程恩师陈老师还让我见过一台报废的服务器,所以我并没有和其他人一样成为一个只会给技术上香叩头的“宗教徒”,技术没有神秘之处,之所以神秘是因为你根本不知他,不懂他。因为一篇新闻看到了大数据,人工智能战胜了人类,某技术多么厉害就觉得自己拥有了优先权,发言权,然后就是高谈阔论,这样的人看似拥有了全世界,实际上却是最贫穷的,哪里贫穷,精神贫穷,头脑贫穷,内心贫穷。好了,回归正题,云计算其实并不神秘(虽然看起来很神秘,好多人以为是一种神秘虚拟的存在,别吓我,没那么玄乎),他就是前边我提到的计算机虚拟技术,只不过这些虚拟机对外开放形成了Paas(阿里的基于平台的对外服务,对了你了解Saas和Iaas吗),你可以通过一些第三方软件操作控制这台人家给你的虚拟机(需要IP,用户以及密码),这样你好像就拥有了一台电脑,一台看不见摸不着的“云计算机”(可以自己安装系统,安装各种软件),请记住你拥有的是一台虚拟机Guest,而不是Host宿主机,Host宿主机在阿里的机房里。可能你还是觉得他玄乎,那你只能动手了,请记住看书和看文章的程序员永远不会是好程序员,不要废话,动手,让那些门外汉去讨论概念吧。

Docker容器来了

图片来自知乎某帖子
前边讲到了虚拟机讲到了通过多个虚拟机实现应用环境的隔离,但如果你用过VMware你就会知道(大学学习RedHat的时候用过)虚拟机是一个什么概念,他就是一个待安装应用的操作系统,而且会占用宿主机的大量内存和资源。回过来想想,我们的目的是实现应用的隔离,这样会不会有点小题大作了,一个应用对应一台启动缓慢的虚拟电脑?我们面向的是应用,而不是机器。这样Docker应运而生,Docker是一个容器引擎,他可以为所有的微服务应用提供运行时的环境,他的沙箱机制类似JVM的跨平台原理,还有类似Git的Pull,Push机制,通过Docker你可以为自己的应用提供一个高度内聚,粒度足够细小的应用运行环境,而这一切都在Docker Registry远端仓库中,你要做的就是敲几行类似node.js环境下npm命令,这些命令就像是maven,gradle中的坐标定位一样会从Docker Registry公有仓库中自动为你进行下载安装。以下就是虚拟机和容器技术的实力对比:
没有对比就没有伤害
孰优孰劣,我不多说。重要概念需要大家牢记,Docker三剑客:容器,镜像,仓库。容器与镜像好比Java中的对象和类,镜像是对容器的抽象预定义,是静态的按照Docker标准打包实现的未运行的应用环境(各种配置文件),容器是已经运行起来的具体镜像。镜像则类似操作系统的用户文件(操作系统包括内核和用户文件),这里指的就是应用运行所需的各种环境(精简的操作系统级以及应用级环境的配置文件)。Docker的三个关键操作:build,ship,run,Docker操作的对象是一种应用运行的环境而不是具体的应用,他管理的容器对应的是各种环境比如数据库需要的环境,Java需要的环境,PHP需要的环境这些环境运行起来就是Docker中的容器,待运行状态就是镜像也可以理解为对应用环境的封装。

容器的方向舵K8S

容器的方向盘
就好比微服务一样,服务多了需要规范化管理于是有了Dubbo,SpringCloud,谷歌的Grpc以及其中必不可少的服务注册组件Zookeeper,服务解耦以及通过消息持久化提供缓存服务的消息中间兔子队列等,容器一样如此,K8S是一个容器集群管理系统,他管理的对象就是各个宿主机上基于Docker创建的无数容器,主要职责是容器编排(Container Orchestration)——启动容器,自动化部署、扩展和管理容器应用,还有回收容器。他主要管理容器的运行状态,并且控制容器与外界的通信,类似的容器管理平台还有像Compose,Marathon,Swarm,Mesos等等,最后附上K8S与Docker的系统结构图:
Docker与K8S

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值