从 0 到 1 工程实践 (7): Docker 镜像及操作

叁叁肆2018-11-13 12:58

欢迎访问网易云社区,了解更多网易技术产品运营经验。


2.2.2 Docker 镜像及操作


Docker 包含 3 个基本概念,分别是镜像(Image)、容器(Container)和仓库(Repository)。 镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。


镜像作为 Docker 最突出的创新之一,它变革了软件交付标准。理解镜像,对理解整个 Docker 的生命周期非常重要。本节将围绕镜像这一核心概念,简明扼要地介绍镜像的各种 操作,带你玩转 Docker 镜像。


注:对镜像应用感兴趣的读者,还可以查看网易云推出的“玩转 Docker 镜像”系列图 文和视频。


1. 镜像层(Layers)


在镜像操作之前,首先了解下镜像的原理,其中最重要的概念就是镜像层(Layers)。 镜像层依赖于一系列的底层技术,比如文件系统(filesystems)、写时复制(copy-on-write)、 联合挂载(union mounts)等,如图 2-3 所示。读者可以在很多地方学习到这些技术,见 https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/,这里就不再赘述 技术细节。



图 2-3 Docker 镜像的典型结构(图片来自 Docker 社区)


总的来说,最需要记住的一点是:在创建镜像时,每一条指令都会创建一个镜像层, 继而增加整体镜像的大小。


2. 获取镜像


可以使用 docker pull 从仓库注册中心获取所需要的镜像。 

用法如下。 


Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]


举例来说
docker pull busybox


以上是从 Docker Hub(Docker 官方镜像仓库)中下载 tag 为 latest(默认)的 BusyBox (一个精简的Unix 工具集)镜像,同样你也可以从网易云的镜像中心中下载tag 为1.25 的镜像。

docker pull hub.c.163.com/library/busybox:1.25

注:想要终止 docker pull,按下 CTRL+C 组合键即可,更详细的使用方式请参考官方 说明:https://docs.docker.com/engine/reference/commandline/pull/。


3. 查看镜像


使用 docker images 可以列出主机上已有的镜像。


用法如下。
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]


举例如下。


指定仓库名和镜像。


更详细的使用方式请参考官方说明:https://docs.docker.com/engine/reference/commandline/ images/。


4. 创建镜像


有两种常用的方法来创建镜像。

基于已有镜像的容器创建,使用 docker commit 命令。

基于 Dockerfile 创建,使用 docker build 命令。


我们推荐第二种方式,因为 Dockerfile 能记录整个镜像的创建过程,后续的章节中将 重点介绍。
Dockerfile 使用细节请参考:https://docs.docker.com/engine/reference/builder/。


基于已有镜像的容器创建用法如下。
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]


举例如下。

更详细的使用方式请参考官方说明:https://docs.docker.com/engine/reference/commandline/ commit/。


5. 删除镜像


使用 docker rmi 来删除一个或多个镜像,可以通过“镜像名:标签名”来删除,也可 以通过“镜像 ID”来删除。
用法如下。 

Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]


举例如下。

注:

(1)可以通过 -f 选项来强行删除镜像,但是不推荐,因为这样往往会造成一些残 留问题,比如增加临时镜像。
(2)正确的做法是,先删除依赖该镜像的所有容器,再来删除镜像。
更详细的使用方式请参考官方说明:https://docs.docker.com/engine/reference/commandline/ images/。


6. 搜索镜像


使用 docker search 可以搜索远端仓库中共享的镜像。


用法如下。
Usage: docker search [OPTIONS] TERM


举例如下。 


注:

(1)通过 --filter 选项筛选,查找更准确。
(2)通过 --limit 选项,限制展现数量。
(3)加上 -no-trunc 选项,将显示完整信息。
更详细的使用方式请参考官方说明:https://docs.docker.com/engine/reference/commandline/ search/。


7. 上传镜像


可以使用docker push来上传镜像到仓库,默认上传到DockerHub官方仓库(需要登录), 也可以上传到第三方的镜像仓库(比如网易云)。


用法如下。
Usage: docker push [OPTIONS] NAME[:TAG]


举例如下。

更详细的使用方式请参考官方说明:https://docs.docker.com/engine/reference/commandline/ push/。


8. 使用 Docker 仓库


正如前文所说,镜像集中存放在仓库(Repository)当中,仓库又可以分为公有仓库和 私有仓库。


本章我们将分别展示如何使用 Docker Hub 和网易云镜像中心进行登录、下载等基本操 作,最后还将介绍如何创建和使用私有仓库。
注:容易与仓库(Repository)混淆的概念是注册服务器(Registry),实际上注册服务 器是存放仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像, 每个镜像又可能有不同的标签(tag),和 Git 很相似。举例来说,hub.c.163.com/public/ ubuntu:16.04 中 hub.c.163.com 是注册服务器地址,public 是用户工作空间,ubuntu 是仓库 名,16.04 是标签名。 


Docker Hub 公有仓库


Docker Hub 是全球最大的 Docker 共有仓库,截止到 2016 年 10 月,Docker Hub 中已 经有 40 万个公共镜像(每周 4~5 倍的增长),更关键的是累计有 60 亿次的下载数,可见 Docker Hub 的潜力。


登录 

通过 docker login 来登录,默认登录 Docker Hub。
Usage: docker login [OPTIONS] [SERVER]


举例如下。 



登录完成之后,将会在用户目录的 .docker 目录下,保存用户的认证信息。


基本操作 

用户可以通过 docker search 来查找镜像,通过 docker pull 来拉取镜像,再通过 docker push 来推送镜像。


网易云镜像中心


网易云镜像中心分为私有镜像中心和公共镜像中心。


 私有镜像中心

私有镜像中心是用户私人镜像仓库的管理中心,管理以下两类镜像仓库。
(1)自定义的镜像仓库:用户有完整操作权限的镜像仓库,镜像来源包括通过 Dockerfile 创建的自定义镜像、从网易云另存为的自定义镜像,以及 Docker 客户端创建的自定义镜像。

(2)收藏的镜像仓库:从网易云镜像中心(https://c.163.com/hub/)收藏的官方、第三 方公开镜像。
网易云私有镜像中心的层级结构如图 2-4 所示。 

图 2-4 网易云私有镜像中心层级结构


每一层都支持各种操作。 

(1)私有镜像中心层:支持创建镜像仓库、列出所有镜像仓库等。 

(2)镜像仓库层:支持通过 Dockerfile 构建新镜像、设置镜像仓库的访问控制权限等。

(3)版本层:支持删除一个特定的版本等。


公共镜像中心 

公共镜像中心为开发者提供了公共镜像仓库服务,无需登录认证就可以下载使用,登 录后即可对公开镜像进行收藏和部署,满足开发者的搜索、开发、分享镜像等需求。


使用场景 

本地搭建测试环境,可以使用公有镜像中心拉取官方镜像部署。目前,网易云提供以 下 3 种类型镜像。

(1)Docker Hub 官方镜像。

(2)网易云官方镜像。

(3)网易云用户公开的镜像。


搭建和使用私有仓库 

安装 Docker 后,可以通过官方提供的 registry 镜像来简单快速地搭建一套本地私有仓 库环境。
$ sudo docker run -d -p 5000:5000 registry


默认情况下,仓库被创建在容器的 /tmp/registry 下,可以通过 -v 参数来将镜像文件存 放在本地的指定路径。例如下面的例子将上传的镜像放到 /opt/data/registry 目录。 

$ sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry


私有仓库安装完毕,接下来就可以在私有仓库搜索、下载和上传你的镜像了。 


文章节选自《云原生应用架构实践》 网易云基础服务架构团队 著 


网易云计算基础服务深度整合了 IaaSPaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决 IT、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台。点击可免费试用