以下来自docker_practice.pdf中的相关描述。
Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本!
github ref: https://github.com/yeasy/docker_practice
Docker包括三个基本概念
镜像(Image)
容器(Container)
仓库(Repository)
理解了这三个概念,你就基本理解了Docker的整个生命周期!
先不急着解释,以下是一些类比,对初学者有很大帮助
类比1: Image是盗版的xp安装光盘,Container是装在你笔记本上的c:/windows目录
类比2: Image和Container的关系,就好比面向对象的类 与 实例的关系
类比3:从局部去看,Image和Container的区别在于是不是运行期,run了就是Container,不run就是Image。其实run的时候创建了一个可写的Image在mount上
类比4:Image和Container就是可执行文件和进程的关系,实际上,Image里是一堆bin文件,而运行中的Container就是一组进程。
对此,Jerome是这么解释的
An image is read only.It is like a template,a model.
From the image,you can create one or many containers,The containers are read write.
Another analogy:the image is like a blueprint,and the container is the execution of the blueprint.
可以这么理解
1,Image和Container是1对n,n>=1
2,Image是静态的Template/blueprint 而Container是Image的execution实例化
相信,你已经有了一些基本的理解了!
Docker Image
众所周知,操作系统分为内核和用户空间,对Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker iamge 就相当于是一个root文件系统,比如官方镜像ubuntu:14:04 就包包含了完整的一套Ubuntu 14:04最小系统的root文件系统。
Docker镜像是一个特殊的文件系统,不包含任何动态数据,其内容在构建后就不会改变。
镜像包含操作系统的完整的root文件系统,其体积往往是庞大的,因此Docker设计时,就充分利用Union FS的技术,将其设计为分层存储的架构,所以,严格说,镜像并非是像一个iso那样的打包文件,而是一个虚拟的概念,其实际体现并非有一个文件组成,而是一组文件系统组成,镜像构建时,会一层层构建,前层是后一层的基础,每层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真删除前一层,而是在当前层标记前一层已删除。
Docker Container
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行属于自己的独立的命名空间,因此容器可以拥有自己的root文件系统,自己的网络配置,自己的进程空间,甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多初学Docker时常常会把容器和虚拟机搞混!
镜像使用的是分层存储,容器也是,每个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层(可以理解为容器运行时为读写准备的存储层) 容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡,因此,任何保存在容器存储层的信息都会同容器删除而丢失。Docker推荐使用 数据卷Volume 或者绑定宿主目录,在这些位置的读写会跳过容器存储层。
Docker Registry
镜像构建完成后,就可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中存储,分发镜像的服务-- Docker Registry
一个Docker Registry中可以包含多个仓库Repository,每个仓库可以包含多个标签Tag
每个标签对应一个镜像。
通常一个仓库会包含一个软件的不同版本镜像,而标签就相当于版本号,通过<仓库名>:<标签>的格式来确定软件的版本,如果没有标签,则默认为latest为默认标签
对Ubuntu为例,ubuntu:14:04 包含了仓库名ubuntu和标签14:04,仓库名一般是两段式路径
比如 jwilder/nginx-proxy 前段代表了Docker registry多用户环境下的用户名,后者代表软件名(非必需遵守)。
Docker Registry 公开服务
该服务是开放给用户使用,允许用户管理镜像的Registry服务,一般这类公开服务允许用户免费上传,下载公开的镜像,并提供收费服务供用户管理私有镜像。
最常用的Registry公开服务是官方的Docker Hub,也是默认的Registry,并拥有大量高质量的官网镜像,国内的镜像站点也是同步的该站资源。但由于国内访问这些服务比较慢,国内一些云服务商提供了针对Docker Hub的镜像服务Registry Mirror 被称为加速器。
常见的有 时速云,网易云,DaoClound,阿里云等
Docker Registry 私有服务
除了公开服务外,用户可以使用本地搭建的私有Registry,就像搭建maven私服一样。Docker官方提供了Docker Registry镜像,可以直接使用做为私有Registry服务,还有第三方软件实现了Docker Registry API,甚至提供了用户界面以及一些高级功能。比如VMWare Harbor和Sonatype Nexus
....未完,待续
dockerfile iamges container repository