Docker   发布时间:2022-05-13  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了虚拟化概论大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

目录

      • 虚拟化概念
      • 虚拟化分类
      • 虚拟化过程
      • 虚拟化技术
      • Hypervisor技术
      • 容器技术
      • Docker
      • 微服务

虚拟化概念

世界上大部分计算机处于资源浪费状态,这里的资源指的是组成计算机的各种硬件设备,比如Cpu,内存,硬盘等。试想我们每天使用电脑的场景,只是简单地上上网,聊聊天,处理一些office文档,用ps画个图,用ide写个代码,而这些简单的工作远远没有发挥出一台计算机该有的性能。如果有一种技术,能够对我们的硬件资源充分地利用,本来需要两台计算机完成的工作由一台计算机来完成,并且能够为我们节约成本,那将是一件多么美好的事情,虚拟化技术就是在这种千呼万唤中产生了。

记的最早接触虚拟化技术是很多年前,当时在一家公司做移动端开发,每个前端的开发机是一台windows电脑,后来因为业务的需要,需要在苹果生态下调试应用,我们知道苹果生态的应用只能在mac环境下开发,理论上公司应该再给开发人员配一台mac电脑,但公司为了节约成本,想出了一个很挫的办法,要求每个前端人员在自己的windows电脑上安装黑苹果,装完之后搞得每个人的机器都很卡,但至少解决了问题。当年折腾黑苹果的经历直到现在我还记忆犹新,先是下载VMware和mac系统镜像,然后在VMware中配置cpu用几核,用多大的内存和硬盘,然后安装mac镜像和硬件驱动,后来然跑起来,但机器卡的要死。当时并没有对虚拟机做进一步的探究。直到多年后的今天在研究这门技术的时候才意外地发现,当时使用的虚拟机就是一种虚拟化技术。

再比如我们的产品上线,免不了会遇到从第三方租用服务器的情况,然我们可能对服务器的配置要求是双核cpu/2G内存/20G硬盘,但提供商不可能去给我们攒一台一模一样的机器出来,而是将现有的比如8核cpu/16G内存/100G硬盘的计算机,通过虚拟化技术,虚拟出我们需要的资源,剩下的资源提供给其它客户使用,也就是一台服务器有可能服务于多个客户。

通过上面的两个例子可以看到虚拟化解决的是硬件资源冗余问题,也就是怎么能提高硬件资源的利用率。

虚拟化分类

  • 平台虚拟化(Platform Virtualization):针对计算机和操作系统的虚拟化。
  • 资源虚拟化(resource Virtualization):针对特定的系统资源的虚拟化,如内存、存储、网络资源等。
  • 应用程序虚拟化(Application Virtualization):包括仿真、模拟、解释技术等,如 Java 虚拟机(JVM)。

虚拟化过程

虚拟化的过程包括硬件虚拟和软件虚拟。一台计算机之所以能够跑起来,是因为有cpu、内存、硬盘,网络这些硬件基础。虚拟化技术实际上是在当前计算机系统模拟另外一套计算机系统。既然要虚拟出另外一台计算机,那么就要虚拟出计算机的这些组成部分。我们知道计算机由硬件和软件组成,那么不但要虚拟出像cpu、内存、硬盘、网络这样的硬件资源,还要虚拟出操作系统与应用软件,在这一切工作完成后虚拟化的计算机才能真正跑起来。

虚拟化技术

目前市面上主流的虚拟化技术有两个,一个是Hypervisor或称为 VMM(Virtual Machine Monitor),另一个是容器技术。在讲这两个概念之前,我们先来看两张图,这两张图让人感到震惊的地方是,平台虚拟化的两种雏形竟然在1974年就被提出来了,它们一个用在虚拟机上,一个用在容器技术上,而且一直沿用至今。

虚拟化概论

虚拟化概论

这两种技术最大的区别是,在Hypervisor虚拟化环境当中每台虚拟机都需要使用独立的操作系统,而容器只需要依赖宿主操作系统,也就是所有容器共享宿主操作系统。Hypervisor代表虚拟机,虚拟机是一个机器,但容器是一个进程。每一个虚拟机里面都有一套完整的操作系统,而容器层安装在操作系统之上,它直接利用了宿主机的内核,更加轻量化,启动速度极快。通常,我们在会每个容器里面跑单个的应用,而在虚拟机里会跑很多应用。

Hypervisor技术

提起虚拟化技术,不得不先从Hypervisor讲起,Hypervisor或称为 VMM(Virtual Machine Monitor),中文翻译过来叫虚拟机监视器。在Hypervisor技术中,每台虚拟机都需要安装独立的操作系统,其实现架构如下图所示有三种:

虚拟化概论


先看类型1,被称为裸机型,VMM直接运行在宿主机的硬件上来控制硬件和管理客户机操作系统,前提是需要硬件支持,最底层是硬件层,往上是VMM,这里的VMM既是一个操作系统,也是一个虚拟机管理程序,也就是在这种架构中操作系统和虚拟机监视器合二为一。容器化思想就采用了这种方式,像我们后面要讲的CentOS系统,就是系统原生就已经集成了虚拟化技术。

再看类型2,被称为宿主型,最底层是硬件层,往上是宿主操作系统,在宿主操作系统上运行WMM,再在VMM上运行客户端操作系统,由架构我们可以看出,VMM 作为应用程序运行在主操作系统环境内,运行时VM内核->Hypervisor->主机内核,正因为如此运行效率十分地低下,这也解决了我多年前的疑虑,为什么当时装完黑苹果系统会那么卡。

容器技术

容器其实就是一种沙盒技术,可以将应用运行在其中,与外界隔离,这个沙盒环境可以被方便地移植到其它地方。相比于Hypervisor虚拟机技术来讲有以下几个特点:

  • 容器技术更加轻量级,因为它不需要安装运行容器所依赖的操作系统,启动速度更快。
  • 容器之间相互隔离,互不影响。
  • 每个容器内部是一整套完整的运行环境,易于移植,一次构建,随处部署。
  • 部署效率高,花费时间短,在毫秒与秒之间。

简单来讲,一个容器包含了完整的运行时环境:除了应用程序本身之外,这个应用所需的全部依赖、类库、其他二进制文件、配置文件等,都统一被打入了一个称为容器镜像的包中。通过将应用程序本身,和其依赖容器化,操作系统发行版本和其他基础环境造成的差异,都被抽象掉了。这样的好处是,我们可以很容易地将镜像包在不同人员之间传递,从一个环境移植到另一个环境也显得很灵活。

Docker

Docker 是一个开源的应用容器引擎,那么虚拟化技术又跟Docker有什么关系呢?其实就一句话,Docker是容器的一种技术实现,请记住是一种实现,那么是不是还有其他实现,答案是肯定的,比如rocket。但就Docker目前的风行程度来讲,Docker几乎成为容器技术的代名词。

正式因为Docker的出现,才把容器变得标准化了。要理解Docker,你需要明白三个最主要的概念:容器、镜像、仓库。

  • 容器是运行在虚拟机上的进程。
  • 镜像是一种存储形式,可以理解为数据或应用的副本。
  • 仓库是用来存储镜像的。

从Docker的几个常用命令我们来看一下Docker能做什么:

##列出本地images
docker images
##搜索仓库MysqL镜像
docker search MysqL
##下载redis官方最新镜像
docker pull redis
##单个镜像删除,相当于
docker rmi redis
##构建docker镜像
docker build -f /docker/dockerfile/mycentos -t mycentos:1.1
##新建并启动容器
docker run -i -t --name mycentos
##列出redis容器中运行进程
docker top redis
##查看redis容器日志,默认参数
docker logs rabbitmq
##使用run方式在创建时进入
docker run -it centos /bin/bash
##将rabbitmq容器中的文件copy至本地路径
docker cp rabbitmq:/[container_path] [local_path]

从上面的几个命令我们可以发现,Docker用来负责虚拟硬件资源,管理镜像和容器,并负责与宿主计算机通讯。

微服务

什么是微服务呢,简单来说就是把系统拆的更小,粒度更细,只要该系统依赖的资源与其他系统都没有关系,那么就可以拆分为一个微服务。比如我们以前总是把用户信息和用户资产存到以数据库中,如果使用微服务的概念,就应该把这两块内容拆分成不同的模块,并且两个模块之间没有任何的依赖,谁离了谁都能够独立存在。如果需要用户信息直接去用户信息服务拉取,而需要用户资产信息就去资产服务拉取,我认为微服务首先要满足以下两个要求:

  • 一个微服务应该都是单一职责的,一个微服务解决一个业务问题。
  • 将自己的业务能力封装并对外提供服务。

大佬总结

以上是大佬教程为你收集整理的虚拟化概论全部内容,希望文章能够帮你解决虚拟化概论所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:内存