1.什么是docker?git
Docker是一个开源的引擎,能够轻松的为任何应用建立一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试经过的容器能够批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其余的基础应用平台。redis
官方的描述是:Build, Ship, and Run Any App, Anywhere 在任何地方部署,传输,运行任何应用docker
Docker相似虚拟机的概念,可是跟虚拟机比起来更灵活,速度更快,CPU/内存消耗更低,关键是更方便管理。与虚拟化技术的不一样点在于下面几点:服务器
1)虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操做系统上,利用操做系统的containerization技术,因此docker甚至能够在虚拟机上运行。ide
2)虚拟化系统通常都是指操做系统镜像,比较复杂,称为“系统”;而docker开源并且轻量,称为“容器”,单个容器适合部署少许应用,好比部署一个redis、一个memcachedmemcached
3)传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不只更为轻便和低成本,并且引入了相似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低测试
4)传统的虚拟化技术在构建系统的时候较为复杂,须要大量的人力;而docker能够经过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile能够手动编写,这样应用程序开发人员能够经过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利ui
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