难于迁移和扩展 迁移app端的服务器,我们要提前准备好一个新的物理服务器,环境需要重新的迁移。资源消耗比较大的话,用户增加比较快需要扩展内存,cpu,硬盘麻烦,可能最后还是选择购买新的物理服务器。 一个物理机部署多个服务 在软件中模拟各种操作系统,可以同时运行多个相同或者不同的操作系统方便,可挂起(暂停),可作快照,可作克隆,在运行的时候占用内存。 如果在一个物理服务器上放入10个虚拟机,每个虚拟机系统占用1g资源,等于浪费了10g的内存资源。所以当操作系统越来越多的时候消耗在系统上的资源也就越来越大。 (image.png-61a4bb-1526718364925-0)] 容器解决了什么问题 docker进行了容器的打包,打包好的容器,可以运行在任何的环境,解决了开发和运维直接的矛盾。 什么是容器 对软件和其依赖的标准化打包 应用之间相互隔离(肯定没有虚拟机和物理机隔离的那么完全) 共享同一个OS Kernel(同一个操作系统上) 可以运行在很多主流的操作系统上(unix,linux,
难于迁移和扩展 迁移app端的服务器,我们要提前准备好一个新的物理服务器,环境需要重新的迁移。资源消耗比较大的话,用户增加比较快需要扩展内存,cpu,硬盘麻烦,可能最后还是选择购买新的物理服务器。 一个物理机部署多个服务 在软件中模拟各种操作系统,可以同时运行多个相同或者不同的操作系统方便,可挂起(暂停),可作快照,可作克隆,在运行的时候占用内存。 如果在一个物理服务器上放入10个虚拟机,每个虚拟机系统占用1g资源,等于浪费了10g的内存资源。所以当操作系统越来越多的时候消耗在系统上的资源也就越来越大。 [开发人员/运维人员] ###容器解决了什么问题 docker进行了容器的打包,打包好的容器,可以运行在任何的环境,解决了开发和运维直接的矛盾。 [容器解决了什么] [image.png] ###什么是容器 对软件和其依赖的标准化打包 应用之间相互隔离(肯定没有虚拟机和物理机隔离的那么完全) 共享同一个OS Kernel(同一个操作系统上) 可以运行在很多主流的操作系统上
手把手教您从零开始搭建网站/Minecraft游戏服务器/图床/网盘、部署应用、开发测试、GPU渲染训练等,畅享云端新生活。
在说虚拟化的方案前我稍微给大家撤下虚拟化产生的背景: 随着计算技术与科学技术的发展,在计算机行业出现一种问题,那就是好的服务器比如DELL,IBM非常的昂贵,差点的服务器也有比如国产的某某普,做为一个初创的互联网企业 Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机 Hypervisor分两种类型: 类型 1,这种 Hypervisor 是直接运行在物理硬件之上的。 类型 1 Hypervisor 的一个例子是基于内核的虚拟机(KVM —— 它本身是一个基于操作系统的 hypervisor)。 ? 类型 2,这种 Hypervisor 运行在另一个操作系统(运行在物理硬件之上)中。 类型 2 Hypervisor 包括 QEMU 和 WINE。
先聊聊历史,在很久很久以前,想要在线上服务器部署一个应用,首先需要购买一个物理服务器,在服务器安装一个操作系统,然后安装好应用所需要的各种依赖环境,最后才可以进行应用的部署,而且一台服务器只能部署一个应用 虚拟化技术出现以后,对于这种问题有所改变,虚拟化技术会在本地操作系统之上加多一层 Hypervisor层,Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可以虚拟化硬件资源,例如cpu 等等,这样就可以实现物理资源利用率的最大化。 如此一来: 一台物理机就可以部署多个应用 每个应用都可以独立运行在一个虚拟机里 示意图: ? 这就涉及到虚拟化技术所带来的局限性了: 每一个虚拟机都是一个完整的操作系统,所以需要给其分配物理资源,当虚拟机数量增多时,操作系统本身消耗的资源势必增多 以上所提到的这个问题还不是真正促使容器技术出现的根本原因 可以运行在很多主流操作系统上 ?
1.2 虚拟化架构 1.2.1 全虚拟化 在全虚拟化的虚拟平台中,GuestOS并不知道自己是一台虚拟机,它会认为自己就是运 行在计算机物理硬件设备上的HostOS。 1.2.2 操作系统虚拟化 操作系统层虚拟化是指通过划分一个宿主操作系统的特定部分,产生一个个隔离的操作 执行环境。 客户机就好像直接运行在计算机硬件上,伴随着几个明显的警告。虚拟机对硬件资 源(如网络,显示器,键盘,硬盘)的访问被统一管理在一个比处理器和系统内存更有限制 性的层次上。 1.3 hypervisor Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统 和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协 调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor,VMM)。
硬件层的虚拟化具有高性能和隔离性,因为hypervisor直接在硬件上运行,有利于控制VM的OS访问硬件资源,使用这种解决方案的产品有VMware ESXi 和 Xen server Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层 ,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor 容器与管理程序虚拟化(hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一台或者多台独立的机器虚拟运行与物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间 因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行在同一台宿主机上。 由于“客居”于操作系统,容器只能运行与底层宿主机相同或者相似的操作系统,这看起来并不是非常灵活。 (当然,可以在一个容器中运行多个应用程序) Docker组件: Docker客户端和服务器 Docker是一个客户端-服务器(C/S)架构程序。
将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。 更高效的计算资源利用 Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。 仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。 同一个 image 文件,可以生成多个同时运行的容器实例。 image 文件生成的容器实例,本身也是一个文件,称为镜像文件。 由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
容器与管理程序虚拟化 (hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一台或者多 台独立的机器虚拟运行与物理硬件之上,而容器则是直接运行在操作系统内核之上的用 因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用 户空间运行在同一台宿主机上。 Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到 Registry,然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机 中。 虚拟机( VM)是一个物理硬件层抽象,用于将一台服务器变成多台服务器。 管理程 序允许多个VM在一台机器上运行。 每个VM都包含一整套操作系统、一个或多个应 用、必要的二进制文件和库资源,因此占用大量空间。而且VM启动也十分缓慢 。
况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。 传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等(java为例)。 将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。 更高效的计算资源利用:Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。 (1)docker有着比虚拟机更少的抽象层 由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。 (2)docker利用的是宿主机的内核,而不需要加载操作系统OS内核 当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。
在一个物理服务器上面安装系统,直接部署应用 缺点 部署非常慢 成本非常高 资源浪费:部署的应用并不会占满服务器资源,会有大部分的空闲资源 难于迁移和扩展:像上面说到的,换台服务器,环境又要重新配 可能会被限定硬件厂商 资源池:一个物理机的资源分配到了不同的虚拟机 易扩展:添加物理主机或虚拟机 易云化:阿里云、AWS 提供虚拟化技术 虚拟化局限性 资源占用多:每一个虚拟机都是一个完整的操作系统,要给其分配资源,当虚拟机数量增多时 OSKernel 可以运行在很多主流操作系统上 可以理解成:标准化软件单元 容器解决了什么问题 解决了开发和运维之间的矛盾 在开发和运维之间搭建了一个桥梁,是实现 devops 的最佳解决方案 容器和虚拟机的区别 【虚拟化是物理资源层面的隔离】 多个容器可以在同一台计算机上运行,并与其他容器共享OS内核 也允许多个VM在单台计算机上运行,但需要启动单独的虚拟机 OS 仅有一个物理机的OS,多个容器共享物理机的资源 多个OS(物理机一个OS,每个 VM 一个 OS),均独享资源 一台物理机可以运行数百个容器 一台物理机最多可以运行十来个虚拟机 容器镜像的大小通常为几十 MB 包含操作系统、二进制文件、库,至少也要几个
因为他对于上述问题给出了一个标准的解决方案。 之前在服务器配置一个应用的运行环境,要安装各种软件,普通的一个项目的环境,必备的软件Java/Tomcat/MySQL/JDBC驱动包等。 况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。 传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等(java为例)。 将应用运行在 Docker 容器上面, 而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作. Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。 更高效的计算资源利用 Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。
传统的虚拟化技术在虚拟机(VM)和硬件之间加了一个软件层Hypervisor,或者叫做虚拟机管理程序。Hypervisor的运行方式分为两类: 直接运行在物理硬件之上。 因为运行在虚拟机上的操作系统是通过Hypervisor来最终分享硬件,所以虚拟机Guest OS发出的指令都需要被Hypervisor捕获,然后翻译为物理硬件或宿主机操作系统能够识别的指令。 ,这里需要简单介绍一个UnionFS是什么: UnionFS可以把多个物理位置独立的目录(也叫分支)内容联合挂载到同一个目录下,UnionFS允许控制这些目录的读写权限,此外对于只读的文件和目录,它具有 一个采用微服务架构开发的应用中,微服务的个数往往很多,这就导致了一台服务器上往往需要启动多个微服务来提高资源的利用率,而微服务本身可能就只能兼容部分操作系统,这就导致了就算有大量的服务器资源(操作系统可能不一样 ),但由于微服务本身与操作系统可能相关,就不能做到让微服务在任意服务器上运行,这就带来了资源的浪费和运维的困难。
操作系统虚拟化的好处是实现了虚拟操作系统与物理操作系统的隔离并且有效避免物理操作系统的重复安装。 VPS是利用虚拟服务器软件在一台物理机上创建多个相互隔离的小服务器。这些小服务器本身就有自己的操作系统,其运行和管理与独立主机完全相。其可以保证用户独享资源,且可以节约成本。 开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 更轻松的迁移和扩展 Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。 每个容器都有自己单独的名字空间,运行在其中的应用都像是在独立的操作系统中运行一样。名字空间保证了容器之间彼此互不影响。
然后在操作系统上完成各种各样的配置,这样并不能充分的利用物理机的性能,docker 则是一种操作系统级别的虚拟技术,它运行在操作系统之上的用户空间,所有的容器都共用一个系统内核甚至公共库,容器引擎提供了进程级别的隔离 都有备份、回滚操作 操作系统 在性能上有优势,可以轻易的运行多个操作系统 可以安装任何系统,但是性能不及容器 原理 和宿主机共享内核,所有容器运行在容器引擎之上,容器并非一个完整的操作系统,所有容器共享操作系统 QoS 是有保证的,每一个虚拟机就像一个真实的物理机一样,可以实现不同的操作系统运行在同一物理节点上。 只有一个内核运行在物理节点上,几乎不能实现不同的操作系统混合。容器提供者一般仅提供少数的几个操作系统 每一台虚拟机都具有更大的负载,耗费更多的资源,用户需要全权维护和管理。 容器:容器是一个运行时环境,是镜像的一个运行状态,它是镜像执行的动态表现。 库:库是一个特定的用户存储镜像的目录,一个用户可以建立多个库来保存自己的镜像。
予以抽象,转换后呈现出来并可提供分割,组合为一个或多个计算机配置环境, 并重新分割,重新组合。以达到最大合理利用物理资源的目的。 虚拟机 虚拟计算机被称为虚拟机,(VM,Virtual Machine)它是一种严密隔离且内含操作系统和应用的软件容器,每个虚拟机都是完全独立的,通过将多台虚拟机放置在一台物理计算机上,可仅在一台物理服务器或主机上运行多个操作系统和应用 虚拟化类型: 1.服务器虚拟化 服务器的虚拟化支持将多个操作系统作为高校的虚拟机在单个服务器上运行,主要优势: 提升IT效率 降低运维成本 更快部署工作 提升应用性能 提高服务可用性 消除服务器数量剧增和情况复杂 其中,“类型一”虚拟机是在系统上电之后首先加载运行虚拟机监控程序,而传统的操作系统则是运行在其创建的虚拟机中。类型一的虚拟机监控程序,从某种意义上说,可以视为一个特别为虚拟机而优化裁剪的操作系统内核。 因为,虚拟机监控程序作为运行在底层的软件层,必须实现诸如系统的初始化、物理资源的管理等操作系统的职能﹔它对虚拟机的创建、调度和管理,与操作系统对进程的创建、调度和管理有共通之处。
,然后在操作系统上完成各种各样的配置,这样并不能充分的利用物理机的性能,docker 则是一种操作系统级别的虚拟技术,它运行在操作系统之上的用户空间,所有的容器都共用一个系统内核甚至公共库,容器引擎提供了进程级别的隔离 都有备份、回滚操作 操作系统 在性能上有优势,可以轻易的运行多个操作系统 可以安装任何系统,但是性能不及容器 原理 和宿主机共享内核,所有容器运行在容器引擎之上,容器并非一个完整的操作系统,所有容器共享操作系统 QoS 是有保证的,每一个虚拟机就像一个真实的物理机一样,可以实现不同的操作系统运行在同一物理节点上。 只有一个内核运行在物理节点上,几乎不能实现不同的操作系统混合。容器提供者一般仅提供少数的几个操作系统 每一台虚拟机都具有更大的负载,耗费更多的资源,用户需要全权维护和管理。 •容器 容器是一个运行时环境,是镜像的一个运行状态,它是镜像执行的动态表现。 •库 库是一个特定的用户存储镜像的目录,一个用户可以建立多个库来保存自己的镜像。
为应用提供一个一致的环境 不管是开发或部署多少具独立组件,都需要解决程序运行环境的差异性,不仅存在于开发环境与生产环境,还存在于各个服务器之间 最理想的做法是让应用在开发和生产阶段可以运行在完全一样的环境下 ,有完全一样的操作系统、库、系统配置、网络环境 迈向持续交付:DevOps和无运维 介绍:现在,大家都意识到,让同一个团队参与应用的开发、部署、运维的整个生命周期更好,这种实践被称为DevOps 优点: 容器技术 什么是容器 为什么使用容器 以往:通过给每个组件提供自己的操作系统实例来隔离它们的环境,数量变多后会浪费硬件资源 现在:使用linux容器技术,允许在同一台机器上运行多个服务,但开销小很多 比较虚拟机和容器 多个容器会完全执行运行在宿主机上同一个内核系统调用 虚拟机将物理硬件资源分成较小部分的虚拟硬件资源,每个虚拟机里的操作系统使用 ? 简化应用部署 开发不需要关心应用部署在哪台服务器上,只要服务器能提供足够的系统资源就可以了 特殊情况下需要关心运行在哪台服务器上(是不是特需的硬件,如服务器上是否是SSD、是否有GPU) 更好利用硬件
docker可不等于容器哦,docker只算是容器的一种吧,算了容器的典型代表 容器的诞生 在传统的软件部署方式中,程序员需要把要发布的应用程序打成包发给运维人员,然后由运维人员在生产环境进行部署。 容器技术允许你在同一台服务器上运行多个服务,而且还可以根据每个服务提供不同的运行环境。 虚拟机中的进程运行在虚拟机的操作系统中,而运行在容器中的进程实际是运行在宿主机的操作系统中,只是表面看来好像运行在容器的沙盒一样,但实际上确实是和其他进程相互隔离的。 虚拟机是利用软件技术将物理硬件虚拟化为多个虚拟硬件资源,从而被每个虚拟机的操作系统使用。 Docker容器平台的出现把linxu容器化技术推向了一个高潮,它不仅简化了程序部署的方式,更简化了打包应用和依赖,使容器真正做到了在不同的操作系统之间移植,甚至一个完整的操作系统也可以被打包成一个可移植的镜像
例如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间(Address Space),而实际上,应用程序的代码和数据可能是被分隔成多个碎片页或段),甚至被交换到磁盘、闪存等外部存储器上 虚拟机中运行的操作系统被称为客户机操作系统(Guest OS),运行虚拟机监控器的操作系统被称为主机操作系统(Host OS),当然某些虚拟机监控器可以脱离操作系统直接运行在硬件之上(如 VMWARE 每一个虚拟机都是一个完整的操作系统,所以需要给其分配物理资源,当虚拟机数量增多时,操作系统本身消耗的资源势必增多 虚拟化技术没法解决运维环境和开发环境的矛盾,所以后来才出现了容器技术 关于虚拟化技术的更多内容 I型:虚拟机直接运行在系统硬件上,创建硬件全仿真实例,被称为“裸机”,也称为裸金属架构。 II型:虚拟机运行在传统操作系统上,同样创建的是硬件全仿真实例,被称为“托管”hypervisor。 但是只有一个KVM内核模块还不能实现虚拟化的全部功能,就好比操作系统只有内核还不能成为一个完整的操作系统一样。
云原生分布式云中心(Tencent Kubernetes Engine Distributed Cloud Center, TDCC)面向多云多集群场景的应用管理平台,支持将云原生化的应用扩展到分布式
扫码关注腾讯云开发者
领取腾讯云代金券