1.什么是docker?

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

  官方的描述是:Build, Ship, and Run Any App, Anywhere 在任何地方部署,传输,运行任何应用

Docker类似虚拟机的概念,但是跟虚拟机比起来更灵活,速度更快,CPU/内存消耗更低,关键是更方便管理。与虚拟化技术的不同点在于下面几点:

1)虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行。

2)虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis、一个memcached

3)传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低

4)传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利

5)Dockerfile可以基于已经构建好的容器镜像,创建新容器。Dockerfile可以通过社区分享和下载,有利于该技术的推广


2.结构组成

  底层由"核心系统kernel,文件系统等构成",上面是镜像(p_w_picpath),分为基础镜像(只读)和普通镜像,所有镜像可以直接启动生成一个实例(container),container就可以理解为一个可以直接运行的虚拟机了。

  container和p_w_picpath在Docker的世界里,Image是指一个只读的层(Layer),这里的层是AUFS里的概念,最直观的方式就是看一下docker官方给出的图  Docker使用了一种叫AUFS的文件系统,这种文件系统可以让你一层一层地叠加修改你的文件,最底下的文件系统是只读的,如果需要修改文件,AUFS会增加一个可写的层(Layer),这样有很多好处,例如不同的Container可以共享底层的只读文件系统(同一个Kernel),使得你可以跑N多个Container而不至于你的硬盘被挤爆了!这个只读的层就是Image!而如你所看到的,一个可写的层就是Container。

  那Image和Container的区别是什么?很简单,他们的区别仅仅是一个是只读的层,一个是可写的层,你可以使用docker commit 命令,将你的Container变成一个Image,也就是提交你所运行的Container的修改内容,变成一个新的只读的Image,这非常类似于git commit命令。

  Docker 由下面这些组成:

  1) Docker 服务器守护程序(server daemon),用于管理所有的容器。

  2) Docker 命令行客户端,用于控制服务器守护程序。

  3) Docker 镜像:查找和浏览 docker 容器镜像。


http://liumissyou.blog.51cto.com/4828343/1792500