Docker学习笔记之一

docker之学习笔记

1、 docker的最初是为了解决什么问题的?

       Docker的出现是来起源于paas项目dotCloud。pass项目的主要定位就是为软件开发提供相关的配套设施:语言环境,运行环境和存储环境。当dotCloud把基于LXC及GO语言开发的Pass平台做的极致的时候,理论上dotCloud已经不受环境限制了。后台迫于某些方面的压力,dotCloud团队将其核心引擎开源(成为docker),受到广大开发人员的追捧。

      有以上可知,由于pass项目的目的就是为软件开发环境提供相关的配套设施:语言环境,运行环境以及存储环境。所以docker的特点也就比较明确了: Docker宣称,开发人员可以将笔记本上的编译,测试,打包其应用及依赖到可移植容器中,然后可以任意发布到任意服务中,并在生产环境部署。Docker是一个开源的引擎,可以为任何应用创建一个轻量级的,可以移植的,自给自足的容器。

       而容器是完全沙箱机制,相互之间不会有任何接口,有点类似IOS中独立的APPs.

2、 了解一下docker实现其功能的立足之本?

       我们首先理解下什么是容器。理解容器这一基本概念的时候我们首先要理解容器的另一基本概念:命名空间(namespace)(表示标识符(identifier)的上下文(context)。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中)。了解了命名空间之后,我们再详细了解一下容器。容器就是新的进程类似于Docker和Rkt这样的工具被开发出来以后使得我们能系统化地使用这些特性。 这些工具提供了打包的功能将一个命名空间打包成一个容器,使得我们可以很方便的将它搬到另一台机器上运行,不出意外的它会跟之前完全一致的方式继续运行,因为它本身的隔离特性。事实上,通常可以很容易的将容器想象为可以完全独立的运行的小计算机. 因为这些新的工具非常易用,它们渐渐成为一种流行的构建软件方式。

       容器中的进程。在这里,一个进程仅仅能够与所在同一个容器里面的其他进程和资源交互。

       Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

 

3、识一下Docker的基本组成概念?

      Docker包括三个基本概念

  • 镜像(Image
  • 容器(Container
  • 仓库(Repository

       理解了这三个概念,就理解了Docker 的整个生命周期。

a)、镜像(Image

       镜像是一个文件系统,类似于linux中的root文件系统。除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

        镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

b)、容器 (container)

       镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的  和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

       一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。如果Docker容器需要写底层Docker镜像中的文件,那么此时就会涉及一个叫CopyonWrite的机制,即aufs等联合文件系统保证:首先将此文件从Docker镜像层中拷贝至最上层的可读写层,然后容器进程再对读写层中的副本进行写操纵。对于容器进程来讲,它只能看到最上层的文件。

    c)、仓库 (DockerRegistry)   

       镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,DockerRegistry 就是这样的服务。

       一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。以 Ubuntu 镜像 为例,ubuntu 是仓库的名字,其内包含有不同的版本标签,如,14.04, 16.04。我们可以通过 ubuntu:14.04,或者 ubuntu:16.04 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 ubuntu,那将视为 ubuntu:latest。

 文章参考:

    https://github.com/bingohuang/play-docker-images

    https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值