镜像(Image)
静态文件,提供了容器运行时所需的程序、库、资源、配置等文件,另外包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。(相比文件的说法,文件系统的说法更加合理,因为镜像就像一个文件系统,包含了许多静态的目录和文件)
镜像包含操作系统完整的 root 文件系统,体积较大,所以其被设计为分层存储的架构。不同于操作系统那样的一个超大的ISO打包文件,一个镜像是由多层文件系统联合组成;在镜像构建时,会一层层构建,前一层是后一层的基础,每一层构建完就不会再发生改变。
分层存储的特征使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。
(镜像操作命令:http://t.csdnimg.cn/WfXun)
容器(Container)
进程,镜像是静态的定义,容器是镜像运行时的实体,可以被创建、启动、停止、删除、暂停等。
由于是虚拟化技术,对于容器进程来说,它会运行于属于自己的独立的命名空间,可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。
容器也运用了分层存储技术,每一个容器运行时,都是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。容器运行时,只会修改当前层,不会影响上层的镜像层;容器消亡时,容器存储层也随之消亡,任何保存于容器存储层的信息都会随容器删除而丢失。
(最佳实践:容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者 绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。)
(容器操作命令:http://t.csdnimg.cn/NKl4z)
仓库(Repository)
docker Registry是一个集中的存储、分发镜像的服务。一个 Docker Registry 中可以包含多个仓库;每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
通常一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 : 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Registry 公开服务
开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库等。
Docker客户端与Docker daemon
Docker 使用 C/S 结构,即客户端/服务器体系结构。 Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像。 Docker 客户端和服务端可以运行在一台机器上,也可以通过 RESTful 、 stock 或网络接口与远程 Docker 服务端进行通信。