docker和虚拟机的区别_使用高性能docker容器各种虚拟机技术开启了云计算时代而Docker 作为下一代虚拟化技术 正在改变开发 测试 部署应用的方式

程序猿 千万别说你不了解Docker!

【一】从dotCloud到Docker--低调奢华有内涵

1 追根溯源:dotCloud

有一个名不见经传的小公司  名字 dotCloud  主要提供 基于 PaaS(Platform as a Service 平台及服务)平台为 开发商提供技术服务  开发工具和技术框架

初创企业总是艰难的 dotCloud也是一样 在IBM 亚马逊 谷歌等大公司的挤压下 dotCloud举步维艰 即使2011年拿到了1000万美元的融资 可和上述大公司比起来 也不过是杯水车薪

随着开源的洪流袭来 在2013年dotCloud 的创始人 28岁的Solomon Hykes做了一个艰难的决定:将dotCloud的核心引擎开源!然而一旦这个基于 LXC(Linux Container)技术的核心管理引擎开源 dotCloud公司就相当于走上了一条"不归路"

可正是这个孤注一掷的举动 却带来了全球技术人员的热潮 众程序员惊呼:太方便了 太方便了 也正是这个决定 让所有的IT巨头也为之一颤 一个新的公司也随之出世  Docker

2 Docker  一个春秋 跨越了Docker的成名路

在互联网时代 一夜成名早已不是什么新闻 Docker 这个技术公司 向证明了 成为一个"国际巨星" 

 几乎每个一个月 Docker都会发布一个版本  昭示着一个Docker正在以一个新兴容器领导者的姿态迈进

 

 

一年的时间 使一个围绕着Docker的小型初创企业生态体系逐渐形成 Docker先后赢得了Google 微软 Amazon VMware等巨头的青睐 巨头们纷纷示意将保证自己平台与Docker容器技术的兼容性 微软还宣布来要推出面向Windows的Docker客户端

【二】如何定义Docker?

Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 然后发布到任何流行的 Linux 机器上

Docker是一个重新定义了程序开发测试 交付和部署过程的开放平台 Docker则可以称为构建一次 到处运行 这就是Docker提出的"Build once Run anywhere"

Docker入门白皮书:总能找到你想要的
Docker:Build once Run anywhere

为了更好的认识Docker 先来了解几个必备词汇:镜像 容器和仓库

1 镜像(image):Docker 镜像就是一个只读的模板 镜像可以用来创建 Docker 容器 Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像 用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用

镜像是一种文件结构 Dockerfile中的每条命令都会在文件系统中创建一个新的层次结构 文件系统在这些层次上构建起来 镜像就构建于这些联合的文件系统之上

Docker官方网站专门有一个页面来存储所有可用的镜像 网址是:index.docker.io

2 容器( Container):容器是从镜像创建的运行实例 它可以被启动 开始 停止 删除 每个容器都是相互隔离的 保证安全的平台 可以把容器看做是一个简易版的 Linux 环境 Docker 利用容器来运行应用

3 仓库:仓库是集中存放镜像文件的场所 仓库注册服务器(Registry)上往往存放着多个仓库 每个仓库中又包含了多个镜像 每个镜像有不同的标签(tag) 目前 最大的公开仓库是 Docker Hub 存放了数量庞大的镜像供用户下载

Docker仓库用来保存 images 当 创建了自己的image之后 就可以使用push命令将它上传到公有或者私有仓库 这样下次要在另外一台机器上使用这个image时候 只需要从仓库上pull下来就可以了

Docker的运行离不开这几位的支持 Docker的成功也是拜几位所赐 也有人会误以为 Docker就是容器 但Docker只会傲娇地说:我不是容器 我是管理容器的引擎

Docker入门白皮书:总能找到你想要的
什么是Docker

Docker中文手册上解释说:Docker是一个开源的引擎 可以轻松的为任何应用创建一个轻量级的 可移植的 自给自足的容器 开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署 包括VMs(虚拟机) bare metal OpenStack 集群和其他的基础应用平台

 Docker并非是容器 而是管理容器的引擎
Docker为应用打包 部署的平台 而非单纯的虚拟化技术

 

 

【三】Docker与虚拟化争锋

Docker入门白皮书:总能找到你想要的
容器技术与传统虚拟机性能对比

谈到虚拟化 很多人又发问了 Docker和虚拟化有什么区别?Docker(或者说是容器)的出现是否会取代传统的虚拟化技术

说起虚拟化 大家首先想到的必然是VM一类的虚机 这类虚拟机完美的运行了另一套系统 能够使应用程序 操作系统和硬件三者之间的逻辑不变

但在惜时如金的现在 这类虚机也面临着一定的问题 比如:启动时间太长 你有没有过在启动虚拟机后 点开其他页面继续操作 过了一分钟才回来的经历?还有虚拟镜像体积太大(一般都是几十GB)等问题 相比之下 Docker的镜像一般只有二三百兆 并且启动速度超快  Docker的启动时间为毫秒级

还有一个最大的问题是价格问题 据StackEngine调查分析 有43.8%的企业使用Docker的原因是VMware太贵

Docker入门白皮书:总能找到你想要的
Docker与虚拟机建构对比

 传统的虚拟技术还不会被取代 Docker或者说容器技术和虚拟机并非简单的取舍关系

 CaaS(Container as a Service 容器即服务)概念也是近两年才刚刚出现 无论是应用管理还是运行维护方面 Docker都还处于发展与完善阶段


【四】Docker 为什么与众不同

Solomon Hykes:成功的要素之一是在正确的时间做了正确的事 一直坚信这个理念 Docker就好比传统的货运集装箱 一直都在努力 努力让这个技术更加灵活 更容易使用

站在未来的角度 Docker解决了三大现存问题

Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 然后发布到任何流行的 Linux 机器上 便可以实现虚拟化

俗话说:天下武学唯快不破;在更新迭代如此之快的IT领域更是如此 所有成功的IT公司都必须走在时代的前列 他们的产品应该来自未来 他们有必要要站在未来的角度解决现存的问题


Docker之父Solomon Hykes:Docker就好比传统的货运集装箱

Solomon Hykes曾经说过 自己在开发dotCloud的PaaS云时 就发现一个让人头痛的问题:应用开发工程师和系统工程师两者之间无法轻松协作发布产品 Docker解决了难题 让开发者能专心写好程序;让系统工程师专注在应用的水平扩展 稳定发布的解决方案上

 

Docker解决了三大现存问题

 

1 简化程序:Docker让开发者可以打包 应用以及依赖包到一个可移植的容器中 然后发布到任何流行的 Linux 机器上 便可以实现虚拟化

Docker改变了虚拟化的方式 使开发者可以直接将自己的成果放入Docker中进行管理 方便快捷已经是Docker的最大优势 过去需要用数天乃至数周的任务 在Docker容器的处理下 只需要数秒就能完成

2 避免选择恐惧症:如果 有选择恐惧症 还是资深患者 Docker帮你打包你的纠结!比如Docker镜像;Docker镜像中包含了运行环境和配置 所以Docker可以简化部署多种应用实例工作 比如Web应用 后台应用 数据库应用 大数据应用比如Hadoop集群 消息队列等等都可以打包成一个镜像部署

3 节省开支:一方面 云计算时代到来 使开发者不必为了追求效果而配置高额的硬件 Docker改变了高性能必然高价格的思维定势 Docker与云的结合 让云空间得到更充分的利用 不仅解决了硬件管理的问题 也改变了虚拟化的方式

另一方面 Docker能够是自愿额达到充分利用 举个简单地例子:凌晨三点的时候只有很少的人会去访问你的网站 同时你需要比较多的资源执行夜间的批处理任务 通过Docker可以很简单的便实现资源的交换

Docker的这些优势 让各大IT巨头纷纷对Docker看好

【五】统一标准 建立更有活力的生态系统

Docker入门白皮书:总能找到你想要的
开放容器技术项目(Open Container Project)

在2015年的DockerCon上推出了开放容器技术项目(Open Container Project) OCP是一个非营利性组织 其受特许建立通用的容器软件技术标准

这个项目汇集了微软 谷歌 惠普 IBM 英特尔 红帽(Red Hat) VMware以及高盛等众多实力企业 OCP的推出 也使宿敌Docker和CoreOS走向了联合 让微软与自己的竞争对手Linux合作 足以见得Docker的魅力

谷歌云计算平台产品经理克雷格·麦克拉克伊(Craig Mcluckie)说:创建通用容器格式非常重要 单一标准可以促进更有活力的生态系统

【六】企业对Docker是否认可 安全是关键!

随着容器技术逐渐得到IT界的认可 CaaS(Container as a Service 容器即服务) 形成 而Docker作为CaaS技术的标杆是否已经得到企业的认可?是否投入生产呢?

2015年 VMblog.com和CloudCow.com共同组织了一次问卷调查 报告显示 Docker的早期用户中 63%的用于QA/Test 53%的用于开发 并且31%的用户计划在生产环境中使用Docker 阻碍企业使用Docker的最大因素在于其安全性以及缺少生产环境下的运维工具(两个原因各占49%左右)

对Docker应用最广泛的三个领域分别是:Test/QA应用;Web应用;大数据 企业应用

调查显示 目前企业对Docker的接受程度在不断提高 但Docker的安全性似乎仍旧是企业顾虑的主要原因 那么Docker的安全性究竟如何?

Docker入门白皮书:总能找到你想要的
Gartner:Docker还是一项年轻的技术 它的安全性仍不够成熟

2015年1月 Gartner分析师Joerg Fritsch发布一份报告 报告显示:虽然Docker这款容器化工具已经颇具名声 但Docker的安全性仍不够成熟

Joerg Fritsch指出:"Docker与容器技术目前还无法通过虚拟机管理程序弥合自身最为严重的两大短板:安全性保障与管理功能 外加在常见控制机制的机密性 完整性与可用性方面提供支持 "

总体来讲 Docker的安全性能还不错 只是这还是一项年轻的技术 因此目前尚未积累起能够满足实际生产需求的完整工具生态系统

 

其实如果要谈论Docker的安全性 就要谈论三点:命名空间(Namespace);Docker程序本身的抗攻击性和加固内核安全性来影响容器的安全性

Docker入门白皮书:总能找到你想要的
企业对Docker是否认可?安全是关键!

1 命名空间(Namespace):Docker有五个命名空间:进程 网络 挂载 宿主和共享内存 为了隔离有问题的应用 Docker运用Namespace将进程隔离 为进程或进程组创建已隔离的运行空间 为进程提供不同的命名空间视图 这样 每一个隔离出来的进程组 对外就表现为一个container(容器) 需要注意的是 Docker让用户误以为自己占据了全部资源 但这并不是"虚拟机"

内核namesapce从内核2.6.15之后被引入 距今已经5年了 在很多大型生产系统中被验证 他们的设计和灵感提出的时间更早 openvz项目利用namespace重新封装他们的内核 并合并到主流内核中 openvz最早的版本是2005年的 所以他们的设计和实现都很成熟

2 Docker程序本身的抗攻击性:Docker允许你在主机和容器之间共享文件夹 这就容易让容器突破资源限制 那么容器就可以对主机做任何更改了 但实际上 几乎所有虚拟机系统都有在物理主机和虚拟机之间共享资源的限制 所以这一层的安全性 需要你自己把控

3 加固内核安全性:默认情况下 Docker启动的容器只使用一部分内核capabilities 就算攻击者在容器中取得了root权限 他能做的破坏也少了 也不能获得主机的更高权限

由此可以说:Docker还是比较安全的 但是你要注意使用在容器中使用非root权限允许进程

目前来说 Docker的主要应用场景为:

面向开发人员:快速开发 交付应用程序 开发环境的机器通常内存比较小 之前使用虚拟的时候 经常需要为开发环境的机器加内存 而现在Docker可以轻易的让几十个服务在Docker中跑起来

面向运维人员:降低运维成本 正如通过虚拟机来整合多个应用 Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本 Docker通过镜像机制 将你的代码和运行环境直接打包成镜像 扔到容器启动即可

面向企业:Docker本身就发家于PaaS 在Docker面向企业 是可以提供Paas层的实现;比如 扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境

Docker入门白皮书:总能找到你想要的
Docker"集装箱"

 

 

【七】评说Docker

Solomon Hykes(Docker之父):"建立一个为所有生产软件共有的系统 使用一种被广泛接受的方式 让它可以很好的运行和扩展 让它可以被所有人依赖 然后将它视为理所当然的存在 并使用它创造自己的奇迹 这是个挑战

Docker入门白皮书:总能找到你想要的

评说Docker

Chris Swan (银行业的技术专家 曾经有十几年的时间在从事金融服务业):Docker公司已经建立了清晰的道路 即发展核心能力(libcontainer) 跨业务管理(libswarm)和容器间消息(libchan)

Docker公司表达了利用自身生态系统的意愿 随着时间的推移 虚拟机和容器(Docker中的"运行"部分)之间的区别很可能变得不再那么重要 这将使注意力转到"构建(build)"和"交付(ship)"方面

马全一(Docker中文社区创始人之一):Docker一定会成为云计算和大数据领域的重要成员之一

Docker的出现使得以Docker容器为单位的云平台和Docker容器为载体的交易平台成为可能 任何后端的服务程序 都可以封装在Docker容器中进行销售 分发和部署 后端开发者能像Mobile App开发者那样去做自己的产品来获利 随着Golang的发展 一定会有以Golang为开发语言 Docker为运行载体的新大数据平台 成为Hadoop平台的竞争者

Docker 一个迅速走红 并在技术领域赢得一片好评的一款应用 尽管Docker目前还不够完善 但已经有很多厂商已经开始使用 同时一批围绕Docker建立起来的初创企业已经形成 学习Docker风气正盛 可以预见在不远的未来 Docker和CaaS会获得更多的人肯定 越来越多的企业愿意使用Docker这个应用

PS:贴上一些Docker基本命令

Docker ps用来查看正在运行中的容器

Docker ps命令的常用参数(及组合)如下

-a: 查看所有容器 包括已经停止运行的

-l: 查看刚刚启动的容器

-q: 只显示容器ID

-l -q: 则可以返回刚启动的容器ID

Docker stop用来停止运行中的容器 同时你还可以用Docker start来重新启动一个已经停止的容器

Docker restart可以重启一个运行中的容器 这就相当于对一个容器先进行stop再start

Docker入门白皮书:总能找到你想要的


Docker服务对应的版本查看

# sudo Docker version

Docker命令帮助

#sudo Docker  //查看Docker的所有命令

#sudo Docker command --help  //查看单个Docker命令的帮助 如Docker run --help

Docker入门白皮书:总能找到你想要的

Docker入门白皮书:总能找到你想要的

Docker入门白皮书:总能找到你想要的
常用Docker命令