赞
踩
Docker镜像是一个特殊的文件系统。除了提供运行容器所需的程序、库、配置等文件以外,还包含一些为运行时准备的配置参数,如匿名卷,环境变量,用户等。
镜像不包含任何动态的数据。
镜像被设计为分层存储的架构,因为镜像往往需要包含操作系统的完整root文件系统,而完整的root文件系统体积比较庞大,因此将镜像设计为分层存储。
镜像是个虚拟的概念,其本身并不是一个类似打包文件,即实际的实现并不是单个的文件,而是由一组文件系统组成,或者是由多层文件系统组成。
镜像构建时,是按照层构建的。前一层是后一层的基础。每一层构建完成后就不会再改变,后面的任何一层的改变只发生在自己的层上,不会更改之前的层的内容数据。例如,删除前一层的文件,并不是真正的删除前一层中的文件数据,而是在当前层标记前一层的文件为删除。因此被删除的文件其实会一直保留在镜像系统中。
因此在构建镜像时,需要保证每一层只包含必要的内容,任何额外的数据在该层构建结束之前必须清理掉,否则会一直保存在该层中,导致镜像中包含不必要的数据,进而增加镜像的体积与冗余程度。
分层存储的架构设计,可以利用之前构建好的镜像作为基础层,进一步添加新的层,以定制自己所需的新的镜像。
镜像与容器的关系,类似面向对象编程中类和实例的关系。容器是镜像运行的实体。容器可以被创建,启动,停止,删除等。
容器实质是进程,但是容器中的进程运行于属于自身的命名空间。容器中的进程运行在一个隔离的环境中,使用起来好像是在独立于宿主机的操作系统下运行一样。
每一个容器的运行,都以镜像为基础层,在其之上创建一个当前容器的存储层,称这个为容器运行时读写而准备的存储层为容器存储层。
容器存储层的生命周期和容器一样,在容器被删除时,容器存储层也将消失,保存于容器存储层的数据也将丢失。因此按照docker最佳实践的要求,容器存储层不应该保存任何的数据。所有数据的保存,都应该使用数据卷,或者绑定宿主机的目录。
Docker Registry是一个集中存储,分发镜像的服务。
一个Docker Registry中往往包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应一个镜像。
通常一个仓库会包含同一个镜像的不同版本,标签对应镜像的版本号。可以使用<仓库>:<标签>的形式来指点特定的镜像。
用户可以在本地搭建私有的Docker Registry。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。