美文网首页
Docker基本须知

Docker基本须知

作者: 阿太哥 | 来源:发表于2017-06-24 23:12 被阅读34次

    以下来自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

    相关文章

      网友评论

          本文标题:Docker基本须知

          本文链接:https://www.haomeiwen.com/subject/lknkcxtx.html