Docker镜像:
首先我们知道,操作系统分为内核和用户空间,相对于linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。
而Docker镜像,就相当于一个root文件系统,只不过这个文件系统有点特殊,提供了容器运行时所需要的程序、库、资源、配置等文件。
只不过它多包含了一些运行时准备的配置参数,实际上镜像不包含任何动态数据的,其内容在构建之后也是不会改变的。
镜像的分层存储机制:
镜像包含完整的root文件系统,其体积是庞大的,因此设计时不再采用iso那样的打包文件,而是采用多文件系统。
这里要说一下,镜像实际上是一个虚拟的概念,实际上就是由一组文件系统组成。
至于镜像是如何被构建起来的,其由文件一层层构建,例如A层构建完,B层构建,构建完成的不会再改变。改变只能发生在当前层。
如果想在B层删除A层,并不是真正的删除,而是将B层中对A层的标记删除,实际上镜像中还是存在A层的,相当于删了个快捷方式。
因此,构建的时候应该只包含该层应有的东西,额外的东西金肯清理掉。
这里要说一下他的一个优点,那就是复用,可以使用构建好的镜像作为基础差,然后添加新的层,以定制所需内容。
Docker容器:
镜像和容器的关系就是Java中类和实例的关系,容器是实体,可以被创建,启动,运行,停止,删除等。
容器的实质是进程,只不过这个进程与直接在宿主执行的进程不同,容器由隶属于自己的独立的命名空间。
因此容器可以拥有自己的root文件系统,网络配置,进程空间,并且具有隔离性的。
镜像分层存储,容器也是如此,因为容器是以镜像为基础层的。当我们想要在容器上存储数据时,容器就会创建一个当前容器的存储层,用来存储数据,容器存储层的生命周期跟随着容器,同生同死。
Docker实践发现,容器不应向存储层内些数据,要保持无状态化,文件的写入应该使用数据卷或宿主目录,这些地方的读写会跳过存储层,直接对宿主读写,稳定性和性能更佳。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器可以随意删除、重新 run ,数据却不会丢失。
Docker Registry:
镜像构成完毕,很容易在当前宿主上运行,如果需要在其他服务器上运行,则需要Docker Registry这样的服务。
一个Docker Registry可以含有多个仓库,每个仓库可以含有多个标签,每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。
我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Registry 公开服务
Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服务。
一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像,具体以后再叙述
Docker Registry私有服务
除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。
开源的 Docker Registry 镜像只提供了 Docker Registry API 的服务端实现,足以支持 docker 命令,不影响使用。
但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能,具体以后再叙述
在官方的商业化版本 Docker Trusted Registry 中,提供了这些高级功能
8519

被折叠的 条评论
为什么被折叠?



