虚拟机&容器技术
博客专区 > 阿dai 的博客 > 博客详情
虚拟机&容器技术
阿dai 发表于5个月前
虚拟机&容器技术
  • 发表于 5个月前
  • 阅读 49
  • 收藏 1
  • 点赞 0
  • 评论 0
摘要: 近期无意间看到这样一则消息“LinuxCon+ContainerCon+CloudOpen中国大会在北京成功举办”,初学Linux的小白在...

近期无意间看到这样一则消息“LinuxCon+ContainerCon+CloudOpen中国大会在北京成功举办”,初学Linux的小白在使用着虚拟机进行一系列操作,Container的出现让我产生了好奇心,今天看到一篇关于容器的文章,稍作整理,跟大家分享一下:

虚拟机

虚拟机(Virtual Machine),在计算机科学中的体系结构裏,是指一种特殊的软件,他可以在计算机平台和终端用户之间创建一种环境,而终端用户则是基于这个软件所创建的环境来操作软件。在计算机科学中,虚拟机是指可以像真实机器一样运行程序的计算机的软件实现。

容器是什么?

容器是轻量级的操作系统级虚拟化,可以让我们在一个资源隔离的进程中运行应用及其依赖项。运行应用程序所必需的组件都将打包成一个镜像并可以复用。执行镜像时,它运行在一个隔离环境中,并且不会共享宿主机的内存、CPU 以及磁盘,这就保证了容器内进程不能监控容器外的任何进程。

容器与虚拟机之间的区别

虚拟机通常包含整个操作系统及其应用程序,同时也需要运行一个 hypervisor 来控制虚拟机。
因为虚拟机包括操作系统,所有大小一般是几个 G。使用虚拟机的缺点之一是启动操作系统以及初始化托管应用会花费几分钟的时间,但是,容器是轻量级的而且大小在 M 以内。性能方面,与 VM 相比,容器表现更加出色,并且几乎可以秒启动。

Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的"元"操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor)。Hypervisor是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。

容器解决了哪些问题呢?

大多问题都是在运行环境改变时才显现的,可能是这样一种场景,开发者把代码从开发环境 push 到测试环境然后到更上层的环境。比如开发者在 Windows 上编写应用代码,但是上层环境(测试、stage 或是生产环境)是基于 Linux 的。在这种情况下,当操作系统变化时,应用的某些功能可能就会出现问题。所以,基本上,当配套软件环境不一样的时候,间歇性故障的几率就会更大。

正如 Docker 创始人 Solomon Hykes 所说,“测试环境使用 Python 2.7,但是生产环境使用 Python 3,那么一些奇怪的事情就会发生。或者你依赖某个特定版本的 SSl 库的行为,但是却安装了另外一个版本。在 Debian 上运行测试环境,但是生产环境使用 Redhat,那么任何奇怪的事情都可能发生。”

改变可能不只是运行环境,也有可能是网络,Hykes 补充道,“网络拓扑可能不同,或者安全策略和存储也有可能不同,但是,软件需要在这些基础设施上面运行。”  

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化

容器的优点:

  1. 敏捷环境:容器技术最大的优点是创建容器实例比创建虚拟机示例快得多,容器轻量级的脚本可以从性能和大小方面减少开销。

  2. 提高生产力:容器通过移除跨服务依赖和冲突提高了开发者的生产力。每个容器都可以看作是一个不同的微服务,因此可以独立升级,而不用担心同步。

  3. 版本控制:每一个容器的镜像都有版本控制,这样就可以追踪不同版本的容器,监控版本之间的差异等等。

  4. 运行环境可移植:容器封装了所有运行应用程序所必需的相关的细节比如应用依赖以及操作系统。这就使得镜像从一个环境移植到另外一个环境更加灵活。比如,同一个镜像可以在 Windows 或 Linux 或者 开发、测试或 stage 环境中运行。

  5. 标准化: 大多数容器基于开放标准,可以运行在所有主流 Linux 发行版、Microsoft 平台等等。

  6. 安全:容器之间的进程是相互隔离的,其中的基础设施亦是如此。这样其中一个容器的升级或者变化不会影响其他容器。

容器的缺点:

  1. 复杂性增加:随着容器及应用数量的增加,同时也伴随着复杂性的增加。在生产环境中管理如此之多的容器是一个极具挑战性的任务,可以使用 Kubernetes 和 Mesos 等工具管理具有一定规模数量的容器。

  2. 原生 Linux 支持:大多数容器技术,比如 Docker,基于 Linux 容器(LXC),相比于在原生 Linux 中运行容器,在 Microsoft 环境中运行容器略显笨拙,并且日常使用也会带来复杂性。

  3. 不成熟:容器技术在市场上是相对新的技术,需要时间来适应市场。开发者中的可用资源是有限的,如果某个开发者陷入某个问题,可能需要花些时间才能解决问题。

容器分类:

操作系统容器

如维基百科中所述,“操作系统层虚拟化是一种计算机虚拟化技术,这种技术将操作系统内核虚拟化,可以允许多个独立用户空间的存在,而不是只有一个。这些实例有时会被称为容器、虚拟引擎、虚拟专用服务器或是 jails(FreeBSD jail 或者 chroot jail)。从运行在容器中的程序角度来看,这些实例就如同真正的计算机。”

如上所述,容器共享宿主机的内核,但是提供用户空间隔离。我们可以像在宿主机操作系统上一样,在容器中安装、配置以及运行应用程序。相似的是,分配给容器的资源仅对自己可见。就好比是,任何虚拟机不能获取其他虚拟机的资源。

当需要配置大量具有相同配置的操作系统时,操作系统容器就会非常有用。因此,容器有助于创建模板,可以用于创建与另一个操作系统类似风格的容器。

要创建操作系统容器,我们可以利用容器技术,如 LXC,OpenVZ,Linux VServer,BSD Jails 和 Solaris 区域。

应用容器

如维基百科所述,“应用程序虚拟化是从其所执行的底层操作系统封装计算机程序的软件技术。一个完全虚拟化的应用,尽管仍像原来一样执行,但是并不会进行传统意义上的安装。应用在运行时的行为就像它直接与原始操作系统以及操作系统所管理的所有资源进行交互一样,但可以实现不同程度的隔离或者沙盒化。”


在这种情况下,术语 “虚拟化” 是指被封装的工件(应用程序),这与其在硬件虚拟化中的含义截然不同,其中它涉及被抽象的工件(物理硬件)。


应用程序容器旨在作为单个进程进行打包和运行服务,而在 OS 容器中,可以运行多个服务和进程。
容器技术如 Docker 和 Rocket 就是应用程序容器的示例。

标签: 虚拟机 容器
共有 人打赏支持
粉丝 39
博文 158
码字总数 228114
×
阿dai
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: