说起 “容器” ,大家的第一反应肯定是日常生活中使用的锅碗瓢盆,或者装运货物的箱子盒子,用来盛放各种各样的物品。那么拿港口码头来说,每天都要通过船舶向外运送大量的货物。装货的时候肯定不会直接扔进船舱,所以每个码头都会用大量的集装箱来运载货物。有了这些集装箱,货物不用杂乱无章地堆放在一起,又可以按照分类一层一层地摆放,更易于管理,同时也方便运输。
那么我们今天说的 “容器” 究竟是什么呢?它的灵感其实就来源于那些 “集装箱” 。在说 “容器” 之前,先来简单讲一下我们很耳熟的 —— “虚拟机(VM)”,并对比一下两者的区别。
虚拟机与容器
虚拟机(VM),大家肯定不会陌生了,作为一名计算机专业毕业的小编,在大学课程中也会使用虚拟机来学习 Linux 操作系统。顾名思义,虚拟机就是用来模拟计算机系统的软件,让使用者可以在一台计算机上运行看似多台计算机的设备。在一些需要不同类型的硬件或操作系统上运行软件的需求,虚拟机是一个好帮手,这样就无需使用其他的硬件了。
自从虚拟化技术和云计算服务出现以来,大大小小的 IT 公司都将虚拟机作为降低成本和提高效率的一种方式。但是,虚拟机会占用大量系统资源。每个虚拟机不仅要运行一个完整的操作系统,还需要运行操作系统要运行的所有虚拟硬件。这样就会消耗大量的内存和 CPU 资源。与运行单独的物理计算机相比,这样是比较经济的;但对于某些应用程序而言却是很浪费的。
这种情况下,就促进了容器的发展。
容器(Container)是一种更轻量级,更灵活的虚拟化处理方式,它将一个应用程序所需的一切打包在一起。容器包括所有代码,各种依赖甚至操作系统,这让应用程序几乎在任何地方都可以运行。因此它的诞生,解决了一个重要问题:如何确保应用程序从一个环境移动到另一个环境的正确运行。它只是虚拟了操作系统,而不像虚拟机一样去虚拟底层计算机。
△ 虚拟机(VM)与容器(Container)
那么对比虚拟机,容器有哪些特点呢?
目前容器技术的现代形式主要体现在应用程序容器化(如 Docker)和系统容器化(如 LXC)中。这两种形式的容器都能让 IT 团队从底层架构中抽象出程序代码,从而实现跨各种部署环境的可移植性。
容器通常位于物理服务器及其主机操作系统之上。它可以通过单个操作系统安装来运行多个工作环境。因此容器特别 “轻” —— 它们只有几兆字节,只需几秒钟即可启动。
与虚拟机相比,内存,CPU 和存储效率的提高是容器技术的关键优势。由于可以在同一基础架构上支持更多容器,那么这些资源的减少就可以转化为巨大的成本节省,同时还可以减少管理开销。
△ 虚拟机和容器的特点对比
容器技术与 DevOps
说到容器技术,就不得不提一下 DevOps。DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
2014 年 11 月,Docker 作为有潜在趋势的容器技术进入了 DevOps 的世界。它通过简单的包装和应用程序运输加快了持续部署的能力,进而得到了普及。Docker 作为一项开源工具,可以将应用程序及其依赖(如配置文件等)打包到容器中,就可以在任何 Linux 服务器上运行该容器,而不会出现任何兼容性问题。
容器化是一个相当古老的概念,但 Docker 带来了一些新的东西,早期的技术却没有。
Docker 旨在整合大多数最近时期常用的 DevOps 工具,如 Puppet,Ansible,Jenkins等。
有了 Docker ,开发人员可以轻松地将其生产环境复制为可立即运行的容器应用程序,让工作更有效率。
Docker 允许应用程序在笔记本电脑,内部服务器,公共云或私有云等上运行,从而实现灵活性和可移植性。管理和部署应用程序要容易得多。
Docker 实现了一个高级 API ,以提供单独运行进程的轻量级容器。
如今,Docker 主要由开发人员和系统管理员用于与 DevOps 相关联地构建和运行分布式应用程序。
容器技术与微服务
微服务作为一个新兴的软件架构,和容器技术也有着密不可分的关系。微服务就是把一个大型的单个应用程序和服务拆分为数十个小型的服务。一个微服务的策略可以让工作变得更为简便,它最大的一个优点是可以比传统的应用程序更有效地利用计算资源。
大多数服务都有不同的资源要求。无论是网络,磁盘,CPU 还是内存,某个资源会比其他资源使用得更多。虽然云供应商可以提供针对内存,磁盘 IO 或 CPU 的不同设置,但系统仍然会留下大量的冗余资源。
△ 资源冗余
有了微服务,混合具有不同资源分配配置文件的服务可以提供最佳利用率。
△ 微服务提供最佳利用率
由于微服务类似于小型应用程序,因此我们必须将微服务部署到自己的虚拟机实例。可以想象,将整个虚拟机专门用于部署应用程序的一小部分并不是最有效的选择。但是,使用容器技术,可以降低性能开销并在同一台服务器部署上千个微服务,因为容器比虚拟机需要的计算资源要少得多。微服务进行容器化是很有必要的。它可以提高利用率和可用性,降低成本。
CIO之家 www.ciozj.com 公众号:imciow