Docker系列:Docker容器介绍

什么是Docker?

640?wx_fmt=png

Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初发起者是dotCloud公司。Docker自开源后就受到广泛的关注和讨论,项目后来加入了Linux 基金会,遵从了Apache 2.0 协议,项目代码在GitHub上进行维护。目前已有多个相关项目,逐渐形成了围绕Docker的生态体系。dotCloud公司后来也改名为Docker Inc,专注于Docker相关技术和产品的开发。

现在主流的Linux操作系统都已经支持Docker。例如,Redhat RHEL 6.5/ CentOS 6.5往上的操作系统、Ubuntu 14.04操作系统,都已经默认带有Docker软件包。Google公司宣称在其PaaS平台及服务产品中广泛应用了Docker。微软公司宣布和Docker公司合作,以加强其云平台Azure对Docker的支持。公有云提供商亚马逊也推出了AWS EC2 Container,提供对Docker的支持。

Docker 0.9之后是一款基于libcontainer的开源容器管理引擎(0.9之前是基于LXC(LXC,Linux Container)),它把复杂的容器创建与使用方式简化为Docker自己的一套命令体系,使得操作更为简便。用户操作Docker的容器就像操作一个快速轻量级的虚拟机一样简单。下面的图片比较了Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。

640?wx_fmt=png

Docke项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker使用的”容器”技术,主要是以Linux内核的namespace、cgroup等特性为基础,保障进程或者进程组处于一个隔离、受限、安全的环境之中。Docker第一版本在2013年3月发行,而cgoups正式在Linux操作系统中的亮相可以追溯到2007年下半年,当时cgoups被合并至Linux内核2.6.24版本。这整整6年时间并不是Linux平台”容器”技术发展的真空期。2008年LXC(Linux Container)诞生,它简化了容器的创建与管理;之后业界一些Paas平台也初步尝试采用容器技术作为其云应用的运行环境。而在Docker发布的同年,Google也发布了开源容器管理工具lmctfy,除此之外,若抛开了Linux操作系统,其他操作系统(如FreeBSD、Solaris等)同样诞生了作用类似的容器技术,其发展历史更是可以追溯更远。

总之,容器技术的发展不可谓短暂,然而论同时代的影响力,却鲜有Docker的媲美者。不论是云计算大潮催生了Docker技术,抑或是Docker技术赶上了云计算的大时代,毋庸置疑的是,Docker作为技术领域的新宠儿,必将继续受到业界的广泛青睐。云计算时代,分布式应用逐渐流行,大部分应用对自身的构建、交付和运行都有着传统不一样的需求。借助Linux内核的namespace和cgroup等特性,自然可以实现应用运行环境的资源隔离与限制等;然而,namespace和cgroup等内核特性却无法为容器的运行环境做全盘打包。而Docker的设计则非常巧妙地考虑到了这一点,除namespace和cgroup之外,Docker还采用了如”镜像”技术作为Docker管理文件系统以及运行环境强有力的补充等。

Docker有哪些好的特性?

作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。首先, Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。其次, Docker对系统资源的利用率很高,一台主机上可以同时运行数千个Docker容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行10个不同的应用就要起10个虚拟机,而Docker只需要启动10个隔离的应用即可。

具体说来, Docker 在如下几个方面具有较大的优势。

更快速的交付和部署

对开发和运维(devops)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

更高效的虚拟化

Docker容器的运行不需要额外的hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

3)更轻松的迁移和扩展

4)更简单的管理

5)CPU/内存的低消耗

6)快速开/关机

7)跨云计算基础构架

Docker的局限性有哪些?

Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:

1)Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用。

2)LXC是基于Cgroup等Linux kernel功能的,因此Container的Guest系统只能是Linux base的。

3)隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库。

网络管理相对简单,主要是基于namespace隔离。

4)cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)。

5)docker对disk的管理比较有限。

6)container随着用户进程的停止而销毁,container中的log等用户数据不便收集。

所以针对以上局限性可以分为以下的适用性:

针对1-2,有windows base应用的需求的基本可以pass了。

针对3-5,主要是看用户的需求,到底是需要一个container还是一个VM,同时也决定了docker作为 IaaS 不太可行。

针对6-7,虽然是docker本身不支持的功能,但是可以通过其他手段解决(disk quota, mount –bind)。

总之,选用container还是vm,就是在隔离性和资源复用性上做权衡。另外即便docker 0.7能够支持非AUFS的文件系统,但是由于其功能还不稳定,商业应用或许会存在问题,而AUFS的稳定版需要kernel 3.8, 所以如果想复制dotcloud的成功案例,可能需要考虑升级kernel或者换用ubuntu的server版本(后者提供deb更新)。这也是为什么开源界更倾向于支持ubuntu的原因(kernel版本)。

Docker解决了什么问题?

云计算、大数据,移动技术的快速发展,加之企业业务需求的不断变化,导致企业架构要随时更改以适合业务需求,跟上技术更新的步伐。毫无疑问,这些重担都将压在企业开发人员身上;团队之间如何高效协调,快速交付产品,快速部署应用,以及满足企业业务需求,是开发人员亟需解决的问题。Docker技术恰好可以帮助开发人员解决这些问题。

为了解决开发人员和运维人员之间的协作关系,加快应用交付速度,越来越多的企业引入了DevOps这一概念。但是,传统的开发过程中,开发、测试、运维是三个独立运作的团队,团队之间沟通不畅,开发运维之间冲突时有发生,导致协作效率低下,产品交付延迟, 影响了企业的业务运行。Docker技术将应用以集装箱的方式打包交付,使应用在不同的团队中共享,通过镜像的方式应用可以部署于任何环境中。这样避免了各团队之间的协作问题的出现,成为企业实现DevOps目标的重要工具。以容器方式交付的Docker技术支持不断地开发迭代,大大提升了产品开发和交付速度。

此外,与通过Hypervisor把底层设备虚拟化的虚拟机不同,Docker直接移植于Linux内核之上,通过运行Linux进程将底层设备虚拟隔离,这样系统性能的损耗也要比虚拟机低的多,几乎可以忽略。同时,Docker应用容器的启停非常高效,可以支持大规模的分布系统的水平扩展,真正给企业开发带来福音。

正如云技术专家刘艳凯所说的那样:“任何一项技术的发展和它受到的追捧,都是因为它能够解决困扰人们的问题,”Docker正是这样的一种技术。Docker的解决问题能力虽然很强,但在企业中的实际应用却并不多,那么是什么问题阻碍了Docker在企业中的实践?

Docker安全性问题

1)Docker环境安全

Docker的势头在过去的12个月里十分火热,很多人表示很少见如此能够吸引行业兴趣的新兴技术。然而,当兴奋转化为实际部署时,企业需要注意Docker的安全性。了解Docker的人都知道,Docker利用容器将资源进行有效隔离。因此容器相当于与Linux OS和hypervisor有着几乎相同的安全运行管理和配置管理级别。但当Docker涉及到安全运营与管理,以及具有保密性、完整性和可用性的通用控件的支持时,Docker可能会让你失望。

当Docker运行在云提供商平台上时,Docker安全性变得更加复杂。你需要知道云提供商正在做什么,或许你正在于别人共享一台机器。Docker虽然容器没有内置的安全因素,而且像Docker这样的新兴技术很难有比较全面的安全措施,但这并不意味着以后也不会出现。

2)Docker确保容器部署安全性

也有专家将Docker安全问题的实质定位于配置安全,认为Docker目前的问题是很难配置一个安全的容器。虽然现在Docker的开发人员通过创建非常小的容器来降低攻击面,但问题在于大型企业内部在生产环境中运行Docker容器的员工需要有更多的可见性和可控性。企业在部署数千或数万台Docker容器时,能够确保这些Docker容器都遵守企业安全策略进行配置是至关重要的事情。

Docker为解决这个问题,就需要增加Docker容器部署的实时可见性,同时实施企业制定的安全策略。也有一些厂商为此推出解决方案,给运营商提供了实时可见性并帮助他们执行容器级别的虚拟基础设施的安全策略。

出处:https://www.cnblogs.com/zuxing/articles/8717153.html

原文链接:https://blog.csdn.net/itfly8/article/details/100891035

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享