在正式操作 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: 仓库名称. 仓库一般用来存放同一类型的镜像, 其名称由它的创建者指定, 如果创建时没有指定则为. 仓库的名称有下面几种形式.
* [namespace\CentOS]: 由命名空间和实际的仓库名称组成, 中间通过 \ 隔开. 当你在 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 镜像, 是不是有点小激动哟!(*^__^*) 嘻嘻
来源: http://www.bubuko.com/infodetail-3596650.html