贴吧被封了怎么解除劳动关系告知书,求大神告知

现在的位置:
docker容器技术系列一:基本概念
前言:从去年下半年开始,我们就尝试在使用docker部署生产应用,至现在已经有十多个项目使用了docker容器部署,docker为我们节约了大量的服务器资源,并提高了运维的交付能力。我和我的小伙伴们在学习和使用docker的过程中遇到了很多的坑,现在我将我所理解的docker相关技术写成两个系列文章《docker容器技术系列》和《docker管理进阶系列》供大家参考。
一、什么是docker?
&&& Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
&&& Docker基础是Linux 容器(LXC)基础,并对其进行了更高层面的封装,使得用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
&&& Docker容器与传统虚拟机不同,容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。参考如下对比图:
二、为什么要用docker?
2.1 比虚拟机高效:
&&& 如前描述,因容器复用了本地主机操作系统,仅仅是封装了容器运行所需的软件环境(从这个角度看可以参考RPM安装包),因此与主机上直接运行软件所需的资源几乎是一样的。不像虚拟机那样需要额外的内存、CPU等来支持虚拟机操作系统的运行。
2.2 快速交付和部署:
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。而且可以保证每一个地方运行的环境都是一模一样的,不会因为开发环境与生产环境不同而导致某些问题。
&&&&&& docker容器的启动更是秒级的,因此可以随时快速生产、关闭。
2.3 轻松迁移和扩展:
&&&&&& docker镜像可以在任意环境中迁移,而不会出现兼容性问题,迁移过程轻松方便。
2.4 管理简单:
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
2.5 docker对比传统虚拟机
三、docker镜像、容器、仓库的基本概念
3.1 镜像:
Docker 镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的 CentOS 操作系统环境,里面仅安装了 httpd或用户需要的其它应用程序。
镜像可以用来创建 Docker 容器。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
3.2 容器:
Docker 利用容器来运行应用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
*注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
3.3 仓库:
&&&&&& 仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
&&&&& 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
&&&&& 最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 其作为默认docker仓库,但在国内下载速度很慢。当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
*注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
【上篇】【下篇】
您可能还会对这些文章感兴趣!
2017年三月
6789101112
13141516171819
20212223242526
2728293031
同分类最新文章
日志:437篇
评论:377条
分类:44个
标签:268个
链接:10个
网站运行:1543天
最后更新:日新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
家境小康, 积分 1320, 距离下一级还需 680 积分
论坛徽章:5
获奖名单已公布:
作为云计算的当红明星Docker 来势汹汹,它就像一场森林大火,这个新的Linux容器技术以它自己的方式点燃了周围的一切,我们许多人难以跟上它蔓延的速度。Docker不仅是历史上最流行的开源项目之一,而且也从根本上改变了人们构建应用程序的思维方式。
谈到容器,很少有人知道,但大多数人多年来一直在使用容器。为什么大家都追捧容器和Docker呢?谷歌就有自己的开源容器技术lmctfy(Let Me Contain That For You,意为“让我容纳你的程序”)。只要你使用谷歌的某项功能:比如搜索、Gmail、Google Docks或无论其他什么,就分配了一个新的容器。
Docker 是由 PaaS 提供商 dotCloud 在 2013 年创建的一款开源应用引擎,Docker的本质是Container,被形象地看作一个应用封装容器,以往开发者开发一款应用,需要考虑硬件、操作系统、运行环境的适配,有了容器就不用考虑这些了。现在开发者只需专注于开发软件,不需要考虑在哪运行自己的软件,这也是云计算的发展方向。Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
本期话题:
1.作为Devops的工具之一,Docker广受开发者和运维人员的欢迎,为什么?2.通过图片来对比下Dockers 与VMs的架构,VM为什么笨重?Docker为什么很轻量?3.从架构的角度来讲,Docker主要由哪些组件组成?4.作为一个超轻量化容器应用,Docker是仅次于OpenStack成为最受欢迎的云开源项目,VMware、谷歌、微软等纷纷和Docker展开合作,它究竟有哪些商业价值?
活动时间:日-日
活动奖励:选取最佳会员若干名赠送技术图书一本
Docker.jpg (18.65 KB, 下载次数: 21)
16:37 上传
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
小富即安, 积分 2940, 距离下一级还需 2060 积分
论坛徽章:39
本帖最后由 forgaoqiang 于
21:15 编辑
1.作为Devops的工具之一,Docker广受开发者和运维人员的欢迎,为什么?
Docker 和 Vmware ThinAPP原理类似,就是提供一个应用环境的容器,应用程序在容器中运行,具有自己的环境,而且Docker能够像Java一样提供一致的运行环境,屏蔽不同发型系统的差异性,而且方便应用的开发、回滚、测试。
这个是ThinAPP,Vmware的桌面级产品,用了好长时间,感觉就是好,能够在同一个系统下运行不同版本的同一个程序而毫无冲突,而且ThinAPP打包的应用具有良好的移动性,能够放到U盘等移动工具中,跑到另一台电脑直接运行。
package-deploy-diag.png (172.53 KB, 下载次数: 17)
13:27 上传
Docker也是类似的功能,而且是谷歌Go语言的成功之作,相比Vmware具有开源免费等先天优势。
docker-filesystems-multilayer.png (124.1 KB, 下载次数: 21)
13:27 上传
2.通过图片来对比下Dockers 与VMs的架构,VM为什么笨重?Docker为什么很轻量?
虚拟化层次不一样,当然开销就不同,而且VM指的是Virtual Machine,是对整个系统的虚拟化,而Docker更像是Xen这种半虚拟化(应用虚拟化层次),既然不是一个重量级的,必然开销和效率不同。
另外隔离程度也是完全不同的,VM能够完全隔离不同操作系统的行为,Docker只是隔离程序之间,因此可以在一个系统上运行相同的程序的不同配置版本。
3.从架构的角度来讲,Docker主要由哪些组件组成?
Docker的组成结构就是:Docker Engine、Docker Hub,Docker Engine是runtime以及打包用的工具,Docker Hub是云端服。
4.作为一个超轻量化容器应用,Docker是仅次于OpenStack成为最受欢迎的云开源项目,VMware、谷歌、微软等纷纷和Docker展开合作,它究竟有哪些商业价值?
Docker和VM领域中的操作系统虚拟化不同,它提供的是一个 程序虚拟化,和Java是类似的,但是Docker是开源的,也就是很有可能成为下一个Java,能够改变整个应用安装、使用的历史,是一个革命性的创新,各大厂家都能看出来。现在Windows Server也要开始支持,以后Docker不仅可以运行在Linux,以后也可以运行在Windows,基本上就是全平台了,意义重大。
小富即安, 积分 2709, 距离下一级还需 2291 积分
论坛徽章:20
1.作为Devops的工具之一,Docker广受开发者和运维人员的欢迎,为什么?
快速部署(一次打包多点部署超快),方便回滚,轻量,差异化下载,一台机器开上百个container都可以
2.通过图片来对比下Dockers 与VMs的架构,VM为什么笨重?Docker为什么很轻量?
docker底层是lxc(操作系统级别虚拟化),而vm则是全虚拟化,层次本身就不一样。
另外docker是差异化更新的(aufs,不过貌似有别的技术准备替换),非常省空间。
3.从架构的角度来讲,Docker主要由哪些组件组成?
lxc是最重要的,另外就是liblxc,不过好像准备把这个库给替换成别的...
4.作为一个超轻量化容器应用,Docker是仅次于OpenStack成为最受欢迎的云开源项目,VMware、谷歌、微软等纷纷和Docker展开合作,它究竟有哪些商业价值?
估计就是在docker层之上弄个管理层吧,openstack现在也想把docker纳进来了,之前是直接管lxc的。
富足长乐, 积分 7781, 距离下一级还需 219 积分
论坛徽章:19
docker正在让应用和硬件真正的解耦。之前的虚拟化是操作系统级的。我们可以把操作系统装在由宿主机管理的硬件上。这个过程让操作系统可以成为一个底层操作系统上的一个超大应用程序。现在的DOCER正在将应用本身和操作系统之间进行解耦。之前的应用系统部署必须摇硬件-》操作系统-》应用程序。现在在DOCKER下。应用系统的部署变成了DOCKER-》应用程序。这样DOCKER可以非常容易的实现应用系统和操作系统的解耦。DOCKER何以管理一大堆的操作系统。这样应用就只保留和DOCKER的应用界面。从上层看起来。应用程序部署再DOCKER上就像直接部署在硬件上。而实际上它就是一层更大规模的软件系统平台。应用在其上将摆脱因为之前因为硬件和操作系统带来的应用下线故障。这也让未来的应用迁移已经更大规模并行变得更加易于部署和管理。硬件将变得越来越通用。操作系统也将必然走向通用化。而应用代码才是未来真正的核心。
丰衣足食, 积分 927, 距离下一级还需 73 积分
论坛徽章:14
1.作为Devops的工具之一,Docker广受开发者和运维人员的欢迎,为什么?
更容易部署一致的生产环节
单元测试时回滚更容易
2.通过图片来对比下Dockers 与VMs的架构,VM为什么笨重?Docker为什么很轻量?
(待编辑)
3.从架构的角度来讲,Docker主要由哪些组件组成?
Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。同VM的方式不同, LXC 其并不是一套硬件虚拟化方法 - 无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,而是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观。
docker背后的一系列技术 - namespace, cgroup, lxc, aufs等
namespace 用于保证隔离性,使每个用户实例之间相互隔离, 互不影响
cgroups 用来控制资源,实现对用户实例的按需提供资源以及使用资源的度量
aufs 用来实现实例的复制、移动和重建
4.作为一个超轻量化容器应用,Docker是仅次于OpenStack成为最受欢迎的云开源项目,VMware、谷歌、微软等纷纷和Docker展开合作,它究竟有哪些商业价值?
Docker内部使用的是Linux容器技术(LXC),运行在与它的宿主机器同样的操作系统上。使得它可以和宿主机器共享许多系统资源。
使用Linux容器虚拟化技术(LXC),隔离性方面有所缺失,但是他们更加轻量,而且需要更少资源。
docker使你可以将OS快照存入一个通用的镜像,并使得在往其它的docker主机上部署时变得容易。对于本地,开发、质量管理、产品等等,都是用的同一个镜像。在解决部署环境一致性的问题上更加方便、快捷。
白手起家, 积分 86, 距离下一级还需 114 积分
论坛徽章:0
1.作为Devops的工具之一,Docker广受开发者和运维人员的欢迎,为什么?
由于Docker封装底层的不同,提供一个透明的容器,使得开发环境完全一致,提供给运维团队的镜像也是一致的,减少的运维团队的错误配置。
2.通过图片来对比下Dockers 与VMs的架构,VM为什么笨重?Docker为什么很轻量?
(1)docker的最低层是lib库,一个linux上的所有docker的内核版本都是一致的; VMs从系统底层开始虚拟,包括内核版本,发行版本都不一样。docker仅仅为应用层封装了底层,所以轻量。
(2)从磁盘占用量上讲,每个VM至少需要打包一个root分区和应用分区(如opt分区),最终一个image会很大,客户一般要求50G的磁盘; 而docker会节省很多,所有docker应用会共享一个通用rootfs,当然每个docker都可以增加、删减一些lib库。
3.从架构的角度来讲,Docker主要由哪些组件组成?
主要是四个组件吧:namespace, cgroup, lxc, aufs
namespace 将每个docker应用互相隔离开。
cgroups 控制每个docker应用对cpu,memory,net,io等等的访问能力
aufs 保证docker对rootfs共享的同时,允许个性化配置自己的root
4.作为一个超轻量化容器应用,Docker是仅次于OpenStack成为最受欢迎的云开源项目,VMware、谷歌、微软等纷纷和Docker展开合作,它究竟有哪些商业价值?
(1)通过docker可以发布更容易安装,更容易配置的系统,以前商业公司都是发布一个一个的软件包(rpm,deb,exe),有了docker可以发布一个一个的轻量级应用,并且无需多余的配置。
(2)利用docker作为底层,发布更高级的上层管理平台。
家境小康, 积分 1257, 距离下一级还需 743 积分
论坛徽章:28
1.作为Devops的工具之一,Docker广受开发者和运维人员的欢迎,为什么?
Docker可以将程序员开发的各种应用变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。
而且,Docker不依赖于任何语言、框架或系统。
2.通过图片来对比下Dockers 与VMs的架构,VM为什么笨重?Docker为什么很轻量?
根据图片的分层结构,Docker部署的应用其整体架构上少了客户端OS,用Docker Engine代替了客户端OS和Hypervisor两层。
我查阅了Docker的官方文档,Docker使用了Linux的LXC容器,使得可以利用Host层的OS提供的能力,可以分享主机操作系统的资源,还可以使用AuFS文件系统,还可以管理网络等。
其次,Docker对磁盘的消耗远低于VM。比如1GB的容器镜像,且我们需要100个,如果我们使用完整的VM,那么需要的磁盘空间是1GB的100多倍;而使用Docker,通过LXC和AuFS技术,可以共享容器OS的空间,所消耗的磁盘空间可能只是1GB多一些。
完整的VM在资源共享方面是最低的,隔离性很好,但太“重”了。而Docker做到了很高的资源共享,但隔离性仍然很好。
3.从架构的角度来讲,Docker主要由哪些组件组成?
Docker的组件包括:Docker Engine、Docker Hub两部分组成。
Docker Engine是一个便捷、轻巧的运行时和打包工具。
Docker Hub是一个云服务,可以共享应用程序和提供自动化的工作流。
4.作为一个超轻量化容器应用,Docker是仅次于OpenStack成为最受欢迎的云开源项目,VMware、谷歌、微软等纷纷和Docker展开合作,它究竟有哪些商业价值?
Docker不限开发语言,Docker化的应用程序可以任意移植、任意运行;
Docker管理和跟踪变更和依赖;
Docker消除了组件开发、测试、生产环境之间的差异。
Docker适合云计算应用的部署。
稍有积蓄, 积分 216, 距离下一级还需 284 积分
论坛徽章:0
我坐沙发。坐等话题讨论。
富足长乐, 积分 5814, 距离下一级还需 2186 积分
论坛徽章:129
看到书,就眼睛花花的
小富即安, 积分 2637, 距离下一级还需 2363 积分
论坛徽章:9
Docker反正最近感觉他很火,不过自己还没有研究呢。最近一直在学习KVM
富足长乐, 积分 5208, 距离下一级还需 2792 积分
论坛徽章:34
本帖最后由 laputa73 于
11:16 编辑
这个思路很好,应用层的VM
相当于一个分布式的OS,而不是一个分布式的机器
和传统的VM比 ,不需要再操心OS安装和资源分配
对于应用,屏蔽底层的分布式差异
相当于开发一个应用,比如webgame,自动可以获得分布式的接入能力(HA)、存储能力(分布式文件系统)和计算能力(负载均衡)
富足长乐, 积分 7781, 距离下一级还需 219 积分
论坛徽章:19
我比较关心DOCKER的IMAGES如何制作,毕竟现在的在线组件安装让人觉得很烦。另外就是我也非常关系IMAGES到底是如何被DOCKER加载的。第二我也很关心COEROS的双螺旋结构的根分区形式什么时候能成为LINUX系统各个发行版本的标准配置。
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处中国领先的IT技术网站
51CTO旗下网站
Docker :用于统一开发和部署的轻量级 Linux 容器
使用Docker容器――轻量灵活的VM同类,来接管“依赖地狱”。学习Docker是如何基于LXC技术,通过把应用包装在容器里来使应用具有移植性和独立性。Docker容器试图解决“依赖地狱”问题。现代的应用通常从已存在的组件组合而来,并且依赖其他服务和应用。
作者:ley译来源:| 10:09
使用Docker容器&&轻量灵活的VM同类,来接管&依赖地狱&。学习Docker是如何基于LXC技术,通过把应用包装在容器里来使应用具有移植性和独立性。
想象一下可以轻松地把应用和它的依赖打包,然后在其他的开发、测试和生产环境上平滑的运行。这就是开源Docker项目的目标。尽管它现在还没正式到生产阶段,最新的发布(本篇文章编写时是0.7.x)使得Docker实现这一伟大目标又近了一步。
Docker容器试图解决&依赖地狱&问题。现代的应用通常从已存在的组件组合而来,并且依赖其他服务和应用。比如,你的Python应用可能使用Postgre所为一个数据存储,用Redis缓存以及使用Apache作web服务器。每个这些组件都附带自身的一些依赖,这些依赖可能与其他组件产生冲突。通过打包每个组件及其依赖,Docker容器解决以下问题:
冲突依赖:需要在PHP4.3上运行一个web站点而另一个运行在PHP5.5上?如果你在一个独立的Docker容器中运行每个版本的PHP,那就没问题。
缺少依赖:在一个新环境上安装应用对Docker容器来说只是瞬间的事情,因为所有的依赖都和这个应用一起打包到一个容器中。
平台依赖:从一个发行版移动到另一个不再是一个麻烦。如果两个系统都运行了Docker容器,那么相同的容器执行起来将没有任何问题。
Docker容器:一点背景
2013年初,Docker在dotCloud&一个平台即服务的、以云计算为中心的公司,以一个开源项目的形式诞生。Docker是该公司已经开发的用来在数千台服务器上运行云业务的一个自然扩展技术。它是用Go语言编写的,Go语言是由谷歌开发的一种基于C语言且语法松散的静态类型编程语言。快速发展了6到9个月,这家公司聘请了一个新的CEO,加入了Linux基金会,将公司名改为Docker,并且宣布将工作重心转移到Docker容器及其生态系统的开发。作为Docker容器的受欢迎程度进一步说明,在写这篇文章的时候,它已经在GitHub上被 Star 8985次并 Fork1304次。图1表明了Docker容器在谷歌搜索持续上升的受欢迎度。随着Docker公司发布了第一个版本容器的产品部署以及广泛的社区知道了Docker容器的有用性,预计过去12个月的波形图将会在未来12个月内相形见绌。
图1. 过去12个月Docker软件在谷歌搜索上的趋势图
在引擎罩下
Docker运用了一些强大的内核级技术并让我们触手可及。容器虚拟化的概念早在几年前已经出现,但通过提供一个简单的工具集和统一的API接口管理一些内核级技术,如LXCs(Linux容器)、cgroups和一个写复制文件系统,Docker已经创建了一个比其各部件更好的工具。它就是一个潜在的用于开发运营商、系统管理员和开发者的规则转换器。
Docker提供工具使得利用容器创建和操作尽可能简单,容器沙箱相互处理。你可以暂时把一个容器当成一个轻量级的虚拟机。
Linux容器和LXC,一个用于Linux容器的用户空间控制程序包,是组成Docker的核心,LXC使用内核级命名空间将主机和容器相互隔离。用户命名空间将主机和容器的用户数据库分离,这样保证了容器的root用户没有主机的root权限。程序命名空间仅负责显示和管理程序在容器中,而非在主机运行。而且网络命名空间提供自己的网络设备和虚拟IP地址给容器。
LXC提供的另一个组件是控制组(cgroups)。命名空间负责主机与容器之间的隔离,而控制组实现资源核算和限制。当允许Docker限制被一个容器消耗的资源:如内存、磁盘空间和输入输出时,控制组也会输出大量与之相关的指标。这些指标使Docker能够监控容器内各个进程的资源消耗并确保每个进程只获取可用的公平共享资源。
除了以上组件,Docker一直在用AuFS(高级多层次统一文件系统)作为容器的文件系统。AuFS是一个能透明覆盖一或多个现有文件系统的层状文件系统。当一个进程需要修改一个文件时,AuFS创建该文件的一个副本。AuFS可以把多层合并成文件系统的单层表示。这个过程称为写复制。
真正酷毙的是,AuFS允许Docker把某些镜像作为容器的基础。例如,你可能有一个可以作为很多不同容器的基础的CentOS系统镜像。多亏AuFS,只要一个CentOS镜像的副本就够了,这样既节省了存储和内存,也保证更快速的容器部署。
使用AuFS的另一个好处是Docker的版本容器镜像能力。每个新版本都是一个与之前版本的简单差异改动,有效地保持镜像文件最小化。但,这也意味着你总是要有一个记录该容器从一个版本到另一个版本改动的审计跟踪。
传统上,Docker依赖AuFS提供了写复制存储机制。然而,最近添加的一个存储启动API可能降低这种依赖。最初,可用的存储驱动有三种:AuFS、VFS和设备映射器-与红帽合作的产物。
自版本0.7起,Docker就与所有Linux发行版协作。然而,它并没有兼顾大部分非Linux系统,如Windows和OS X。在那些操作系统上使用Docker的推荐方式是,用Vagrant在VirtualBox上提供一个虚拟机。
容器VS.其他虚拟化类型
那容器到底什么是以及它与基于管理程序的虚拟化的区别是什么?简单地说,容器在操作系统层面虚拟化,而基于管理程序的虚拟化在硬件层面。效果类似,但区别很重要,这也是我花了点时间探索它们的差异和由其产生的差异和权衡的原因。
容器和虚拟机(VMs)都是虚拟化工具。在虚拟机上,一个管理程序使各个孤立的硬件可用。通常,这包括两种类型的管理程序:类型1直接运行在硬件裸金属片上,而类型2则在客户操作系统上作为软件附加层运行。开源的Xen和VMware的ESX是类型1 的例子,类型2的实例包括Oracle的开源VirtualBox和VMware服务器。虽然相比Docker容器而言,类型1是个更好的候选,但我在文章的其他部分并不区分这两种类型。
与此相反,容器构造操作系统中可用的受保护部分-它们有效地虚拟化操作系统。运行在同一个操作系统上的两个容器不知道它们在共享资源,因为彼此拥有自己的抽象网络层和进程等等。
操作系统和资源
由于基于hypervisor的虚拟化仅仅提供了对硬件的访问,因此你还需要安装操作系统。这样就会运行多个完整的操作系统,每个虚拟机上运行一个,这将快速地吃完服务器上的诸如内存(RAM)、CPU和带宽等资源。
容器运行在操作系统之上,把正在运行的操作系统当作自己的主机环境。它只运行在这样的空间上:这些空间是主机操作系统的一部分,而且各个容器使用的空间相互独立。这会带来两个非常鲜明的优点。第一个优点是更高效的使用资源。如果一个容器不执行任何操作,那么它就不会耗尽资源,而且容器可以调用自己所在的主机操作系统以实现其所需要的部分或者全部功能。第二个优点是容器成本低,因此可以快速地创建和删除容器。容器不需要对整个操作系统进行重启或者关闭。容器仅仅需要的终止运行在自身独立空间的进程。因此启动和停止容器更像是启动和退出某个应用,因此启动和停止就非常快。
图2展示了两种类型的虚拟机和容器
图2.虚拟机和容器
独立的性能和安全
Docker容器里所执行的进程与宿主机操作系统上运行的进程或者运行在其它Docker容器里的进程是相互独立的。不过,所有的进程都是运行在相同的内核里。Docker使用LXC来给每个容器提供独立的命名空间,内核里的这项技术已经具有5年多的历史了,已经十分成熟。另外,容器还使用了控制组,Linux内核里的这项技术比LXC的历史更长,它对资源进行审核和限制。
Docker服务进程本身还是一个潜在的攻击载体,这是因为它目前只能以root权限运行。对LXC和Docker的改进都应当允许以非root权限运行容器,而且可以用另外一个用户运行Docker服务进程。
虽然容器所使用的这种类型的隔离总的来说非常强大,然而是不是像运行在hypervisor上的虚拟机那么强壮仍具有争议性。如果内核停止,那么所有的容器就会停止运行。虚拟机具有优势的领域是它十分成熟,而且广泛的应用在生产环境中。相比之下,Docker和它的支撑技术几乎没有任何行动。特别是Docker每天都进行大量的修改变化,而且我们大家都知道变化是安全的天敌。
Docker和虚拟机-亦敌亦友
上面我们一直在对Docker和虚拟机进行比较,现在该看看这两种技术彼此在哪些方面是真正互补的。Docker在虚拟化的环境下运行的非常好。很显然,你不需要对各个虚拟主机的每个应用或者组件进行封装。而且假定给你一台Linux虚拟机,你就能够很容易地部署上Docker容器。这也就是在非Linux系统,比如OS X和Windows上运行Docker的官方安装方式是在Vagrant的协助下安装基于Ubuntu虚拟机的Precise64不让你感到吃惊的原因所在。站点有详细并且简单的指令。
首先,虚拟化和容器在某些方面表现的非常相似。一开始,这让你觉得容器就是非常轻量的虚拟机。然而,随着你对容器的认识,你对容器的理解就会有微妙的并且是重大的不同。Docker在容器最擅长的领域即轻量级应用的打包和部署方面都能充分发挥容器的长处。
Docker仓库
Docker杀手级特性之一就是能够快速的查找、下载和启动由其他开发者创建的容器映像。存储映像的地方称为注册中心。Docker有限公司提供一个公共的注册中心,这个注册中心也称为索引中心。你可以把这个注册中心和Docker客户端看作与Node的NPM,Perl的CPAN或者Ruby的RubyGems等同。
除了可以用来创建Docker容器的各种基本映像外,公共的Docker注册中心还提供即刻即可运行的软件映像,其中包括数据库、内容管理系统、开发环境和Web服务器等等。默认情况下Docker命令行客户端搜索的是公共的注册中心,不过,也可以维护私有的注册中心。如果要发布含有专有知识产权代码的或者仅公司内部使用的组件的映像,那么注册中心就是一个很好的选择。把映像上传到注册中心就像下载一样容易。只要求你创建一个账户,而且这一切都是免费的。最后,Dcoker有限公司的注册中心还有Web界面,方便对映像进行搜索、读取、评论和推荐(即&标记星号&)。映像使用起来出奇的容易,我鼓励你这篇文档资源一小节里的链接,开始浏览映像。
手把手教你使用Docker
Docker是有单个二进制文件组成的,这个二进制文件可以以三种方式来运行。第一种,它可以作为管理容器的服务进程运行。服务进程向外提供既可以进行本地访问也可以进行远程访问的基于REST风格的API。越来越多的客户端数据库可与服务进程API进行通信,其中包括Ruby,Python,JavaScript(Angular和Node),Erlang,Go和PHP提供的客户端库.
客户端库大多数情况下都是通过编程来来访问服务进程的,不过更经常使用的情况则是通过命令行提交指令。这也就是运行Dcoker二进制文件的第二种方式,即通过命令行客户端访问基于REST风格的服务进程。
第三种方式,Docker二进制文件可以运行为访问远程映像仓库的客户端。生成容器文件系统的映像被称作仓库。用户可以下载别人提供的映像,还可以上传自己的映像到注册中心,从而共享这些映像。注册中心用来收集,罗列和组织这些仓库。
让我们看看实际中运行Docker的这三种方式。在下面的例子里,你将搜索Docker仓库,查找MySQL映像。因此你找到所喜欢的映像,然后下载它,接着告诉Docker服务进程运行对应的命令(MySQL)。你所做的这些操作都是通过命令行进行的。
图3.下载Docker映像并启动容器
一开始,先运行docker search mysql命令,这条命令将显示公共Docker注册中心里匹配关键词&mysql&的映像列表。我确定这条命令可以正常运行,接着使用命令docker pull brice/mysql下载&brice/mysql&映像。你可以看到Docker不仅仅下载的是你所指定的映像,而且还可以下载依赖这个包所建立的其他映像。输入docker images命令,将会罗列出目前本地具有的所有映像,其中包括了&brice/mysql&映像。使用-d选项启动容器,它将会脱离当前运行的容器之外运行一个容器,此时,你已经在一个容器里运行了MySQL了。你可以使用docker ps命令来验证,这条命令经罗列出运行的容器,而不是罗列出映像。在命令行的输出里,你还能看到MySQL服务侦听的端口号,默认是3306。
然而,在知道MySQL运行在容器内部情况下,你该怎样连接到MySQL呢?切记:每个Docker容器有自己的网络接口。你需要确定的是mysqld服务器进程运行在哪个IP地址和端口上。运行docker inspect &imageId&命令,它将给我们提供大量的信息。不过,由于你所需要的仅仅是IP地址,所以当你使用容器的哈希值对容器进行查看的时候,你就可以抓取到IP地址,即运行docker inspect 5a | grep IPAddress。现在你可以通过给标准的MYSQL CLI客户端指定主机地址和端口选项来连接了。当你使用完MySQL服务器后,你可以使用命令docker stop 5a关闭这个容器了。
我们使用了7条命令查找、下载、启动运行MySQL服务器的Docker容器以及使用完后关闭这个容器。在这个过程中,你不必担心与已安装软件之间存在的冲突,也不必担心MySQL的版本有什么不一样,或者存在哪些包依赖。你使用了7条不同的Docker命令:search、pull、images、run、ps、inspect和stop,不过,Docker客户端实际上有33条命令。你可以通过命令运行docker help命令或者查找在线手册来查阅全部命令列表。
在上面例子里进行Docker操作之前,我就提到了客户端与服务进程和Docker注册中心之间的通信是通过基于REST的Web服务而进行的。这就隐含地告诉你可以使用本地Docker客户端与远程的服务进程通信,从而可以有效地管理远端服务器上的容器了。Docker站点上对Docker服务进程、注册中心和索引的API都有很好的文档,并且举例给予了说明(见资源一节)。
Docker的工作流程
有多种方式可以把Docker引入到开发和部署过程里。让我们看看演示工作流程的例子,如图4。我们设想一个公司的开发人员可能运行安装了Docker的Ubuntu。他可能从公共注册中心下载映像或者上传映像到公共注册中心,并在这个映像的基础上安装自己的代码或者公司专有知识产权的软件,还要生成可上传到公司私有注册中心的映像。
在这个例子里,公司的产品质量测试环境运行的Centos和Docker。它也从公共或者私有的注册中心下载映像,然后再环境更新的时候启动各种容器。
最后,为了方便扩展和伸缩,公司把生产环境部署在云中,即部署在亚马逊的WEB服务上(AWS)。亚马逊Linux上也运行了管理不同容器的Docker。
注意:上面的所有三个环境运行着不同版本的Linux,但这三个环境都与Docker兼容。而且每个环境都运行着不同的容器组合。然而,由于每个容器都把自己的依赖同其他容器分离开来,因此不存在任何冲突,所有容器都平安地并存着。
图4.使用Docker进行软件开发的工作流程举例
认识到Docker提供的是一个以应用为核心的容器模型是非常重要的。也就是说,容器运行的是单独的应用或者服务,而不是许多应用或者服务。我们已经知道:创建和运行容器非常快而且消耗的资源也很少。由于你所使用的系统遵循单一责任法则,而且每个容器运行一个主进程,所以系统组件之间就是松耦合的。基于这个理念,我们自己就可以创建属于自己的,可以启动容器的映像了。
创建新的Docker映像
在前面的例子里,你已经通过命令行与Docker进行交互了。然而在创建映像的时候,更常见的是创建进行自动构建过程的&Dockerfile&。Dockerfile是简单的文本文件,它描述的是构建过程。你可以对Dockerfile实行版本控制,这样就可以就可以非常完美地重复创建映像了。
在接下来的例子里,我们将看看名字为PHP Box的Dockerfile(见代码清单1)。
代码清单1.PHP Box
#&PHP&Box&#&VERSION&1.0&&&&&#&use&centos&base&image&FROM&centos:6.4&&&#&specify&the&maintainer&MAINTAINER&Dirk&Merkel,&&&&&&#&update&available&repos&RUN&wget&http://dl.fedoraproject.org/pub/epel/6/x86_64/&?epel-release-6-8.noarch.&rpm&-Uvh&epel-release-6-8.noarch.rpm&&&&#&install&some&dependencies&RUN&yum&install&-y&curl&git&wget&unzip&&&&#&install&Apache&httpd&and&dependencies&RUN&yum&install&-y&httpd&&#&install&PHP&and&dependencies&RUN&yum&install&-y&php&php-mysql&&&&&&#&general&yum&cleanup&RUN&yum&install&-y&yum-utils&RUN&package-cleanup&--&package-cleanup&--&&?yum&clean&-y&all&#&expose&mysqld&port&EXPOSE&80&&#&the&command&to&run&CMD&[&/usr/sbin/apachectl&,&&-D&,&&FOREGROUND&]&
接下来我们仔细看看上面的Dockerfile都做了哪些事情。Dockerfile的语法是命令关键字,其后紧跟着是该命令的参数。通常命令关键字是大写的。注释部分是以#开头的。
FROM命令向你指明了所使用的基本映像。它必须是Docker文件的第一条命令。在这个例子里,你所做的工作都是建立在刚才新建的基本映像Centos上的。很显然,MAINTAINER命令则罗列出了维护这个Dockerfile的人员。RUN命令执行一条命令,并给出运行结果映像,因此它新创建了一个映像。这个Dockerfile里的RUN命令获取其他软件仓库的配置文件,然后使用Yum安装curl、git、wget、unzip、httpd、php-mysql和yum-utils。我们可以把这几个yum install命令合并成一条RUN命令,从而可以避免连续多次提交。
接下来的EXPOSE命令向外部开放端口80,它就是启动容器的时候Apache要侦听的端口号。
最后一条命令&CMD给出了容器启动时所要运行的缺省命令。启动容器就是启动一个单独的进程,这样你就可以把容器看作一条命令。
在命令行里输入docker build -t php_box .,这时Docker就会使用当前目录下的Dockerfile开始进行构建。运行所得到的最终映像将被命名为&php_box&,这样,你以后就会很容易的识别和查找这个映像。
这个构建过程下载了基本映像,紧接着安装Apache httpd以及与其相关的所有依赖。完成安装之后,将返回一个用来识别新创建映像的哈希值。这个值与你在前面启动MySQL容器时所使用的值类似。你可以使用php_box标签来运行Apache和PHP映像,命令如下:&docker run -d -t php_box。
下面我们将以很简短例子结束这篇文章,这个例子说明在已有的映像基础上如何简单地创建新映像:
#&MyApp&#&VERSION&&&&&&&1.0&&&#&use&php_box&base&image&FROM&php_box&&&&&&#&specify&the&maintainer&MAINTAINER&Dirk&Merkel,&&#&put&my&local&web&site&in&myApp&folder&to&/var/www&ADD&myApp&/var/www&
第二个Dockerfile比第一个要简短,实际上它仅仅包含了两条真正起作用的命令。首先通过&FROM命令指定了启动的是php_box映像。然后使用&ADD命令拷贝本地一目录到这个映像。在这个例子里,拷贝到映像的Apache的DOCUMNET_ROOT文件夹的是一个PHP项目。最终得到的结果是:启动这个映像的时候默认会启动这个服务站点。
轻量级应用及其依赖打包和部署工具Docker的出现是令人激动的事情,Linux社团很快采纳了它,而且还试着在生产环境中使用。例如,Red Hat在12月就宣布将在即将发布的Red Hat Linux企业版7里支持Docker。然而,Docker仍然是一个年轻的项目,而且正在飞速发展中。看到Docker项目发布1.0版本将是多么令人激动的时刻,1.0版本将是官方批准的用于生产环境的第一个版本。Docker依靠的现有的技术,其中一些技术已经具有十几年的历史了,但这并不意味着它没有任何创新。我希望这篇文章能给你足够多有关Docker的信息,并鼓励你下载Docker,亲自试一下。
Docker最新进展
在这篇文章发布的时候,Docker团队发布了版本0.8。最新的发布增加了对Mac OS X的支持,它有两个组件组成。客户端可以运行在OS X操作系统上,而Docker服务进程则运行在由boot2docker管理的轻量级VirtualBox虚拟机上,其中也包含命令行客户端。由于底层技术,比如LXC和命名空间得不到OS X的支持,所以这么做就是必然的选择。我认为大家都在期待有类似的方案能用在其他平台上,比如Windows上。
版本0.8还引入了几个新的构建特性,并试着提供对二叉树型文件系统的支持(BTRFS)。BTRFS是另一个即写即拷贝的文件系统,另外BTRFS存储驱动用来替代AuFS驱动。
尤其值得一提的是: Docker 0.8修补了许多程序漏洞,强化了性能。总的提交数量说明Docker团队为了生成可用于生产环境的发布版1.0所做的努力。因为Docker团队是每个月进行提交的,我们期望在4-5月份这个时间窗口发布1.0版本。
Docker主站点:&&
Docker注册中心:&&
Docker注册中心相关的API:&&
Docker Hub API :
Docker远端应用API:
注解:由于翻译完成时Docker Index API已经更改为Docker Hub API,因此就采用的新的API。
英文原文:【编辑推荐】【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条头条外电头条外电
24H热文一周话题本月最赞
讲师:0人学习过
讲师:0人学习过
讲师:5人学习过
精选博文论坛热帖下载排行
本书全面系统地概括了计算机网络的基本理论,详细阐述了OSI模型与网络协议、网络规划与综合布线、对等网络与服务器/客户端网络、Intranet服...
订阅51CTO邮刊}

我要回帖

更多关于 解除合同告知函 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信