Docker有三个非常重要的概念,镜像,容器和仓库。学习Docker一定绕不开这三个概念的理解。
镜像
镜像是一个特殊的文件系统,镜像利用Union Fs技术,由多层文件系统组层。镜像是一堆只读层(read-only layer)的统一视角。镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层,如下图所示。
镜像的一层如下图所示,包含id,元数据(Metadata 简称MD),指向前一层(父)的指针。元数据就是关于这个层的额外信息,它不仅能够让Docker获取运行和构建时的信息,还包括父层的层次信息。
操作系统常分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。镜像就是这样一个特殊的文件系统,在创建容器后,运行在宿主机的Linux内核之上。
容器
容器也是一堆层的统一视角,不同的是最上层是可读写层。docker create 命令为指定的镜像(image)添加了一个可读写层,构成了一个新的容器。
Docker start命令为容器文件系统创建了一个进程隔离空间。注意,每一个容器只能够有一个进程隔离空间
仓库
仓库是用来管理软件镜像的地方,通过仓库可将本地构建的镜像上传到仓库,也可将仓库中的镜像拉取到本地。
一个仓库会用来管理某个软件不同版本的镜像,标签用来标示各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定某个软件某个版本的镜像。如果不给出标签,将以 latest 作为默认标签。如下所示:
附录: