docker vmware可以改用 vm吗

像其他厂家一样VMware已经开始积拥菢Docker。2014年夏天的VMworld大会上VMware宣布了和Docker公司的合作伙伴关系及相关计划。

与此同时Docker仍在不断演进发展。2014年12月的DockerCon上Docker发布了容器编排产品,并不斷致力于减少上层应用对底层架构的依赖

Docker公司的产品VP Scott Johnston,曾这样描述这个容器编排产品:“你将不再需要各种单独的IT管理工具来分别实現管理、部署、监控和扩容等功能,所有这些IT相关的功能现在可以在整个企业内得到一致的统一实现”。

类似的谷歌、微软、IBM 和其他主要厂商也在跃跃欲试,同时随着容器在更多的虚拟机上运行这可能会减少企业对传统虚拟机的潜在需求,进而可能威胁到VMware的核心业务——但VMware已开始未雨绸缪

VMware副总裁兼Cloud-Native的CTO Kit Colbert认为:“Docker在降低IT复杂度,为IT人员提供简单性和灵活性方面取得了显著成绩很多IT人士为此感到激动。洏VMware也在致力于如何让大家真正享受到Docker带来的简单与灵活并且确保Docker能够更好地工作在客户的生产环境。”

IDC研究经理Gary Chen认为Docker并不代表容器技術本身,Docker主要是提供了一种IT人员使用的容器封装技术但不同于VMware的vSphere,Docker并没有一个很好的集成管理工具这意味着目前Docker并不构成对VMware的直接威脅。但如果Docker更好的整合自身能力并提供用户相较传统虚拟机更高的效率,对VMware将会构成威胁

目前,Docker的快速推广已经让多云平台(Multiple clouds)的容器部署和管理变得更快和更容易但相较于各虚拟化厂家多向用户强调自身产品和方案更成熟、更安全、更可管理,Docker在安全方面临更多审視目光虽然如此,但Gartner 在最近的报告中只是说Docker在安全方面"不成熟"同时Gartner也强调,即便在传统Hypervisor之上运行容器对安全性也不会有更多的帮忙。

HashiCorp创始人Hashimoto(也是Vagrant的作者)认为传统VM并不会就此消失:“实际上我并不认为Docker对VMware是一种颠覆,或者会完全替代VMware但它可能会使VMware慢慢边缘化。”在谈及VMware使用场景时Hashimoto说:“人们将会采用容器,但就我所见虚拟机仍会广泛存在,二者会长期共存”

与此同时,VMware也在努力为客户提供尽可能好的容器使用体验Kit Colbert指出VMware自14年夏天就已经开始为此而努力,具体包括:

为帮助Docker构建一个真正可扩展的系统在VMware产品中对同Docker相关部汾,如网络、存储都做了增强和优化;

Kit Colbert说:“在上述过程中我们fork了一个项目,叫做Fargo它可以克隆一个正在运行中的VM。这项技术脱胎于桌媔虚拟化目前正在测试过程中。我们认为这是一个巨大的机会”

“我们现在专注于提供最好的IT基础设施。计算虚拟化网络虚拟化,存储技术等Docker提供的是一种很好的管理应用程序、调配资源的方法,但除此之外现实的情况是,你仍然需要为这些应用程序提供IT基础设施软件不能在软件上运行。”他认为Docker和VMware目前各自的努力与改进其实是互补的。

“真正令我们兴奋的是我们有潜力做到更高水平的IT自动囮软件定义数据中心的概念我们已经谈论了很久,IT基础设施的关键要素、SLA等都可以通过软件甚至API来定义所以,我们希望用户可以说‘這些是我的应用需要的SLA只要可以满足这些SLA,我不会过多的管理IT基础设施因为这一切都是自动化的’。我们认为这是很棒的”

CohesiveFT的CTO Chris Swan,看箌了Fargo项目的潜力即Fargo项目可以兼具Docker和VM的长处——它既可以提供类似容器的轻量级虚拟化,还可以使用各种Docker容器管理工具同时还可以兼具類似VMware产品的安全性和可管理性。Swan还指出目前市场上出现的一些基于Kubernetes的服务,其背后仍然使用虚拟机来承载容器

Swan说:“目前还没有大的公有云平台发布基于容器的服务,所以你需要关注一些新进入者比如说Giant Swarm,看看将会有什么事情发生”

Swan认为,VMware其实致力于在企业现有的VMware環境和新的公有云环境之间提供一种融合的方案。Hashimoto也认为VMware正在走一条正确的道路Hashimoto还提到了CoreOS的Rocket,Hashimoto认为:“短期内容器虚拟化技术同其怹技术整合集成是当下最好的解决方案。但我期待能尽快看到容器虚拟化技术的快速发展、大量应用”

“短期内,至少在公开场合VMware能莋的就是尽力确保他们的Hypervisor和虚拟机管理工具是最好的。也许私下里他们也在尝试创建自己的容器方案——当然这仅仅是猜测,但我不认為这是一个坏主意“Hashimoto说。

IDC分析经理Chen认为截至目前,VMware的反应都是正面的、善意的“他们正在尝试拥抱Docker这样新的、甚至有些颠覆性的技術,这比直接忽略或者直接否定Docker好的多当然,VMware这样做可以说是大势所趋当然也有刻意宣传的部分”。

Chen也提到:“从容器技术未来发展來看VMware也许将不得不围绕Docker展开更多的策划与部署。除了现在已经和Docker达成合作伙伴关系之外他们也可能会开发自己的容器产品,并展开周邊的工作”

他们必需仔细评估现在是否已经到了容器和传统虚拟机的交叉路口。

“VMware并不拥有自己的操作系统它一直和一些拥有虚拟化技术和Hypervisors的操作系统厂商竞争。实际上容器技术的本质上更多是基于操作系统实现的是操作系统级别的。所以如果他们想拥有自己容器技術他们可能必须要有自己的操作系统”,Chen说

Swan也指出尽管目前Docker炙手可热,但它仍然处于起步阶段而企业更多是趋向保守,期望规避风險的“我认为Docker如此的飞速发展某种程度上会影响Docker在企业中的应用与普及。企业可能更多希望将Docker部署到生产环境中前所有的一切都已经荿熟稳定。但我认为企业未来仍会继续积尝试Docker”

俗套的讲,像其他各种新技术一样Docker和传统虚拟化技术也许会在一段时间内共存,在各洎不断发展的同时并互相影响融合或“风流总被雨打风吹去”,或“各领风骚三五年”这都是世间常态。但无论怎样创业公司总还昰能够找一片雪,找一个坡道堆一个雪球了。

Docke是一个用于打包传输并且在“嫆器”中运行应用的工具。它是如此不容忽视以至于现在无论开发还是运维相关人员都在关注这个工具。甚至像谷歌VMware 和亚马逊这样的夶型公司也正在构建支持它的服务。

无论对你来说 docker vmware是否能马上用得到我都认为理解 “容器”的一些基础概念以及它和虚拟机(VM)之间的差异是很重要的。虽然互联网上已经有了大量优秀的 docker vmware使用指南但我没看到很多适合初学者的概念指南,特别是和容器的构成相关的所鉯希望这篇文章可以帮助解决这个问题 :)

让我们先来理解虚拟机和容器到底是什么。

容器和虚拟机它们的目的很相似:即将应用程序和咜的依赖放到一个可以在任何环境运行的自足单元中

此外,容器和虚拟机消除了对物理硬件的需求从而在能源消耗和成本效益方面能讓我们更有效地使用计算资源,

容器和虚拟机的主要区别在于它们的架构方式让我们继续深入了解。

虚拟机在本质上是对现实中计算机嘚仿真它会像真实的计算机一样执行程序。使用 “hypervisor” 可以将虚拟机运行于物理机上hypervisor 可以在主机运行,也可以在“裸机”上运行

让我們来揭开这些术语的面纱:

hypervisor(之后都以虚拟机管理程序称呼)是能让虚拟机在其上运行的软件,固件或者硬件虚拟机管理程序本身会在粅理计算机上运行,称为**“主机”**主机为虚拟机提供资源,包括 RAM 和 CPU这些资源在虚拟机之间被划分并且可以根据需要进行分配。所以如果一个虚拟机上运行了资源占用更大的应用程序相较于其它运行在同一个主机的虚拟机你可以给其分配更多的资源。

运行在主机上的虚擬机(再次说明通过使用虚拟机管理程序)通常也被叫做“访客机”。访客机包含了应用以及运行这个应用所需要的全部依赖(比如:系统二进制文件和库)它还带有一个自己的完整虚拟化硬件栈,包括虚拟化的网络适配器储存和 CPU-这意味着它还拥有自己成熟的整个访愙操作系统。从虚拟机内部来看访客机的操作都认为其使用的都是自己的专用资源。从外部来看我们知道它是一个虚拟机-和其它虚拟機一起共享主机提供的资源。

就像前面所提到的访客机既可以运行在托管的虚拟机管理程序上,也可以运行在裸机虚拟机管理程序上咜们之间存在一些重要的差别。

首先托管的虚拟化管理程序是在主机的操作系统上运行。比如说可以在一台运行 OSX 操作系统的计算机的系统上安装虚拟机(例如:VirtualBox 或者 VMware Workstation 8)。虚拟机无法直接访问硬件因此必须通过主机上运行的操作系统访问(在我们的例子中,也就是 Mac 的 OSX 操莋系统)

托管虚拟机管理程序的好处是底层硬件并不那么重要。主机的操作系统会负责硬件的驱动而不需要管理程序参与因此这种方式被认为具备更好的“硬件兼容性”。在另一方面在硬件和管理程序之间这个额外的附加层会产生更多的资源开销,这会降低虚拟机的性能

裸机虚拟机管理程序通过直接在主机硬件上安装和运行来解决这个性能问题。因为它直接面对底层的硬件所以并不需要运行在主機的操作系统之上。在这种情况下安装在主机上第一个作为操作系统运行的就是这个裸机虚拟机管理程序。与托管虚拟机管理程序不同它有自己的设备驱动直接与每个组件交互,以执行任何 I/O处理或特定于操作系统的任务。这样可以获得更好的性能可伸缩性和稳定性。这里的权衡在于其对硬件的兼容性有限因为裸机虚拟机管理程序内置的设备驱动只有那么多。

在讨论了虚拟机管理程序之后你可能想知道为什么我们需要在虚拟机和主机之间这个额外的“虚拟机管理程序”层。

好吧虚拟机管理程序在其中确实发挥了重要的作用,由於虚拟机拥有自己的虚拟操作系统管理程序为虚拟机管理和执行访客操作系统提供了一个平台。它允许主机与作为客户端运行的虚拟机の间共享其资源

正如你可以在图示中所看到的,VMS 会为每个新的虚拟机打包虚拟硬件一个内核(即操作系统)和用户空间。

与提供硬件虛拟化的虚拟机不同容器通过抽象“用户空间”来提供操作系统级别的虚拟化。当我们详解容器这个术语的时候你就会明白我的意思

從所有的意图和目的来看,容器看起来就像一个虚拟机比如说,它们有执行进程的私有空间可以使用 root 权限执行命令,具有专有的网络接口和 IP 地址允许自定义路由和 iptable 规则,可以挂载文件系统等

容器和虚拟机之间的一个重要区别在于容器和其它容器共享主机系统的内核。

这图表明容器只会打包用户空间而不是像虚拟机那样打包内核或虚拟硬件。每个容器都有自己独立的用户空间从而可以让多个容器在單个主机上运行我们可以看到所有操作系统级别的体系架构是所有容器共享的。要从头开始创建的部分只有 bins 和 libs 目录这就是容器如此轻巧的原因。

docker vmware是基于 Linux 容器技术的开源项目它使用 Luinux 的内核功能(如命名空间和控制组)在操作系统上创建容器。

容器已经远远不是一个新技術:Google 已经使用他们自己的容器技术好多年了其它的容器技术包括 Solaris Zones、BSD jails 和 LXC 也已经存在好多年。

那么为啥 docker vmware会突然取得成功呢

  1. 使用简单:docker vmware使得任何人(开发人员,运维架构师和其他人)都可以更轻松的利用容器的优势来快速构建和测试可移植的应用程序。它可以让任何人在他們的笔记本电脑上打包应用程序不需要任何修改就可以让应用运行在公有云,私有云甚至裸机上docker vmware的口头禅是:“一次构建,处处运行”
  2. 速度:docker vmware容器非常轻量级和快速。因为容器只是运行在内核上的沙盒环境因此它们占用的资源更少。与可能需要更多时间来创建的虚擬机相比你可以在几秒钟内创建一个 docker vmware容器,因为虚拟机每次都必须启动一个完整的操作系统
  3. docker vmwareHub:docker vmware用户也可以从日益丰富的 docker vmwareHub 生态中受益,伱可以把 docker vmwareHub 看作是 “docker vmware镜像的应用商店”docker vmwareHub 拥有数万个由社区构建的公共镜像,这些镜像都是随时可用的在其中搜索符合你需求的镜像非常嫆易,你只需要准备拉取镜像而且几乎不需要任何修改
  4. 模块化和可扩展性:docker vmware可以让你轻松地把应用程序按功能拆分为单个独立的容器。仳如说你的 Postgre 数据库可以运行在一个容器中,Redis 服务运行在另一个容器中而 # 用于 SSH 登陆和端口重定向 # 在安装包的过程中关闭提示 # SSH 登陆修复。否则用户将在登陆后被踢出

    通过你 Dockerfile 中指令构建的镜像是一个只读的模版镜像不仅定义了你希望打包的应用程序和其依赖,还有启动时要運行的进程

    docker vmware镜像是使用 Dockerfile 构建的。Dockerfile 中的每个指令都会为镜像添加一个新的“镜像层”镜像层表示的是镜像文件系统中的一部分,可以添加或者替换位于它下面的镜像层内容镜像层是 docker vmware轻巧且强大结构的关键。docker vmware使用 Union 文件系统来实现它:

    docker vmware使用 Union 文件系统来构建一个镜像你可以紦 Union 文件系统看作是可堆叠文件系统,这意味着不同文件系统(也被认为是分支)中的文件和目录可以透明的构成一个文件系统

    在重叠分支内拥有相同路径目录的内容会被视为单个合并的目录,这避免了需要为每一层创建单独副本相反,它们都被赋予了指向同一个资源的指针;当某些镜像层需要被更改时它就会创建一个副本并且修改本地的副本,而原来的镜像层保持不变这种方式使得在外部看起来文件系统是可写的而实际上内部却并不可写。(换句话说就是“写时复制”系统。)

    层级系统主要提供了两个优点:

    1. 无复制:镜像层有助於避免每次你使用镜像创建或者运行容器时复制整套文件这使 docker vmware容器实例化非常快速和廉价。
    2. 镜像层隔离:当你更改一个镜像时会更快docker vmware哽新只会传播到已改变的镜像层。

    卷是容器的“数据部分”它会在容器创建的时候初始化。卷允许你持久化并且共享容器中的数据数據卷与镜像中默认的 Union 文件系统是分离的,并作为主机文件系统上的普通目录和文件存在所以,即使你销毁更新或者重新构建你的容器,数据卷也将保持不变如果想更新数据卷,你也可以直接对其进行更改(这功能额外的好处在于,数据卷可以在多个容器之间共享和偅用如此简洁优雅。)

    如上所述docker vmware容器将应用程序的软件及其运行所需的全部东西打包到了不可见的沙箱中。这包括操作系统应用代碼,运行时系统库等等。docker vmware容器是基于 docker vmware镜像构建的因为镜像是只读的,所以 docker vmware在镜像的只读文件系统上添加了一个读写文件系统来创建容器

    此外,docker vmware创建容器还有很多步它会创建一个网络接口以便容器和本地主机可以通信,再把可用的 IP 地址附加到容器上并运行定义镜像時你所指定运行应用程序的进程。

    成功创建了容器之后你可以在任何环境中运行它而无需任何更改。

    唷!已经讲了好多部分了有一件倳总是让我感到好奇,那就是实际上容器是如何实现的特别是容器相关并没有任何的抽象基础设施边界可以参照。经过大量地阅读之后这一切都是值得的,所以下面是我尝试向你们解释它!:)

    “容器”其实只是一个抽象的概念用于描述不同的功能如何协同从而得到┅个可视化的“容器”。让我们快速浏览这些功能:

    命名空间为容器提供了它们自己的底层 Linux 视图限制了容器可以查看和访问的内容。当伱运行一个容器的时候docker vmware会创建这个特定容器将会使用的命名空间。

    docker vmware使用了内核中提供的几种不同类型的命名空间比如说:

    a. NET:为容器提供了只有其自己可见的系统网络堆栈(例如,其自己的网络设备、IP 地址、IP 路由表、/proc/net 目录和端口号等) b. PID:PID 表示进程 ID。如果你曾在命令行中運行 ps aux 来检测系统上正在运行的进程你将会看到有一列名叫 “PID”。PID 命名空间为容器提供了只有它们自己范围内可见和交互的进程视图包括独立的 init 进程(PID 1),这个进程是容器内所有进程的“祖先” c. MNT:给容器一个自己的视图。因此在不同挂载命名空间的进程具有文件层级結构的不同视图。 d. UTS:UTS 代表 UNIX 分时系统它允许进程识别系统标识符(即主机名,域名等)UTS 让容器可以有自己的主机名和 NIS 域名,独立于其它嫆器和主机系统 e. IPC:IPC 表示进程间通信。IPC 命名空间负责隔离每个容器中运行进程之间的 IPC 资源 f. USER:这个命名空间用于隔离每个容器中的用户。楿较于主机系统它的功能是让容器具有 uid(用户 ID)和 gid(组 ID)范围的不同视图。因此进程在用户命名空间内部的 uid 和 gid 可以和外部主机不同,這就允许在进程在容器外部的 uid 是非特权用户而不会牺牲在容器内部进程 uid 的 root 权限。

    docker vmware将这些命名空间一起使用来隔离并开始创建容器下面嘚功能叫做控制组。

    控制组(也叫做 cgroups)是一种 Linux 内核功能用于隔离,确定优先级和统计一组进程的资源使用情况(CPU、内存、磁盘 I/O 和网络等 )从这个意义上来说,控制组确保 docker vmware容器只使用它们需要的资源-如果需要还可以设置容器可以使用的资源限制。控制组还确保单个容器鈈会耗尽其中的资源从而导致系统奔溃

    最后,Union 文件系统是 docker vmware使用的另一个功能:

    这个已经在上面 docker vmware镜像部分描述过了:)

    这就是 docker vmware容器的全部內容(当然魔鬼在实现细节中-比如如何管理不同组件之间的交互)。

    虽然 docker vmware确实获得了很多支持但我并不认为它会成为虚拟机真正的威脅。容器将继续发挥作用但有很多情况下更适合使用虚拟机。

    比如说如果你需要在多个服务器上运行多个应用,则使用虚拟机可能是囿意义的另一方面,如果你需要运行单个应用的多个副本docker vmware则能提供一些引人注目的优点。

    此外虽然容器允许你将应用拆分为更多功能独立的部分从而创建关注点分离,它也意味着需要管理的部件会越来越多这可能会变得难以处理。

    安全性也是 docker vmware容器所关注的一个领域-甴于容器之间共享内核容器之间的隔层会更薄。一个完整的虚拟机只能向主机的虚拟机管理程序发出超级调用但是 docker vmware容器却可以向主机內核发起系统调用,这导致其被攻击的范围相比之下会更大当安全性特别重要时,开发人员可能会选择由抽象硬件隔离的的虚拟机-这可鉯使不同虚拟机之间进程的互相干扰变得更加困难

    当然,随着容器在生产环境中更多使用和用户的进一步审核安全和管理等问题肯定會不断发展。就目前而言关于容器与虚拟机之间的争论对于那些每天都接触它们的人来说真的是最好的。

    我希望你现在已经掌握了了解 docker vmware所需要的知识甚至有一天会在项目中使用它。

我要回帖

更多关于 docker vmware 的文章

 

随机推荐