您的位置:首页 > 运维架构 > Docker

docker学习笔记3-使用docker镜像、容器运行过程

2016-05-28 10:46 1046 查看

什么是docker镜像

镜像是容器的模板基础,我将docker镜像理解为由四层文件系统叠加而成:

最底层是一个引导文件系统bootfs。值得注意的是docker的bootfs与Linux/unix的bootfs不一样的是docker的一个容器启动后其bootfs会从内存中被卸载掉,留出更多内存以供initrd磁盘镜像使用。

第二层是root文件系统rootfs。rootfs可以是一种或多种操作系统(如fedora或Ubuntu)而且与Linux/unix的rootfs不同的是root文件系统不会在引导结束并完成完整性检查之后就从只读模式切换为读写模式,docker的root文件系统永远以只读模式运行。

第三层docker使用了一种被称之为联合加载(nuion mount)的技术,将更多的文件系统以只读方式一次性同时加载。联合加载会将各种文件系统叠加到一起而且从外面看起来只能看到一个文件系统,这样最终的文件系统会包含所有底层的文件和目录。

第四层是一个空初始化的读写层,以供将镜像实例化,也是我们对容器进行操作的地方。

docker文件系统层如下图所示:



docker镜像有以下特点:

由dockerfile产生

呈现层级结构

每层镜像包含:镜像文件以及镜像 json 元数据信息

镜像存储位置

本地镜像都保存在Docker宿主机的/var/lib/docker目录下。每个镜像都保存在Docker所采用的存储驱动目录下面,如aufs或者devicemapper。也可以在/var/lib/docker/containers目录下面看到所有的容器。

容器运行过程

创建一个容器的过程就是将Docker镜像进行实例化的过程。当Docker第一次启动一个容器时,初始的读写层是空的。当文件系统发生变化时,这些变化都会应用到这一层上。比如,如果想修改一个文件,这个文件首先会从该读写层下面的只读层复制到该读写层。该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏。

通常这种机制被称为写时复制(copy on write),这也是使Docker如此强大的技术之一。每个只读镜像层都是只读的,并且以后永远不会变化。当创建一个新容器时,Docker会构建出一个镜像栈,并在栈的最顶端添加一个读写层。这个读写层再加上其下面的镜像层以及一些配置数据,就构成了一个容器。

我们已经知道容器是可以修改的,它们都有自己的状态,并且是可以启动和停止的。容器的这种特点加上镜像分层框架(image-layering framework),使我们可以快速构建镜像并运行包含我们自己的应用程序和服务的容器。



仓库

镜像是保存在仓库中的,而仓库存在于registry中,默认的仓库是由docker公司运行的公共registry服务docker hub。为了区分仓库中的不同镜像,docker为仓库中的每个镜像都添加了一个标签(tag)

docker hub 中有两种类型的仓库:用户仓库(user-repository)和顶层仓库(top-level repository)。用户仓库的镜像由用户创建,顶层仓库的镜像由docker公司的内部人员维护。

用户仓库的命名由用户名和仓库名两部分组成,如 zhangyang1/puppet

顶层仓库的命名则只有仓库名,如ubuntu仓库

我们可以查找docker hub 上所有的公共可用的镜像,使用
docker search
命令

例:

docker search puppet


上述命令输出如下:



由上图可知,search出来有五个选项分别是

NAME 仓库名

DESCRIPTION 镜像描述

STARS 用户评价

OFFICIAL 是否官方

AUTOMATED 表示这个镜像是由docker hub 自动创建的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: