`
jiezhu2007
  • 浏览: 241523 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
Cfa1f850-3fc3-3a36-9cd8-c3415c9610c6
hadoop技术学习
浏览量:141932
Group-logo
大数据产业分析
浏览量:2935
社区版块
存档分类
最新评论

快速理解docker

阅读更多
技术源头

简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案,Docker container和普通的虚拟机Image相比, 最大的区别是它并不包含操作系统内核。因此非常轻量。

 

普通虚拟机将整个操作系统运行在虚拟的硬件平台上, 进而提供完整的运行环境供应用程序运行, 而Docker则直接在宿主平台上加载运行应用程序. 本质上他在底层使用LXC启动一个Linux Container,通过cgroup等机制对不同的container内运行的应用程序进行隔离,权限管理和quota分配等,每个container拥有自己独立的各种命名空间(亦即资源)包括:PID 进程, MNT 文件系统, NET 网络, IPC , UTS 主机名 等。

 

Build,Ship,Run

 

LXC(linux container)已经出来很多年了,一直不温不火,docker为啥突然这么火?Docker引入了ship(发布)这个重要概念,打通了build,ship,run这一套软件开发流程。使软件开发、发布,运行变得简单,契合当前时髦的DeveOps的理念。

 

从技术角度看,基本上你可以认为目前的Docker是LXC的一个高级封装,提供了各种辅助工具和标准接口方便你使用LXC,你可以依靠LXC和各种脚本实现与docker类似的功能,就像你不使用APT/yum等工具也可以自己搞定软件包安装一样,你使用他们的关键原因是方便易用!实际使用中,你一般不用关心底层LXC的细节,同时也不排将来docker实现基于非LXC方案的可能性在LXC的基础上, Docker额外提供的Feature包括:标准统一的打包部署运行方案, 历史版本控制, Image的重用,Image共享发布等等。

 

什么阻碍docker的广泛应用

Docker理念非常好,当前技术也非常热门,但其实在实际产品中,真正用到docker的非常少。

安全问题,虚拟机的安全是经过验证的,这种轻量级的通过内存空间的隔离host OS非常容易被攻破,所以目前docker在公有云上的应用非常少。当能docker已经在这方面进行了很多改进,比如运行时的系统调用黑名单,围绕镜像的安全也引起了关注。

大型应用/复杂应用使用dockerfile基本是不可能的事情,由于他抽象层次太高,以至于不能应对复杂度的用例。

依赖大量的内核的新特性,而这些内核特性还远未成熟,在实际的使用过程中,常常出现稳定性问题。

虽然说这项技术还在成熟,总的来说,docker是一项非常有前景的技术。

docker生态系统

2013年是容器和周边技术高歌猛进的一年,这其中以Docker的流行为代表,以下两家公司和他们的产品具有标志意义。

  • 2013年,Docker version 0.10:Docker是PaaS提供商dotCloud(最近已经正式改名为Docker Inc.)开源的一个基于LXC的高级容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache 2.0协议开源。Docker的出现极大简化了容器的创建和管理,分层式的AUFS实现了Docker镜像。

  • 2013年,CoreOS:这家在硅谷某个车库里成立的创业公司发布了专门为大规模服务器部署定制的Linux精简系统,目的是为运行以轻量级容器为载体的应用提供一个高度优化的底层系统。

2014年,大量围绕Docker和CoreOS的创业公司、新近开源的软件项目、大型企业和互联网公司的加入,使轻量级容器技术的浪潮更上一层楼。

正如定义所言,Docker是“Container Engine”,它是一个把cgroup、namespace等容器底层技术抽象的一个引擎,为用户提供了创建和管理容器的便捷界面(包括命令行和API)。

概念明晰了,我们先从技术栈的维度来看Docker和它的生态系统,把从Linux到Docker做四个层面的分层。

  • Linux操作系统。完整的Linux内核,履行操作的使命:管理硬件,调度任务,提供用户界面和服务等。

  • 容器的内核实现。这主要包括Linux内核中的cgroup、namespace等,它们为容器(用户进程)的资源隔离性提供了内核层面的保障。

  • 轻量级容器的基础工具。通过LXC这样的工具可以完成容器创建、启动等基本操作,但使用LXC需要熟知容器内核实现原理。这对于普通用户来说有一定难度,并且LXC在不同Linux发行版不一致。

  • 容器管理引擎。Docker是这一层的主角。Docker由Docker engine和Docker client组成。Docker engine将神秘的cgroup、复杂的LXC统统隐藏起来,使用简单的命令即可完成容器的运行和管理。它的另一个独特之处在于AUFS的运用,Copy on write模式的分层文件系统使容器的镜像可以像搭积木一样灵活创建和修改,并在网络上实现增量分发。Docker client,特别是它的API,为在Docker之上的生态系统发展提供了可能性。

Docker的出现和标准化,为以轻量级容器为核心的生态系统提供了爆发式增长的机会。我们从以下几个角度来看Docker的生态系统。

Docker和容器宿主

前文提到的Docker Inc.和CoreOS已经赚足眼球,投资者接踵而至,大规模融资此起彼伏。企业级厂商如红帽、Ubuntu等不甘寂寞,纷纷亮明旗帜,选择站队。

6月在旧金山举行的DockerCon 2014展示了Docker对未来的雄心壮志。在Docker engine逐渐稳定并标准化的背景下,Docker的未来目标是为互联网基础架构制定新的标准。最近开源的libcontainer、libchan和libswarm三个项目,吹响了这场战役的冲锋号。

  • 在新版本Docker engine中,由Go语言开发的libcontainer库已取代LXC。我认为,它更大的目的是反向定义容器的实现标准,将底层实现(也许可以完全不用cgroup甚至Linux)都抽象化到libcontainer的接口。

  • libchan类库,以标准接口的方式解决容器的互联互通,实现跨平台,能更好支持分布式系统和并发编程。

  • · libswarm是另一个很简单的类库,但它将实质性地推动互联网应用架构的创新。它抽象了应用部署和集群管理的细节,为应用程序赋予了跨云平台和互联网级弹性。

 

CoreOS的口号“A new way to think about servers”,这句话阐明了他们对改造互联网服务器的目标。CoreOS通过最小化的定制版Linux系统为容器运行提供载体。2014年8月14日,传来了CoreOS收购Quay.IO并推出CoreOS Enterprise Registry服务的新闻。显然,CoreOS并不满足于服务器层的工作,其目标定位在为企业用户提供完整的容器技术服务栈,提供管理大型容器集群的整体解决方案。在这个类别中生存的是标准定义者,它们是整个Docker生态系统的基础。

镜像存储和容器托管

这包括容器的镜像存储和CaaS(Container as a Service)类的容器运行托管,有代表性的公司是StackDock、Orchard、Tutum、Quay.IO、Baremetal.IO等。

这几家几乎全都是创业公司,他们围绕轻量级容器的整个生命周期来设计自己的产品,有的聚焦容器镜像描述文件(Dockerfile)向导化生成和构建过程的优化(如StackDock),有的提供包括SSD在内的高性能托管环境(如StackDock和Tutum),有的在监控和弹性扩展方面做足文章(如Tutum),也有像Baremetal.IO这样针对企业级整体解决方案的公司。

容器的镜像存储和运行托管是Docker生态体系中非常接近最终用户的一层。这个类别中的公司也许并没有高深莫测的技术,也不是标准的定义者,但通过它们与细分市场中客户的长期沟通合作,积累了大量Docker商用化的经验和实践。

基于Docker的微PaaS

镜像存储(静态)和容器托管(动态)都是以容器为单位的。下面我们将要讲述以应用为单位,以容器为底层技术实现的微PaaS。

这几年随着Microsoft Azure、Cloud Foundry的普及,PaaS的概念已经深入人心。传统意义上PaaS实例一般都与一个特定的IaaS平台绑定,提供部署接口、负载平衡、服务绑定等,然而Docker世界中产生的微PaaS,在此基础上进一步创新。这个领域比较有代表性的是Flynn和Deis.IO,它们都是开源项目。

Flynn分为Layer 0和Layer 1两层。Layer 0主要做底层硬件和云平台的抽象,分布式配置、任务调度、服务发现等基础工作,它为上层的容器运行环境提供了一个抽象的资源平台。Flynn可以快速部署在AWS上,今后也可扩展到其他公有云和私有云。Layer 1主要服务于应用,是PaaS功能的具体实现层,它提供了基本的管理API和客户端,实现了Git Receiver、Heroku Buildpacks、Routing和Datastore等PaaS核心功能。Layer 1本身和它所管理的应用,都以容器为载体。

Deis.IO,它的一个亮点是用CoreOS承担底层资源管理的任务。在部署Deis PaaS环境时,首先安装的Controller会创建一个CoreOS系统,然后在其之上以容器的方式运行Deis的所有组件。对CoreOS的支持是一个非常聪明的选择,目前CoreOS已可以运行在多个公有云平台、虚拟机和物理机环境下,这为Deis提供了与生俱来的跨云平台能力。

Flynn和Deis的共同特点,是对复杂和大规模分布式应用的原生支持。Heroku创始人Adam Wiggins曾发布著名的“十二要素应用宣言(The Twelve-Factor App)”,这个宣言定义了以服务方式和通过互联网交付的软件应该遵循的十二个要素。Flynn和Deis都是十二要素的忠实拥护者,它们的微PaaS平台与Heroku有极好的兼容性。

微PaaS创业公司层出不穷,竞争十分激烈,但也许走到最后的只是少数。在这一轮容器技术热潮中,微PaaS正在影响软件开发和运维流程,改变软件的交付方式,把十二要素类互联网应用架构标准化。

Orchestration、Management和Moni-t­oring

围绕Docker API做Web UI的门槛相对较低,受到了大家的追捧,这一类主要有DockerUI、Shipyard、maDocker等。它们无一例外都调用Docker API和其他类库,把对容器的管理和监控呈现在Web页面中,这在某种程度上降低了企业网管对这些新技术的恐惧。

这一领域有三个不得不提的高富帅项目:Google Kubernetes、Cloud Foundry的BOSH和Diego。

Kubernetes是构建在Docker之上的容器集群管理系统,Google在2014年6月将这个项目开源。它可以为用户提供跨平台的处理能力,不但能够在Google的基础架构中运行,同时可以访问其他的云计算服务器,如AWS,甚至是私有云。

这个系统一经开源,就得到了IBM、红帽、微软、Docker、Mesosphere、CoreOS和SaltStack等厂商的支持:微软将确保Kubernetes能够在其Azure云中作为基于Linux的虚拟机系统容器并正常运作;红帽则将其引入了自己的云产品;IBM的计划是为Kubernetes与Docker贡献代码;CoreOS将在其操作系统发行版中为Kubernetes提供支持;SaltStack正努力简化Kubernetes运行在其他环境下的部署流程;而Mesosphere则打算将这项技术加入到自己的Mesos同名开源项目当中。Google一呼百应的大将之风展露无遗。

Cloud Foundry的BOSH是部署和运维工具,它通过类似操作系统驱动程序的CPI(Cloud Provider Interface)来实现对多种异构云平台的支持和抽象,以近乎优雅的方式管理VM模板【注:在Cloud Foundry术语中称为干细胞(stemcell)】、软件发布(release)和部署配置脚本文件。最近BOSH推出了一个试验性质的项目BOSH Release for Docker。

Cloud Foundry在它的DEA(Droplet Execution Agent)中使用基于Warden的容器技术来做PaaS的应用隔离。最新的Diego(Go语言版DEA)项目目标是让Cloud Foundry在跨运行时环境方面更具有扩展性,这些运行时环境就包括Docker,也可能会原生支持Windows Server。

网络层的增强和解决方案

容器之间如何互联互通?Docker引擎中的内联网络能否满足企业级别网络的需求?当容器像今天的虚拟机一样在企业环境大规模部署时,复杂的网络需求如网络配置管理、安全监控、流量QoS、网络隔离等一定会出现。

在虚拟化的世界里,这些需求催生了庞大的网络虚拟化(SDN)产业,在容器的环境中,是否有同样的挑战和机会?在这个领域中,目前受关注较多的是Skydock和VNS3开源项目,但整体上还都处在萌芽起步阶段。

 

参考文献

http://www.csdn.net/article/2014-09-24/2821832/1

 

0
1
分享到:
评论

相关推荐

    快速理解使用docker

    docker简单跟基本常识跟运用,简单 学习下可以。

    快速理解Docker-容器级虚拟化解决方案

    简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案 拿现实世界中货物的运输作类比,为了解决各种型号规格尺寸的货物在各种运输工具上进行运输的问题,我们发明了集装箱 Docker...

    docker_practice:通过真正的DevOps实践学习和理解Docker技术!

    前六章为基础内容,供用户理解Docker的基本概念和操作; 7〜9章介绍包括数据管理,网络等高级操作;第10〜12章介绍了容器生态中的几个核心项目; 13、14章讨论了关于Docker安全和实现技术等高级主题。后续章节则分别...

    Docker快速上手+19v2+.html

    docker简化命令,使用它我们可以快速上手,对于docker的每一个命令以及彼此之间的关系有一个较深的理解。

    Docker 的安装与使用详解Centos7

    内容涵盖了Docker的基本概念、安装流程、镜像管理、容器运行和管理等方面的知识,同时也提供了实际应用场景和案例分析,帮助读者更好地理解和应用Docker技术。本资源适用于需要使用Docker技术的开发者和系统管理员,...

    谈谈我对docker的理解

    先给大家说下docker概念 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植...关于docker理解 一、首先是关于虚拟化 虚拟化我们可以简单的理解为一种资源管理方式。有如下几种虚拟化的方式: 1.完

    docker-book-master.zip

    Docker与Kubernetes开源书。涵盖Docker常用命令、...如果学习完,你应该具备如下能力:常用的命令信手拈来,Dockerfile编写无压力,能用Docker Compose快速构建容器环境,理解Docker网络、存储等知识点是怎么回事。

    Harbor离线安装包,版本:2.4.3、2.5.4、2.6.0。 Docker-compose离线安装包,适用CenOS系统。

    都是完整离线安装包的百度网盘地址的永久链接,保证不失效!! 失效请站内私信联系我,我补资源!! Harbor包含版本:2.4.3、2.5.4、2.6.0,无需去...我花了很多时间寻找和下载的,收取一点积分,希望大家能够理解。

    docker-templates:私人的docker-compose文件集合

    因此,为了使docker主机快速启动并运行,而不依赖于docker和docker-compose以外的其他依赖项,我一直在尝试实现一种快速,易于理解的编排容器的方式。 这些模板有什么不同? 我不喜欢维护大型撰写文件,它们会

    Docker(快速实战流程)

    理解 组成部分 镜像A+容器B 约等于 vmware[iso+运行ing虚拟机] 操作部分 获取镜像[核心操作]:1、3、4 整体流程 [动手跟着敲一遍熟悉流程] [4].获取镜像 对应pull docker pull nginx == docker pull nginx:latest ...

    大白话学懂Docker核心技术视频教程

    本课程为Docker第一季之核心基础篇,帮助大家对Docker快速上手,迅速入门。将介绍Docker核心概念,是什么、能干什么、Docker整体架构,和传统虚拟机的区别。什么是容器虚拟化技术,深刻理解镜像、容器、仓库的各种...

    在Linux上安装和使用Docker的方法

    容器现在风靡于 IT 界 —— 这很好理解。容器是轻量级的,包含应用运行所需所有东西(代码、库、运行时环境、系统设置,以及依赖关系)的独立的包。每个容器都部署于它自己的 CPU、内存、块 I/O,以及网络资源上,...

    FastDFS分布式文件系统.docx

    11.能够理解FastDFS快速定位文件机制 后期课程: 1、es 2、RocketMQ 3、授权中心 (非对称加密(公钥私钥),JWT) 4、分布式事务 5、分布式锁(控制秒杀库存) 6、搜索 7、项目架构优化 1.认识海量文件存储...

    hybris-docker

    hybris-docker(WIP) 此存储库是为了简化配置,部署和可维护性的目的而尝试对SAP Hbrise电子商务平台进行泊坞。...快速开始将此仓库签出到您的Docker主机: git clone https://github.com/prelegalw

    如何基于K8S打造轻量级PaaS平台

    几个角度介绍一下PaaS平台,基于K8S与Docker构建轻量级平台叫做ECP,就是弹性计算平台。我们知道刚才马俊讲的CMP,更多是在IaaS这一层面的,IaaS这一层面很多工作在主机、存储、网络上。到PaaS这一层面,大家对PaaS的...

    juejin_rpc_py:juejin rpc python书的代码

    深入理解 RPC : 基于 Python 自建分布式高并发 RPC ...安装zookeeper可以考虑使用docker进行快速安装 docker pull zookeeper docker run -p 2181:2181 zookeeper 代码上如有任何问题,可以在官方的微信交流群里进行讨论

    云原生的理解

    云+原生的业务开发,非业务需求都交给云去实现,一些优秀的产品就是尽可能的把你的平台变得原生三、详细的理解自2013年容器(虚拟)技术(Docker)成熟后,后端的架构方式进入快速迭代的阶段,出现了很多新兴概念:...

    自己画的以及收集汇总的各大常用流行框架的重要图(原理图、流程图、说明图、架构图...等)

    这些图可以帮助开发人员快速了解不同框架的工作原理、组件结构和流程,以便更好地理解和应用这些框架。 适用人群 本图资源适用于有一定编程经验和对相关框架感兴趣的开发人员和学习者。无论是初学者还是有一定经验...

Global site tag (gtag.js) - Google Analytics