容器从根本上改变了我们部署,分发和运行软件的基础。开发者可以开发本地的软件,然后知道了这个软件可以运行,而不用考虑主机环境在哪里。运维工程师则可以集中精力在网络资源和上线时间上,从而花费更少的时间配置环境和担心系统的依赖关系。使用容器的人数目前正在快速增长阶段,从刚起步的创业公司到大规模的企业。开发者和运维工程师有望于在下面的几年里继续的使用容器。
容器是一个应用和它的依赖关系的封装。在偶然一瞥下,你会以为它是一个轻量级的虚拟机,就像VM,一个隔离操作系统的实例,可以用于运行应用。
然而容器有几个优势,传统的VM根本无法实现
容器和主机OS共享资源,这使得他们有更高的效率。容器可以启动和停止在1s之内。应用运行在容器之中并不会引发过度消耗相比于运行在本地主机之中。
容器的便携性,在运行的环境中,有消除的细微改变引起的bug的潜力。它也可以放到一个年龄很大的开发者手中来制止他们说,"这在我的机器上运行的很好"。
容器的轻量级特效意味着开发者可以同时运行许多的容器,这使得可以仿真分布式系统。运维工程师也可以运行更多的容器在一个单主机的机器上而不是简单的使用一个VM。
容器对于终端用和远离部署环境之外的人有好处。用户可以下载和运行复杂的应用,而不需要花费大量时间在配置和安装问题上或者担心系统改变的需求。总之,这个应用的开发者可以避免担心用户环境的不同而导致依赖关系的可靠性。
更重要的是,VM和容器的目的是不同的,VM的目的是完全的仿真外部的环境,而容器的目的是为了让外部应用更加便携和自给自足。
尽管容器和VM看起来有很多相似的地方,它们也有很多不同的地方,用图表就很容易的解释它们。
图表1-1显示了三种应用运行在独立的虚拟机上在一个主机上。超级管理员(Hypervisor)被要求用来创建和运行VMs,控制访问底层的OS和硬件,同时在需要的时候解释系统调用。每一个VM都需要一个完全的OS副本,和运行在上面的应用和提供支持的库。
相比之下,图表1-2显示了,同样的三种应用可以运行在容器化的系统上。不像VMs,主机内核是被运行的容器所共享的。这就意味着容器一直被强制运行在与主机相同的内核上。应用Y和Z使用相同的库和可以共享这些数据,而不需要有冗余的拷贝。容器引擎负责用来启动和停止容器,类似于在VM上面的超级管理员(Hypervisor)。然而一个进程运行在容器内部等价于运行与本地进程,而不会引发多余的开支。
容器和VMs都可用于隔离运行在相同主机上的应用。VMs从超级管理员哪里增加了一定程度的隔离,VM是一种成熟的技术从而可以被信任。容器则是相对较新的,很多组织都在犹豫是否完全信任容器的隔离特性,在容器特性得到了良好的证明。由于这个原因,很容易发现,在虚拟机里面运行容器的混合系统会占据了两者的优势。
容器是一个很老的概念了,在过去几十年,UNIX操作系统使用chroot命令提供简单的文件系统形式的隔离。从1998年开始,FreeBSD有了jail工具,从而扩展了chroot沙盒到进程中。 Solaris Zone相对来说,在2001年则提供了完全的容器化技术,但是受限于Solaris的系统。在2001年,Parrallels Inc(后来的SWsoft)为linux发布了金融版本的Virtuozzo容器技术,后来在2005年,开放源码成了OpenVZ的核心技术。然后Google为Linux内核开始了Cgroups的开发,然后移动它的基础设施到容器上。Linux Containers(LXC)项目启动与2008年,然后与CGroups,Kernel namaspaces和chroot技术放在一起,来提供一个完全的容器方案。最后在2013年,Docker带来了最后的集装箱难题,技术开始进入主流。
Docker采用了Linux container技术,封装它然后从不同的方式扩展它——主要是通过便携的镜像和用户友好的接口——来为容器的创建和分发提供完全的解决方案。Docker平台有两个主要的元件: Docker Engine负责创建和运行容器。 Docker Hub负责分发容器的云服务。
Docker Engine提供了快速的和方便的借口来运行容器。在这之前,使用LXC技术运行容器需要很多专业知识和手工。Docker Hub提供了大量的公共容器镜像以便下载,允许用户快速的开始和避免了冗余的工作。通过Docker开发的更深入的工具,包括集群管理工具Swarm,,为Docker提供图形借口的Kitematic,为Docker主机提供命令行工具的Machine。
Docker Engine的开放源码,Docker以经成长为一个大的Docker社区,通过公众的帮助来修复bug和进行加强。Docker快速的增长意味着它以及高效的成为了de facto标准,到2015年,这已经到达顶峰,为了建立(Open Container Initiative),一个Docker,Microsoft,CoreOS和许多其它重要的组织赞助的政府的组织,它的使命是为了发展出标准的Docker 容器格式和运行形式。
Docker所带来的改变对于开发软件有重大的意义。没有Docker,容器技术将仍然停留在IT的阴影之中。
本文出自 “用心做事” 博客,请务必保留此出处http://amyhehe.blog.51cto.com/9406021/1744555
原文:http://amyhehe.blog.51cto.com/9406021/1744555