|
|
|
|
移动端

3.1 获取镜像

《Docker技术入门与实战(第2版)》第3章使用Docker镜像,本章将介绍围绕镜像这一核心概念的具体操作,包括如何使用pull命令从Docker Hub仓库中下载镜像到本地,如何查看本地已有的镜像信息和管理镜像标签,如何在远端仓库使用search命令进行搜索和过滤,如何删除镜像标签和镜像文件,如何创建用户定制的镜像并且保存为外部文件。本节为大家介绍获取镜像。

作者:杨保华/戴王剑/曹亚仑来源:机械工业出版社|2017-04-20 17:41

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

第3章 使用Docker镜像

镜像(image)是Docker三大核心概念中最为重要的,自Docker诞生之日起“镜像”就是相关社区最为热门的关键词。

Docker运行容器前需要本地存在对应的镜像,如果镜像没保存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。

本章将介绍围绕镜像这一核心概念的具体操作,包括如何使用pull命令从Docker Hub仓库中下载镜像到本地,如何查看本地已有的镜像信息和管理镜像标签,如何在远端仓库使用search命令进行搜索和过滤,如何删除镜像标签和镜像文件,如何创建用户定制的镜像并且保存为外部文件。最后,还介绍如何往Docker Hub仓库中推送自己的镜像。

一份非官方研究报告表明,image一直是Docker官方社区(2014~2016年)和StackOverFlow Docker板块(2013~2016年)的年度热词。

3.1 获取镜像

镜像是运行容器的前提,官方的Docker Hub网站已经提供了数十万个镜像供大家开放下载。

可以使用docker pull命令直接从Docker Hub镜像源来下载镜像。该命令的格式为docker pull NAME[:TAG]。其中,NAME是镜像仓库的名称(用来区分镜像),TAG是镜像的标签(往往用来表示版本信息)。通常情况下,描述一个镜像需要包括“名称+标签”信息。

例如,获取一个Ubuntu 14.04系统的基础镜像可以使用如下的命令:

  1. $ docker pull ubuntu:14.04  
  2. 14.04: Pulling from library/ubuntu  
  3. 6c953ac5d795: Pull complete  
  4. 3eed5ff20a90: Pull complete  
  5. f8419ea7c1b5: Pull complete  
  6. 51900bc9e720: Pull complete  
  7. a3ed95caeb02: Pull complete  
  8. Digest: sha256:97421885f3da3b23f52eeddcaa9f8f91172a8ac3cd5d3cd40b51c7aad09f66cc  
  9. Status: Downloaded newer image for ubuntu:14.04 

对于Docker镜像来说,如果不显式指定TAG,则默认会选择latest标签,这会下载仓库中最新版本的镜像。

下面的例子将从Docker Hub的Ubuntu仓库下载一个最新的Ubuntu操作系统的镜像。

  1. $ docker pull ubuntu  
  2. Using default tag: latest  
  3. latest: Pulling from library/ubuntu  
  4. 5ba4f30e5bea: Pull complete  
  5. 9d7d19c9dc56: Pull complete  
  6. ac6ad7efd0f9: Pull complete  
  7. e7491a747824: Pull complete  
  8. a3ed95caeb02: Pull complete  
  9. Digest: sha256:46fb5d001b88ad904c5c732b086b596b92cfb4a4840a3abd0e35dbb6870585e4  
  10. Status: Downloaded newer image for ubuntu:latest 

该命令实际上下载的就是ubuntu:latest镜像。

一般来说,镜像的latest标签意味着该镜像的内容会跟踪最新的非稳定版本而发布,内容是不稳定的。当前Ubuntu最新的发行版本为16.04,latest镜像实际上就是16.04镜像,用户可以下载ubuntu:16.04镜像并查看,两者的数字摘要值是一致的。从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest标记的镜像。

下载过程中可以看出,镜像文件一般由若干层(layer)组成,6c953ac5d795这样的串是层的唯一id(实际上完整的id包括256比特,由64个十六进制字符组成)。使用docker pull命令下载时会获取并输出镜像的各层信息。当不同的镜像包括相同的层时,本地仅存储层的一份内容,减小了需要的存储空间。

读者可能会想到,在使用不同的镜像仓库服务器的情况下,可能会出现镜像重名的情况。

严格地讲,镜像的仓库名称中还应该添加仓库地址(即registry,注册服务器)作为前缀,只是我们默认使用的是Docker Hub服务,该前缀可以忽略。

例如,docker pull ubuntu:14.04命令相当于docker pull registry.hub.docker.com/ubuntu:14.04命令,即从默认的注册服务器Docker Hub Registry中的ubuntu仓库来下载标记为14.04的镜像。

如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址。例如从网易蜂巢的镜像源来下载ubuntu:14.04镜像,可以使用如下命令,此时下载的镜像名称为hub.c.163.com/public/ubuntu:14.04:

  1. $ docker pull hub.c.163.com/public/ubuntu:14.04 

pull子命令支持的选项主要包括:

-a, --all-tags=true|false:是否获取仓库中的所有镜像,默认为否。

下载镜像到本地后,即可随时使用该镜像了,例如利用该镜像创建一个容器,在其中运行bash应用,执行ping localhost命令:

  1. $ docker run -it ubuntu:14.04 bash  
  2. root@9c74026df12a:/# ping localhost  
  3. PING localhost (127.0.0.1) 56(84) bytes of data.  
  4. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.058 ms  
  5. 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.023 ms  
  6. 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.018 ms  
  7. ^C  
  8. --- localhost ping statistics ---  
  9. 3 packets transmitted, 3 received, 0% packet loss, time 1999ms  
  10. rtt min/avg/max/mdev = 0.018/0.033/0.058/0.017 ms  
  11. root@9c74026df12a:/# exit  
  12. exit 


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Java程序员面试宝典

本书是程序员面试宝典系列中的一册,也是上一本《程序员面试宝典》的姊妹书。本书对程序设计面试中Java常见的题型和常用解答技巧进行了介绍...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊