使用Docker镜像

写在前面镜像是Docker三大核心概念中最重要的一部分 , 而Docker运行容器前需要本地存在对应的镜像 , 如果镜像不存在 , Docker会尝试从默认的镜像仓库中下载(默认使用Docker Hub公共注册服务器的仓库) , 用户也可以通过配置来使用自定义的镜像仓库 , 笔者在前面就自定义了镜像仓库 。
既然镜像这么重要 , 那么本篇就围绕镜像这一核心概念来具体介绍相关操作:(1)如何使用pull命令从Docker Hub仓库中下载镜像到本地;(2)如何查看本地已有的镜像信息和管理镜像标签;(3)如何在远端仓库中使用search命令进行搜索和过滤;(4)如何删除镜像标签和镜像文件;(5)如何创建用户定制的镜像并且保存为外部文件;(6)如何往Docker Hub仓库中推送自己的镜像 。
获取镜像镜像是运行容器的前提 , 因此首先是需要获取镜像 , 开发者可以使用docker [image] pull命令直接从官方的Docker Hub网站上进行获取 , 该命令的格式为docker [image] pull NAME[:TAG] , 其中NAME是镜像仓库名称 , 用来区分镜像 , 而TAG则是镜像的标签 , 一般用来表示版本信息 , 因此通常情况下描述一个镜像需要使用"名称+标签"这一格式 。
举个例子 , 获取一个Ubuntu18.04系统的基础镜像可以使用如下命令:
[envythink@localhost ~]$ docker pull ubuntu:18.04运行结果如下所示:

使用Docker镜像

文章插图
 
对于Docker镜像来说 , 如果后面不显式指定TAG , 则默认会选择latest标签 , 也就是会下载仓库中最新版本的镜像 。
此时上面的命令可以修改为:
[envythink@localhost ~]$ docker pull ubuntu其实也就相当于执行docker pull ubuntu:latest命令 。请注意 , 镜像的latest标签是最新版的 , 因此可能是不稳定的 , 所以在生产环境中一定不能使用默认的latest标签 。
细心的你可能发现了在下载过程中 , 镜像文件是由若干层(layer)组成 , 像171857c49d0f这样的字符串其实就是该层的唯一id(完整的id包括256比特 , 64个十六进制字符组成) 。使用docker pull命令下载镜像的时候 , 里面会输出镜像各层的信息 , 当不同的镜像包含相同的层时 , 本地仅存储层的一份内容 , 这无疑可以减少存储空间 。
现在有一个问题 , 就是在不同的镜像服务器的情况下 , 可能会出现镜像重名的情况 。也就是说 , 其实镜像的仓库名称中还应该添加仓库地址(register , 注册服务器)作为前缀 , 如果你之前使用的是默认的官方DockerHub地址 , 就可以忽略该前缀 。
举个例子 , 使用docker pull ubuntu:18.04命令其实就相当于执行docker pull register.hub.docker.com/ubuntu:18.04命令 , 即从默认的注册服务器DockerHub Register中的ubuntu仓库来下载标记为18.04的镜像 。
由于官方镜像仓库在国外 , 因此访问速度是非常慢的 , 通常是从非官方仓库下载 , 此时需要在仓库名称前指定完整的仓库地址 。举个例子 , 假设从网易蜂巢的镜像源来下载ubuntu:18.04的镜像 , 此时可以使用的命令如下:
docker pull hub.c.163.com/public/ubuntu:18.04当然这个pull命令支持添加一些选项参数 , 如-a或者--all-tags它的值可以是true或者false , 表示是否获取仓库中的所有镜像 , 默认肯定是否 。--disable-content-trust参数表示取消镜像的内容校验 , 默认是真 。
前面也说过官方镜像仓库在国外 , 所以访问速度是非常慢的 , 同时为了避免每次执行命令前都添加register地址 , 因此可以使用镜像代理服务来加速Docker镜像的获取过程 。centos系统只需在/etc/docker/daemon.json文件中添加一行配置即可 , 如下所示:
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}当然也可以在启动配置参数中添加--registry-mirror=proxy_URL来指定镜像代理服务器地址 。
为了后续演示的需要 , 这里先使用docker pull ubuntu:18.04命令来下载一个18.04版本的ubuntu系统镜像 , 然后就使用该镜像创建一个容器 , 并在其中运行bash命令 , 执行输出“Hello World”的命令 , 如下所示:


推荐阅读