Docker就该这么学——docker的镜像结构

Posted studyandstudy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker就该这么学——docker的镜像结构相关的知识,希望对你有一定的参考价值。

引言

  在正式操作docker镜像文件之前,我们先来了解一下docker的镜像结构,docker主要是由镜像、容器、仓库三方面组成了docker的整个生命周期。下面我们就来学习一下三个概念,在学习这三个概念之前,我们可以采用面向对象的思想来描述镜像与容器之间的关系。我们可以把镜像想象成类,把容器想象成类经过实例化后的对象,这样就非常好理解镜像和容器的关系了

镜像

        Docker的镜像概念类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。

        例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了mysql或用户需要的其它应用程序。

        Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统被称为UnionFS。 镜像可以基于Dockerfile构建,Dockerfile是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。

        Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

容器

       Docker利用容器来运行应用。

       Docker容器是由Docker镜像创建的运行实例。Docker容器类似虚拟机, 可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。

       可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

仓库

       如果你使用过git和github就很容易理解Docker的仓库概念。Docker仓库的概念跟Git类似,注册服务器可以理解为GitHub这样的托管服务。

       Docker仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register) 来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。 Docker运行中使用的默认仓库是Docker Hub公共仓库。

       仓库支持的操作类似git,当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上pull下来就可以了。

镜像结构

       如下图展示了Docker镜像的系统结构。镜像的最底层必须是一个称为启动文件系统( bootfs )的镜像,用户不会与这一层直接打交道。bootfs的上层镜像叫作根镜像 ( rootfs ),它在通常情况下是一个操作系统,如Ubuntu、 Debian 和CentOS等。用户的镜像必须构建于根镜像之上。图中所示的镜像1是通过在根镜像ubuntu上安装 MySQL来创建的。在镜像1的基础上再安装一个redis,就又创建了镜像2。利用镜像2启动的容器里面运行的是一个已 经安装好了MySQL和nginx的centos系统。

 技术图片

Docker各个参数的介绍

 技术图片

  参数介绍:

    REPOSITORY 仓库名称。仓库一般用来存放同一类型的镜像,其名称由它的创建者指定,如果创建时没有指定则为。仓库的名称有下面几种形式。

      * [namespacecentos] 由命名空间和实际的仓库名称组成,中间通过 隔开。当你在docker hub 上注册一个账户时, 账户名便自动成为了你 的命名空间, 该命名空间是用来区分Docker Hub 上注册的不同用户或者组织。如果你想创建一个分发到Docker Hub上去的镜像, 必须指定命名空间。如果不指定或者指定了但命名空间不符合, 将会得到如下错误:

          2014/12/1020:43 : 10 Error: Status 403 trying tO push repository abcd/abcd: "Access Denied :Not allowed tO create Repo at given location"

       * [centos] 只有仓库名。对于这种没有命名空间的仓库名,我们可以认为它属于顶级命名空间。该空间的仓库只用于官方的镜像,由Docker官 方进行管理,但一般会授权给第三方进行开发维护。用户在本地创建的镜像也可以这样命名,但是无法分发到DockerHub上进行共享。

    TAG: 用于区分同一仓库中的不同镜像。如果未指定,默认为latest。

    IMAGE ID: 每个镜像都有一个字符串类型、长为64位的HashID, 用来全网标识一个镜像。该字段只展示前面一部分,因为这一部分已经足以在本机唯一标识一个镜像了。

    CREATED: 镜像的创建时间。

    VIRTUAL SIZE: 镜像所占用的虚拟大小,该大小包含了所有共享文件的大小。

小结

  从本小节中,我知道了docker的镜像结构,在docker整个生命周期中它是由镜像,容器和仓库三方面组成的,也通过docker镜像结构图,知道了docker镜像的基本运行原理。最后通过一个简单的示例,知道了docker镜像的参数含义以及作用。在下一小节中,我们创建第一个docker镜像,是不是有点小激动哟!(*^__^*) 嘻嘻

以上是关于Docker就该这么学——docker的镜像结构的主要内容,如果未能解决你的问题,请参考以下文章

docker就该这么学——docker的安装

Docker 学习之镜像导入导出及推送阿里云服务器

云原生 | 从零开始学Docker六如何写出自己的镜像——Docker file

Docker镜像

部署虚拟环境安装Linux系统《Linux就该这么学》

跟我一起学docker--Dockerfile