Docker之 – 使用镜像和仓库(一)

什么是Docker镜像

Docker 镜像是由文件系统叠加而成,最底端是一个引导文件系统,也就是bootfs,这很像典型的 Linux/Unix 的引导文件系统。Docker 用户永远不会和引导文件系统有什么交互。实际上,一个容器启动后,它就会被移入内容,而引导文件系统则会被卸载,从而留出更多的空间。(感觉有点像古代的餐馆招待?负责引导顾客进入餐馆,自己的工作就算是完成了)

传统的Linux 引导过程中,root文件系统最先以只读的方式加载,当引导结束后,会切换为读写模式。但是在Docker 中,root文件系统永远只是只读状态,并且使用联合加载的技术一次同时加载多个文件系统。联合加载会将各层系统文件叠加在一起,最终的文件系统包含底层的文件和目录。

联合加载:联合加载指的是一次同时加载多个文件系统,但是外面看起来只有一个文件系统。

Docker 将这样的文件系统成为镜像。一个镜像可以放到另一个镜像的顶部。位于下面的镜像称为父镜像,一次类推,知道镜像栈的最底部,最底部的镜像称为基础镜像。最后,当一个镜像启动容器时,Docker会在镜像的最顶层加载一个文件系统。我们想在 Docker 中运的程序就是在这个读写层中执行的。

用一幅图来表示一下:

Docker之 - 使用镜像和仓库(一)

列出 Docker 镜像

我们先从如何列出系统中的 Docker 镜像来开始,可以使用 docker images 命令来实现,如下

Docker之 - 使用镜像和仓库(一)

可以看到,我们已经获取了一个镜像列表。那么,这些镜像是从哪来的呢?我们执行 docker run 命令时,同时进行了镜像下载

镜像从仓库下载下来。镜像保存在仓库中,而仓库存在于 Registry 中。默认的 Registry 是由 Docker 公司运行的公共 Registry 服务,即 Docker Hub。需要进行ID的注册

Docker之 - 使用镜像和仓库(一)

Docker Registry 的代码是开源的,你也可以拥有自己的Registry。

在 Docker Hub (或者是你自己运营的 Docker Registry)中,镜像是保存在仓库中的,可以将镜像仓库想象成类似于Git 仓库的东西。它包括镜像、层、以及包括镜像的元数据。

仓库可以包含很多镜像,你可以使用docker pull来拉取仓库中的镜像,如下

Docker之 - 使用镜像和仓库(一)

Git 拉取代码的指令是 git pull ,这样就很相似了。

再来使用 docker images 看一下现在有哪些镜像

Docker之 - 使用镜像和仓库(一)

因为我的 Docker Hub 仓库中只有一个 ubuntu 的镜像,所以图中标红的这个镜像是我们刚从 Docker Hub 上下载下来的。

tag 标签

为了区分同一个仓库中的不同镜像,Docker 为我们提供了 tag 这个标签,每个镜像在列出来的时候都带有一个标签,如12.10、 12.04等,这种标签机制使得一个仓库中允许存储多个镜像。

我们可以在仓库后面加一个冒号:标签名 的方式来指定该仓库中的某一个镜像,例如 docker run -t -i --name new_container ubuntu:12.04 /bin/bash

Docker之 - 使用镜像和仓库(一)

Docker 会自动帮我们切换到 Ubuntu 的环境下,当然,这种方式创建了一个交互式任务。

在构建容器时指定仓库的标签也是一个好习惯,这样便可以准确的指定容器来源于哪里。

Docker Hub

Docker Hub 有两种仓库,一种是用户仓库,一种是顶层仓库。用户仓库是由开发人员自己创建的,顶层仓库是由Docker Hub 内部人员管理。

用户仓库的命名由两部分构成,如 cxuan/ubuntu

  • 用户名 例如 : cxuan
  • 仓库名 例如 : ubuntu

相对的,顶层仓库的命名就比较严谨,如 ubuntu 仓库。顶层仓库由 Docker 公司和选定的优质基础镜像厂商来管理,用户可以基于这些镜像构建自己的镜像。

用户镜像都是由爱好者社区自己提供的,没有经过 Docker 公司的认证,所以需要自己承担相应的风险。

拉取镜像

还记得docker run 的启动过程吗?再来一下这张图回顾一下

Docker之 - 使用镜像和仓库(一)

其实也可以通过 docker pull 命令先预先拉取镜像到本地,使用 docker pull 命令可以节省从一个新镜像启动一个容器所需要的时间。下面就来领取一下fedora基础镜像( fedora 是 Fedora 优质厂商提供的基础镜像 )

Docker之 - 使用镜像和仓库(一)

可以使用 docker images 查看新镜像是否拉取到本地,不过我们这次只希望看到 fedora 的镜像,那么你可以使用这个命令: docker images fedora

可以看到我们已经把 fedora 镜像拉取到了本地

            </div>

什么是Docker镜像

Docker 镜像是由文件系统叠加而成,最底端是一个引导文件系统,也就是bootfs,这很像典型的 Linux/Unix 的引导文件系统。Docker 用户永远不会和引导文件系统有什么交互。实际上,一个容器启动后,它就会被移入内容,而引导文件系统则会被卸载,从而留出更多的空间。(感觉有点像古代的餐馆招待?负责引导顾客进入餐馆,自己的工作就算是完成了)

传统的Linux 引导过程中,root文件系统最先以只读的方式加载,当引导结束后,会切换为读写模式。但是在Docker 中,root文件系统永远只是只读状态,并且使用联合加载的技术一次同时加载多个文件系统。联合加载会将各层系统文件叠加在一起,最终的文件系统包含底层的文件和目录。

联合加载:联合加载指的是一次同时加载多个文件系统,但是外面看起来只有一个文件系统。

Docker 将这样的文件系统成为镜像。一个镜像可以放到另一个镜像的顶部。位于下面的镜像称为父镜像,一次类推,知道镜像栈的最底部,最底部的镜像称为基础镜像。最后,当一个镜像启动容器时,Docker会在镜像的最顶层加载一个文件系统。我们想在 Docker 中运行的程序就是在这个读写层中执行的。

用一幅图来表示一下:

Docker之 - 使用镜像和仓库(一)

列出 Docker 镜像

我们先从如何列出系统中的 Docker 镜像来开始,可以使用 docker images 命令来实现,如下

Docker之 - 使用镜像和仓库(一)

可以看到,我们已经获取了一个镜像列表。那么,这些镜像是从哪来的呢?我们执行 docker run 命令时,同时进行了镜像下载

镜像从仓库下载下来。镜像保存在仓库中,而仓库存在于 Registry 中。默认的 Registry 是由 Docker 公司运行的公共 Registry 服务,即 Docker Hub。需要进行ID的注册

Docker之 - 使用镜像和仓库(一)

Docker Registry 的代码是开源的,你也可以拥有自己的Registry。

在 Docker Hub (或者是你自己运营的 Docker Registry)中,镜像是保存在仓库中的,可以将镜像仓库想象成类似于Git 仓库的东西。它包括镜像、层、以及包括镜像的元数据。

仓库可以包含很多镜像,你可以使用docker pull来拉取仓库中的镜像,如下

Docker之 - 使用镜像和仓库(一)

Git 拉取代码的指令是 git pull ,这样就很相似了。

再来使用 docker images 看一下现在有哪些镜像

Docker之 - 使用镜像和仓库(一)

因为我的 Docker Hub 仓库中只有一个 ubuntu 的镜像,所以图中标红的这个镜像是我们刚从 Docker Hub 上下载下来的。

tag 标签

为了区分同一个仓库中的不同镜像,Docker 为我们提供了 tag 这个标签,每个镜像在列出来的时候都带有一个标签,如12.10、 12.04等,这种标签机制使得一个仓库中允许存储多个镜像。

我们可以在仓库后面加一个冒号:标签名 的方式来指定该仓库中的某一个镜像,例如 docker run -t -i --name new_container ubuntu:12.04 /bin/bash

Docker之 - 使用镜像和仓库(一)

Docker 会自动帮我们切换到 Ubuntu 的环境下,当然,这种方式创建了一个交互式任务。

在构建容器时指定仓库的标签也是一个好习惯,这样便可以准确的指定容器来源于哪里。

Docker Hub

Docker Hub 有两种仓库,一种是用户仓库,一种是顶层仓库。用户仓库是由开发人员自己创建的,顶层仓库是由Docker Hub 内部人员管理。

用户仓库的命名由两部分构成,如 cxuan/ubuntu

  • 用户名 例如 : cxuan
  • 仓库名 例如 : ubuntu

相对的,顶层仓库的命名就比较严谨,如 ubuntu 仓库。顶层仓库由 Docker 公司和选定的优质基础镜像厂商来管理,用户可以基于这些镜像构建自己的镜像。

用户镜像都是由爱好者社区自己提供的,没有经过 Docker 公司的认证,所以需要自己承担相应的风险。

拉取镜像

还记得docker run 的启动过程吗?再来一下这张图回顾一下

Docker之 - 使用镜像和仓库(一)

其实也可以通过 docker pull 命令先预先拉取镜像到本地,使用 docker pull 命令可以节省从一个新镜像启动一个容器所需要的时间。下面就来领取一下fedora基础镜像( fedora 是 Fedora 优质厂商提供的基础镜像 )

Docker之 - 使用镜像和仓库(一)

可以使用 docker images 查看新镜像是否拉取到本地,不过我们这次只希望看到 fedora 的镜像,那么你可以使用这个命令: docker images fedora

可以看到我们已经把 fedora 镜像拉取到了本地