Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker分为CE和EE。CE即社区版,免费开源。EE即企业版,安全性更高,需要付费使用。
Docker 三个基本概念
·镜像(Images)
·容器(Container)
·仓库(Registry)
Docker镜像
就是一个层叠的只读文件系统,底端是一个引导文件系统,当容器启动之后引导文件系统就会被卸载,上一层是只读的root文件系统,或者更上一层还有其他文件系统,Docker“联合加载”会将这种叠加在一起的文件系统整合在一起,而这种整合在一起的文件系统,就是Docker镜像。它主要提供一些容器运行时需要的程序,库,资源,配置(环境变量,用户)。镜像不会包含任何动态内容,内容结构也不会被改变。
Docker容器
容器就实质是一个进程,当启动一个容器时,Docker会在镜像最顶层加载一个“读写层”,容器就是在这个读写层执行的。Docker第一次启动时,这个“读写层”是空白的,当修改一个文件时,Docker会从文件系统底层的“只读层”复制到“读写层”,该文件只读版本依然存在但是被“读写层”改文件的副本所隐藏,这就是Docker的“写时复制”。
镜像和容器的关系
镜像是静止的定义,容器是镜像运行时的实体,容器可以被创建,启动,停止和删除等。(这个地方花了很长时间才区分开镜像和容器的本质区别)
Docker仓库
当镜像构建完成后,如果要拿到其他服务器上使用时,就需要一个集中管理,分发镜像的服务,这就是Docker仓库(分为共有和私有)。
如果还是不清楚,可以参考这个:http://dockone.io/article/783
Docker依赖Linux内核特性
Docker依赖Linux内核2大特性:
·NameSpace
·Cgroups
NameSpace: 将特定的全局系统资源(网络,文件系统,进程等),通过抽象的方法使NameSpace进程实现资源隔离
Cgroups: 用于资源限定,设置优先级和资源计量和资源控制