Build Once Run Anywhere & Configure Once Run Anything
一、什么是容器?
IT里的容器技术是英文单词Linux Container的直译。container这个单词有集装箱、容器的含义(主要偏集装箱意思)。不过,在中文环境下,咱们要交流要传授,如果翻译成“集装箱技术” 就有点拗口,所以结合中国人的吐字习惯和文化背景,更喜欢用容器这个词。
我们知道,海边码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色,在于其格式划一,并可以层层重叠,所以可以大量放置在特别设计的远洋轮船中。有了集装箱,那么这就更加快捷方便的为生产商提供廉价的运输服务。
IT世界里借鉴了这一理念。
早期,大家都认为硬件抽象层基于hypervisor的虚拟化方式可以最大程度上提供虚拟化管理的灵活性。各种不同操作系统的虚拟机都能通过hypervisor(KVM、XEN等)来衍生、运行、销毁。然而,随着时间推移,用户发现hypervisor这种方式麻烦越来越多。为什么?因为对于hypervisor环境来说,每个虚拟机都需要运行一个完整的操作系统以及其中安装好的大量应用程序。但实际生产开发环境里,我们更关注的是自己部署的应用程序,如果每次部署发布我都得搞一个完整操作系统和附带的依赖环境,那么这让任务和性能变得很重和很低下。
基于上述情况,人们就在想,有没有其他什么方式能让人更加的关注应用程序本身,底层多余的操作系统和环境我可以共享和复用?换句话来说,那就是我部署一个服务运行好后,我再想移植到另外一个地方,我可以不用再安装一套操作系统和依赖环境。这就像集装箱运载一样,我把货物一辆兰博基尼跑车(好比开发好的应用APP),打包放到一容器集装箱里,它通过货轮可以轻而易举的从上海码头(CentOS7.2环境)运送到纽约码头(Ubuntu14.04环境)。而且运输期间,我的兰博基尼(APP)没有受到任何的损坏(文件没有丢失),在另外一个码头卸货后,依然可以完美风骚的赛跑(启动正常)。
Linux Container(简称LXC)技术应运而生。
LXC是一种内核轻量级的操作系统层虚拟化技术。Linux Container主要由Namespace和Cgroup两大机制来保证实现。那么Namespace和Cgroup是什么呢?刚才我们上面提到了集装箱,集装箱的作用当然是可以对货物进行打包隔离了,不让A公司的货跟B公司的货混在一起,不然卸货就分不清楚了。那么Namespace也是一样的作用,做隔离。光有隔离还没用,我们还需要对货物进行资源的管理。同样的,航运码头也有这样的管理机制:货物用什么样规格大小的集装箱,货物用多少个集装箱,货物哪些优先运走,遇到极端天气怎么暂停运输服务怎么改航道等等… 通用的,与此对应的Cgroup就负责资源管理控制作用,比如进程组使用CPU/MEM的限制,进程组的优先级控制,进程组的挂起和恢复等等。
容器与管理程序虚拟化(hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一台或者多台独立的机器虚拟运行与物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行在同一台宿主机上。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
二.容器技术的特点
传统虚拟化(HV)与容器比较:
LXC HV
a. 启动速度; 秒级 分钟级
b. 存储空间; GB级 MB级
c. 性能; 接近原生 慢于
d. 运行数量; 一般几十个 上千个
e. 迁移 运维; 便捷 麻烦
f. 隔离性 安全性 隔离性差 隔离性较好
不安全 安全
三、容器的主要应用场景
容器技术的诞生其实主要解决了PAAS的层的技术实现。像OpenStack、Cloudstack这样的技术是解决IAAS层的问题。那么容器技术主要应用在哪些场景呢?目前主流的有以下几种:
\1. 容器化传统应用
容器不仅能提高现有应用的安全性和可移植性,还能节约成本。
每个企业的环境中都有一套较旧的应用来服务于客户或自动执行业务流程。即使是大规模的单体应用,通过容器隔离的增强安全性、以及可移植性特点,也能从 Docker 中获益,从而降低成本。一旦容器化之后,这些应用可以扩展额外的服务或者转变到微服务架构之上。
\2. 持续集成和持续部署 (CI/CD) 通过 Docker 加速应用管道自动化和应用部署,交付速度提高至少 13 倍。
现代化开发流程快速、持续且具备自动执行能力,最终目标是开发出更加可靠的软件。通过持续集成 (CI) 和持续部署 (CD),每次开发人员签入代码并顺利测试之后,IT 团队都能够集成新代码。 作为开发运维方法的基础,CI/CD 创造了一种实时反馈回路机制,持续地传输小型迭代更改,从而加速更改,提高质量。CI 环境通常是完全自动化的,通过 git 推送命令触发测试,测试成功时自动构建新镜像,然后推送到 Docker 镜像库。通过后续的自动化和脚本,可以将新镜像的容器部署到预演环境,从而进行进一步测试。
\3. 微服务 加速应用架构现代化进程。
应用架构正在从采用瀑布模型开发法的单体代码库转变为独立开发和部署的松耦合服务。成千上万个这样的服务相互连接就形成了应用。Docker 允许开发人员选择最适合于每种服务的工具或技术栈,隔离服务以消除任何潜在的冲突,从而避免“地狱式的矩阵依赖”。这些容器可以独立于应用的其他服务组件,轻松地共享、部署、更新和瞬间扩展。Docker 的端到端安全功能让团队能够构建和运行最低权限的微服务模型,服务所需的资源(其他应用、涉密信息、计算资源等)会适时被创建并被访问。
\4. IT 基础设施优化 充分利用基础设施,节省资金。
Docker 和容器有助于优化 IT 基础设施的利用率和成本。优化不仅仅是指削减成本,还能确保在适当的时间有效地使用适当的资源。容器是一种轻量级的打包和隔离应用工作负载的方法,所以 Docker 允许在同一物理或虚拟服务器上毫不冲突地运行多项工作负载。企业可以整合数据中心,将并购而来的IT资源进行整合,从而获得向云端的可迁移性,同时减少操作系统和服务器的维护工作。
四、容器的标准化
当前,docker几乎是容器的代名词,很多人以为docker就是容器。其实,这是错误的认识,docker 只是容器技术的一个产品,除了docker 还有coreos等。所以,容器世界里并不是只有docker一家。既然不是一家就很容易出现分歧。任何技术出现都需要一个标准来规范它,不然各搞各的很容易导致技术实现的碎片化,出现大量的冲突和冗余。
因此,在2015年,由Google,Docker、CoreOS、IBM、微软、红帽等厂商联合发起的OCI(Open Container Initiative)组织成立了,并于2016年4月推出了第一个开放容器标准。标准主要包括runtime运行时标准和image镜像标准。标准的推出,有助于替成长中市场带来稳定性,让企业能放心采用容器技术,用户在打包、部署应用程序后,可以自由选择不同的容器Runtime;同时,镜像打包、建立、认证、部署、命名也都能按照统一的规范来做。
两种标准主要包含以下内容:
容器运行时标准 (runtime spec)
a). creating:使用 create 命令创建容器,这个过程称为创建中;
b). created:容器创建出来,但是还没有运行,表示镜像和配置没有错误,容器能够运行在当前平台; c). running:容器的运行状态,里面的进程处于 up 状态,正在执行用户设定的任务;
d). stopped:容器运行完成,或者运行出错,或者 stop 命令之后,容器处于暂停状态。这个状态,容器还有很多信息保存在平台中,并没有完全被删除;
容器镜像标准(image spec)
a). 文件系统:以 layer 保存的文件系统,每个 layer 保存了和上层之间变化的部分,layer 应该保存哪些文件,怎么表示增加、修改和删除的文件等;
b). config 文件:保存了文件系统的层级信息(每个层级的 hash 值,以及历史信息),以及容器运行时需要的一些信息(比如环境变量、工作目录、命令参数、mount 列表),指定了镜像在某个特定平台和系统的配置。比较接近我们使用 docker inspect 看到的内容;
c). manifest 文件:镜像的 config 文件索引,有哪些 layer,额外的 annotation 信息,manifest 文件中保存了很多和当前平台有关的信息;
d). index 文件:可选的文件,指向不同平台的 manifest 文件,这个文件能保证一个镜像可以跨平台使用,每个平台拥有不同的 manifest 文件,使用 index 作为索引。
五. 容器的演进进程:
六.容器的构架
传统的HV技术与容器技术的构架比较:
容器技术的构架:
- 服务器层
当运行容器镜像时,容器本身需要运行在传统操作系统之上,而这个操作系统既可以是基于物理机,也可以是基于 VM。服务器层包含了这两种场景,泛指了容器运行的环境,同时容器并不关心服务器层如何提供和管理,它的期望只是能获得这些服务器资源。
- 资源管理层
资源管理包含了服务器、操作系统等资源的管理。其中如果是物理服务器的话,需要涉及物理机管理系统(例如Rocks等);如果是虚拟机的话,需要使用虚拟化平台。
- 运行引擎层
容器运行引擎层主要指常见的容器系统,包括 Docker、rkt、Hyper、CRI-O。这些容器系统的共通作用包括启动容器镜像、运行容器应用和管理容器实例。运行引擎又可以分为管理程序和运行时环境两个模块。 需要注意的是,运行引擎是单机程序,类似虚拟化软件的KVM和Xen,不是集群分布式系统。引擎运行于服务器操作系统之上,接受上层集群系统的管理。
- 集群管理
可以把容器的集群管理系统类和针对 VM 的集群管理系统划等号,都是通过对一组服务器运行分布式应用。而这两者的细微区别在于,VM 的集群管理系统需要运行在物理服务器上,而容器集群管理系统既可以运行在物理服务器上,也可以运行在 VM 上。
- 应用层
泛指所有运行于容器之上的应用程序,以及所需的辅助系统,包括:监控、日志、安全、编排、镜像仓库等等。
七.容器底层技术
容器底层的核心技术包括 Linux 上的名称空间(Namespaces)、控制组(Control groups)、切根(chroot)
名称空间(NameSpace)
名字空间是 Linux 内核一个强大的特性。每个容器都有自己单独的名字空间,运行在其中的应用都像是在独立的操作系统中运行一样。名字空间保证了容器之间彼此互不影响。
主要隔离:
隔离进程 隔离IPC 隔离MNT
隔离网络 端口隔离 用户隔离
主机名隔离...
PID
不同用户的进程就是通过 pid 名字空间隔离开的,且不同名字空间中可以有相同 pid。
Net
网络隔离是通过 Net 实现, 每个 Net 有独立的网络设备, IP 地址, 路由表, /proc/net 目录。这样每个容器的网络就能隔离开来。
IPC
容器中进程交互还是采用了 Linux 常见的进程间交互方法(interprocess communication – IPC), 包括信号量、消息队列和共享内存等。然而同 VM 不同的是,容器的进程间交互实际上还是 host 上具有相同 pid 名字空间中的进程间交互,因此需要在 IPC 资源申请时加入名字空间信息,每个 IPC 资源有一个唯一的 32位 id。
Mount
类似 chroot,将一个进程放到一个特定的目录执行。Mount 允许不同名称空间的进程看到的文件结构不同,这样每个名称空间中的进程所看到的文件目录就被隔离开了。同 chroot 不同,每个名称空间中的容器在 /proc/mounts 的信息只包含当前名称空间的挂载点。
UTS
UTS(“UNIX Time-sharing System”) 允许每个容器拥有独立的 hostname 和 domain name, 使其在网络上可以被视作一个独立的节点而非主机上的一个进程。
User
每个容器可以有不同的用户和组 id, 也就是说可以在容器内用容器内部的用户执行程序而非主机上的用户。
控制组(Control groups)
Cgroups 是 Linux 内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源的机制。
信息存放在:/sys/fs/cgroup
任务(task)
在cgroups中,任务就是系统的一个进程
控制族群(control group)
控制族群就是一组按照某种标准划分的进程。Cgroups中的资源控制都是以控制族群为单位实现。一个进程可以加入到某个控制族群,也从一个进程组迁移到另一个控制族群。一个进程组的进程可以使用cgroups以控制族群为单位分配的资源,同时受到cgroups以控制族群为单位设定的限制。
层级(hierarchy)
控制族群可以组织成hierarchical的形式,既一颗控制族群树。控制族群树上的子节点控制族群是父节点控制族群的孩子,继承父控制族群的特定的属性。
子系统(subsystem)
一个子系统就是一个资源控制器。子系统必须附加(attach)到一个层级上才能起作用,一个子系统附加到某个层级以后,这个层级上的所有控制族群都受到这个子系统的控制
blkio 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)
cpu 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问
cpuacct 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告
cpuset 这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点
devices 这个子系统可允许或者拒绝 cgroup 中的任务访问设备
freezer 这个子系统挂起或者恢复 cgroup 中的任务
memory 这个子系统设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告
net_cls 这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包
perf_event 这个子系统对 cgroup 中的任务进行统一的心跟那个测试
切根(chroot)
chroot(change to root) 其中 root 是根目录的意思,也就是改变(linux 根目录是/,也可以理解为设置)一个程序运行时参考的根目录的位置。
chroot 机制因为安全问题才被引入的,但是在 LXC 中却启动了举足轻重的作用,因为 chroot 机制可以指定虚拟根目录,让不同的容器在不同的根目录下工作
注意:
不同的容器进程参考的根目录不同,相互直接不影响;
不同的容器因为共享linux 底层的文件系统,所以容器集成os的功能,实现轻量级。
union FS:联合文件系统 支持写时复制
1.AUFS
2.overlay
3.overlay 2 只支持4.0以上的内核
本质上,容器是通过虚拟化操作系统的方式来管理代码和应用程序。虽然从协调网络到分配存储都存在挑战,但是初创公司还是紧紧抓住这些潜在的机会开始创业,下面是我们盘点的12家容器技术创业公司。
八.12家容器技术创业公司
BlueData
总部地址:美国加州山景城
成立时间:2012年
融资状况:1900万美元
关注理由:
容器技术被视为一个简化应用程序开发的方式,但是一些初创公司正在利用容器技术寻找创新的用例管理应用程序。BlueData正在前VMware研发副总裁Kumar Sreekanti的带领下开拓这样的创举。
该公司的目标是通过让大数据更易消费来“民主化”大数据部署,容器技术越来越成为公司战略中重要的一环。BlueData允许用户在Docker容器上部署大数据平台Hadoop和Apache Spark,并且可以通过其EPIC平台的免费试用获取容器化版本,它可以作为一个下载程序或一个托管应用程序运行在AWS ES2上。BlueData希望在今年秋天提供更全面的产品。
ClusterHQ
总部地址:旧金山
成立时间:2008年
融资状况:1500万美元
关注理由:
ClusterHQ 是一家帮助客户构建容器数据层的公司,使得开发和运维团队在容器中运行无状态的应用程序,但是应用的数据库、查询以及 Key-value 数据得到持久化存储。相当于是应用和数据隔离。ClusterHQ 主要基于Docker 平台实现该服务。
在2014年 ClusterHQ发布了名为Flocker的开源软件,这是一个数据卷管理器和多主机的 Docker 集群管理工具,可轻松实现对Docker及其数据的管理。同时还有另外一个项目Powerstrip,为Docker API实现了一个可配置、可插入式的HTTP代理,可以让你插入很多Docker 扩展原型到同一个Docker守护进程。
CoreOS
总部地址:旧金山
成立时间:2013年
融资状况:2000万美元
关注理由:
CoreOS的创始人认为容器是伟大的,但他们不喜欢Docker的一些关于安全和管理方面的设计决策。所以CoreOS团队除了推出自己的容器软件rkt还精心制作了一个轻量级的基于Linux内核的操作系统。类似于开源项目Docker,rkt是一个允许容器创建的容器运行版本。
CoreOS也有成熟的Tectonic——一个Kubernetes商业发行本,如果Docker在短期内会有竞争对手,它一定是CoreOS。
Docker
总部地址:旧金山
成立时间:2013年
融资状况:1.5亿美元
关注理由:
在容器领域,没有公司比Docker更出名的了。
Docker既是一个开源项目的名称也是一个公司的名称。这个开源项目由一个包括Docker公司员工以及其他公司的代码贡献者组成的董事会主导。随着公司的发展,公司也已经在其产品上增加管理功能,例如容器需要的网络控制。开源的Docker已成为容器运行的事实标准,这使得Docker在商业化容器管理方便提供了一个巨大的机遇,Docker首席技术官Solomon Hykes被认为在推动容器运动过程中发挥了重要作用。
Kismatic
总部地址:旧金山
成立时间:2014年
融资状况:保密
关注理由:
谷歌曾表示它几乎所有的应用程序都运行在容器中,去年,它开源了一款称为Kubernetes的服务可以帮助基础设施集群和容器的管理。Kismatic这个初创公司就是希望Kubernetes商业化。
到目前为止,该公司的公开的信息很少,但预计Kismatic将试图使Kubernetes对于用户更友好。Kismatic背后的人来自另一个编排技术提供商Mesos。一位担任Wikimedia Foundation.的首席技术官。
PortWorx
总部地址:美国加州雷德伍德城
成立时间:2015年
融资状况:850万美元
关注理由:
Portworx的联合创始人兼CTO Gou Rao表示,开发者喜欢Docker容器可以简化从开发到部署的软件系统生命周期,但为多容器应用提供基础设施资源仍然是一个复杂繁琐的过程,而且很容易产生非预期的后果。
他还表示,容器技术还不足以应用至生产环境中,而主要的问题在于存储和网络。
Murli Thirumale也是Portworx的联合创始人,目前是公司的CEO。Portworx并不是Gou Rao和Murli Thirumale的第一个初创公司。二人也是存储优化公司Ocarina Networks的联合创始人,这一公司在2010年被戴尔收购。再之前他们还创办了Net6,一家应用交付解决方案公司。在2007年,Net6被Citrix收购。
数据中心的基础设施不是为容器技术所设计的,Portworx正在试图改变这一局面。现在基础设施的准备配置是在应用之外独立完成的。应用需要指明需要哪些资源,准备完成配置好之后才能进行部署。
Rancher Labs
总部地址:库比蒂诺(苹果总部所在地)
成立时间:2014年
融资状况:1000万美元
关注理由:
Rancher Labs是一家提供容器技术基础设施的初创企业,成立于2014年9月,总部位于Cupertino,现有员工20人。创始人Sheng Liang与Shannon Williams是Citrix前员工,曾创办了云服务Cloud.com并在后来被Citrix收购。
对于许多开发者来说,如何实施和扩充Docker仍然是个难题,尤其是生产环境下的架设。Rancher Labs正是瞄准这一机会而推出了Docker基础设施软件。
Rancher为开发者提供了两种服务,一是将Dockers编排进任何基础设施环境的软件平台Rancher,二是简约版的操作系统RancherOS,可用来单独运行Docker。这些服务还提供了数据备份等其他功能,使得开发者在实际部署基于Docker的应用时不用考虑具体的生产环境,从而进一步简化容器技术的部署工作。
Shippable
总部地址:西雅图
成立时间:2013年
融资状况:1010万美元
关注理由:
Shippable团队希望让开发人员利用容器来方便的构建应用程序。容器是书写、测试和发布代码的完美媒介,他们说。
这家公司是由一个来自微软和Cloud Foundry的团队创立,Shippable是一个允许开发人员书写代码、立即测试的托管服务。
在过去,测试环境很大程度上依赖的虚拟机。在微软,Shippable联合创始人Avi Cavale管理一个数百万美元的基于VMs的测试环境实验室。Cavale说,测试环境的封装将可以大大降低。
Sysdig Cloud
总部地址:旧金山
成立时间:2013年
融资状况:秘密
关注理由:
监控容器可能听起来不算最令人兴奋的话题,但这至关重要的。启动并运行容器容易,但是你有多少呢?运行于其中的应用程序是什么?这些容器与其他应用程序是如何与其他应用程序发生交互的?Sysdig就是解决这类问题。
这个Linux监测平台是一个开放源代码项目,可以从GitHub上免费下载,产品和公司名称相同。它提供如系统健康检查,容器网络连接,容器内的集中输入/输出,容器上执行命令的历史记录,描述容器是运行在哪一台计算机上以及哪些应用程序是运行在容器中的。而且它提供了一个可排序的所有日志数据记录。这些都可以通过一个命令行界面或基本面板获取,创始人兼首席执行官Loris Degioannii曾供职于Riverbed Technologies。
Tutum
总部地址:布鲁克林,在马德里也有一个办公室
成立时间:2013年
融资状况:265万美元种子资金
关注理由:
Tutum开始作为一个公司想要提供一个完全托管容器环境。但它的创始人——惠普前技术员和Capgemini顾问——意识到像AWS也可以提供托管这样的服务。所以Tutum的真正区别是不托管容器,而是管理build的软件,所以公司现在专注在这块。
Tutum还管理容器必须的存储,以及提供容器追踪。Tutum团队希望在今年晚些时候推出测试版。
Twistlock
总部地址:旧金山
成立时间:2015年
融资状况:310万美元
关注理由:
该公司是由来自微软的Ben Bernstein 和 Dima Stopel领导的团队创立,其产品定位为保护和监控容器的“端到端”的安全产品。Twistlock提供了一个可定制化的控制面板在任何环境下监控容器,并通过一个成为“gates”的服务来帮助控制容器的组成。
Twistlock还允许安全性配置文件设置,以便在创建容器之时,遵循特定的原则。Twistlock用户可以限制哪些应用程序可以与容器交互,例如,如果容器安全措施不到位会触发警报。公司名称来自船运集装箱贸易,在那里扭锁用于容器之间的安全防护。
Weaveworks
总部地址:伦敦
成立时间:2014年
融资状况:500万美元
关注理由:
正在商业化Weave开源项目的Weaveworks公司,创建一个连接容器的虚拟网络。容器在它们的基本层面上没有网络连接。
有网络功能更易于监测和控制Docker容器。Weave分配给每个容器一个IP地址,允许它们与Scope工具映射。
CoreOS有自己的网络层Rudder,其他平台如Rancher和Portworx帮助管理容器的网络连接,但Weave是只关注网络,因此成为其他容器管理平台像Tutum不可或缺的一部分。首席执行官Alexis Richardson来自Pivotal,而首席技术官Matthias Radestock是RabbitMQ的联合创始人。该公司最初叫Zettio。
小结:
由于“客居”于操作系统,容器只能运行与底层宿主机相同或者相似的操作系统,这看起来并不是非常灵活。例如:可以在Ubuntu服务中运行Redhat Enterprise Linux,但无法再Ubuntu服务器上运行Microsoft Windows。
相对于彻底隔离的管理程序虚拟化,容器被认为是不安全的。而反对这一观点的人则认为,由于虚拟容器所虚拟的是一个完整的操作系统,这无疑增大了攻击范围,而且还要考虑管理程序层潜在的暴露风险。
尽管有诸多局限性,容器还是被广泛部署于各种各样的应用场合。在超大规模的多租户服务部署、轻量级沙盒以及对安全要求不太高的隔离环境中,容器技术非常流行。最常见的一个例子就是“权限隔离监牢”(chroot jail),它创建一个隔离的目录环境来运行进程。如果权限隔离监牢正在运行的进程被入侵者攻破,入侵者便会发现自己“身陷囹圄”,因为权限不足被困在容器所创建的目录中,无法对宿主机进一步破坏。
最新的容器技术引入了OpenVZ、Solaris Zones以及Linux容器(LXC)。使用这些新技术,容器不在仅仅是一个单纯的运行环境。在自己的权限类内,容器更像是一个完整的宿主机。对Docker来说,它得益于现代Linux特性,如控件组(control group)、命名空间(namespace)技术,容器和宿主机之间的隔离更加彻底,容器有独立的网络和存储栈,还拥有自己的资源管理能力,使得同一台宿主机中的多个容器可以友好的共存。
容器被认为是精益技术,因为容器需要的开销有限。和传统虚拟化以及半虚拟化相比,容器不需要模拟层(emulation layer)和管理层(hypervisor layer),而是使用操作系统的系统调用接口。这降低了运行单个容器所需的开销,也使得宿主机中可以运行更多的容器。
尽管有着光辉的历史,容器仍未得到广泛的认可。一个很重要的原因就是容器技术的复杂性:容器本身就比较复杂,不易安装,管理和自动化也很困难。而Docker就是为了改变这一切而生的。