Docker是一个重新定义了程序开发测试、交付和部署过程的开放平台。Docker也是容器技术的一种,它运行于Linux宿主机之上,每个运行的容器都是相互隔离的,也被称为轻量级虚拟技术或容器型虚拟技术。而且它有点类似Java的编译一次,到处运行,Docker则可以称为构建一次,在各种平台上运行,包括本地服务器和云主机等(Build once,run anywhere)。

容器就是集装箱,我们的代码都被打包到集装箱里;Docker就是搬运工,帮你把应用运输到世界各地,而且是超高速。

实际上Docker的出现离不开很多Linux kernel提供的功能,甚至可以说Docker在技术上并没有什么特别重大的创新之处,利用的都是已经非常成熟的Linux技术而已,这些技术早在Solaris 10或Linux Kernel 2.6的时候就有了。可以毫不夸张的说Docker就是“站在了巨人的肩膀上”。

Docker

一、Docker站在巨人Linux的肩膀上

下面我们就先来了解一下Docker主要利用的Linux技术。

1)容器技术容器(Container)

有时候也被称为操作系统级虚拟化,以区别传统的Hypervisor虚拟技术。它不对硬件进行模拟,只是作为普通进程运行于宿主机的内核之上。

在容器中运行的一般都是一个简易版的Linux系统,有root用户权限、init系统(采用LXC容器的情况下)、进程id、用户id以及网络属性。

2)LXC

这也是在Linux下使用比较广泛的容器方案。基本上我们可以认为Linux containers =cgroups(资源控制) + namespaces(容器隔离)。

LXC很成熟很强大,然而它却不好使用,比如它不方便在多台机器间移动,不方便创建管理,不可重复操作,也不方便共享等等,相对于开发人员来说,它只是系统管理员的玩具。Docker的出现很好的解决了这些问题,它将容器技术的使用成本拉低到了一个平民价格。

3)namespaces

这是用来为容器提供进程隔离的技术,每个容器都有自己的命名空间,比如pid/net/ipc/mnt/uts等命名空间,以及为容器提供不同的hostname.namespace能保证不同的容器之间不会相互影响,每个容器都像是一个独立运行着的OS一样。

4)cgroups

cgroups是一个Google贡献的项目,它主要用来对共享资源的分配、限制、审计及管理,比如它可以为每个容器分配CPU、内存以及blkio等的使用限额等。cgroups使得容器能在宿主机上能友好的相处,并公平的分配资源以及杜绝资源滥用的潜在风险。

5)联合文件系统

联合文件系统是一个分层的轻量、高性能文件系统。Docker之所以这么吸引人,很大程度上在于其在镜像管理上所做出的创新。而联合文件系统正是构建Docker镜像的基础AUFS(Another Union FS)是一个分层的基于Copy On Write技术的文件系统,支持Union Mount,就是将具有不同文件夹结构的镜像层进行叠加挂载,让它们看上去就像是一个文件系统那样。

容器技术实现方案可以用下面的图进行简单说明。

docker1

二、Docker可以干什么?

Docker可以应用在各种场景下,比如公司内部开发测试使用,或者作为共有或者私有PaaS平台等。

现在PaaS平台的发展已经非常成熟了,这里我们只罗列一些在开发中使用Docker技术可能会给我们带来的益处。

1)在开发中

构建开发环境变得简单,简单包括几个方面的意思快速:只需docker run即可共享:通过Dockerfile 或者Registry自动化:一切代码化的东西都可以自动化统一:每个人的开发环境都是一模一样的设想我们要基于Nginx/PHP、MySQL和Redis开发,我们可以创建3个Docker镜像保存到公司私有的Registry中去,每个开发人员使用的时候是需要执行docker run redis即可以享用自己独有的Redis服务了,而且这3个容器不管从占用磁盘空间还是运行性能来说,都比虚拟机要好很多。

2)在测试中

解决环境构建问题:有时候构建测试的环境是一项费时费力的工作,而Docker能让这变得轻松。如果你的测试比较简单的话,甚至直接拿开发构建的镜像就可以开始了。

消除环境不一致导致的问题:“在我的机器上运行的好好的,怎么到你那里就不行了?”,我想超过半数的程序员都曾经说过类似的话。如果对导致这一问题的原因进行统计的话,我想排在第一位的应该非“环境不一致”莫属了,这包括操作系统和软件的版本、环境变量、文件路径等。

使用Docker的话你再也不用为此烦恼了。因为你交付的东西不光是你的代码、配置文件、数据库定义,还包括你的应用程序运行的环境:OS加上各种中间件、类库 + 你的应用程序。

3)在部署和运维

1.基于容器的部署和自动化

Docker定义了重新打包程序的方法:Docker容器 + 用户应用 = 部署单位(构件)。

Docker可以看作是用代码编写出来的国际集装箱,它可以把任何应用及相关依赖项打包成一个轻量、可移植(Portable)、自包含的容器。

以前部署代码都是代码级别的,有了Docker,则可以进行容器级别的部署。这样带来的最大的好处就是开发者本地测试、CI服务器测试、测试人员测试,以及生产环境运行的都可以是同一个Docker镜像。

2.快速进行横向扩展

Docker容器的启动速度很快,可以瞬间启动大量容器,所以在非常适合在业务高峰期进行横向扩展。这比传统的启动EC2实例或者物理机可要快多了。

三、Docker天生与云计算技术相结合

当然,由于Docker具有很好的移植性,所以它更强大的地方还在于和云环境结合使用。

Docker容器是可移植的,或者说跨平台。将来的应用部署可能是在本地进行打包(成Docker镜像)然后传送到云端运行,至于是AWS还是GCE 这不是问题,Docker都能在其上运行。这样不仅能在一定程度上解决vendor-lockin的问题,同时也使得在不同的云服务提供商之间迁移也变得简单。尤其是未来在使用多云(multi-cloud)环境的时候,这将非常便利。

关注中国IDC圈官方微信:idc-quan 我们将定期推送IDC产业最新资讯

查看心情排 行你看到此篇文章的感受是:


  • 支持

  • 高兴

  • 震惊

  • 愤怒

  • 无聊

  • 无奈

  • 谎言

  • 枪稿

  • 不解

  • 标题党
2019-07-31 12:13:13
云资讯 京东云发布《私有云&混合云白皮书》 构建客户想要的云平台
伴随着人工智能、大数据、物联网等技术的不断发展,以及5G时代的来临,企业IT系统的云化成为大势所趋。客户多样化、个性化的应用需求对云厂商提出更多要求。 <详情>
2019-07-31 10:31:00
边缘计算 企业必须进入云端吗?可以进入边缘计算
如今物联网的应用越来越广泛,但需要具有企业的视角。这意味着垂直行业应用程序、开发生态系统、产品设计、硬件、部署等。 <详情>
2019-07-31 10:19:00
云资讯 谷歌牵手VMware将虚拟化工作负载引入谷歌云
彭博社报道称,谷歌与VMware正在展开合作,帮助企业更轻松地在Google Cloud Platform上运行VMware vSphere虚拟化软件和网络工具。 <详情>
2019-07-31 09:52:00
云资讯 谷歌与戴尔旗下云计算公司VMware建立新合作 试图追赶竞争对手
据国外媒体报道,当地时间周一,谷歌宣布与戴尔旗下的云计算公司VMware建立新的合作伙伴关系,帮助更多企业迁移到云端,从而试图追赶其竞争对手。 <详情>
2019-07-31 09:10:00
云技术 云计算时代,硬件为什么仍然非常重要?
加利福尼亚大学圣迭戈分校采用了“云优先”的战略,他们淘汰了三台大型机、将尽可能多的计算工作负载转移到云端、尽可能放弃内部部署软件,转而使用软件即服务。 <详情>