容器服务Docker 镜像的基本使用


Docker 的镜像存储中心通常被称为 Registry。
当您需要获取 Docker 镜像时,首先需要登录 Registry,然后拉取镜像。在您修改过镜像之后,您可以再次将镜像推送到 Registry 中去。

基本概念


Docker的镜像地址是什么?我们来看一个完整的例子。以容器服务的公共镜像为例,registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8。

  • registry.cn-hangzhou.aliyuncs.com:Registry 域名。
  • acs:命名空间。
  • agent:仓库名称。
  • 0.8:Tag、镜像标签(非必须,默认为 latest)。

将这个几个完全独立的概念组合一下:
  • registry.cn-hangzhou.aliyuncs.com/acs/agent:仓库坐标。
  • acs/agent:仓库全名(通常在 API 中使用)。


基本使用


本文档的重点是介绍 Docker 最常用的三个命令:login、pull、push。

docker login


以阿里云杭州公网 Registry 为例。
登录时必须指明 Registry 域名,并输入您的用户名和登录密码。

[backcolor=transparent]注意:此处的登录密码是您在 镜像仓库管理控制台 设置的,而不是您的阿里云登录密码。
  1. [backcolor=transparent]docker@default[backcolor=transparent]-[backcolor=transparent]online[backcolor=transparent]:~[backcolor=transparent]$ docker login registry[backcolor=transparent].[backcolor=transparent]cn[backcolor=transparent]-[backcolor=transparent]hangzhou[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com
  2. [backcolor=transparent]Username[backcolor=transparent]:[backcolor=transparent] sample@alibaba[backcolor=transparent]-[backcolor=transparent]inc[backcolor=transparent].[backcolor=transparent]com
  3. [backcolor=transparent]Password[backcolor=transparent]:
  4. [backcolor=transparent]Login[backcolor=transparent] [backcolor=transparent]Succeeded

登录成功之后会显示 Login Succeeded。
另外,您还可以通过查看 config.json 文件,确认您的登录信息。
  1. [backcolor=transparent]docker@default[backcolor=transparent]-[backcolor=transparent]online[backcolor=transparent]:~[backcolor=transparent]$ cat [backcolor=transparent]~[backcolor=transparent]/.docker/[backcolor=transparent]config[backcolor=transparent].[backcolor=transparent]json
  2. [backcolor=transparent]{
  3. [backcolor=transparent]    [backcolor=transparent]"auths"[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]{
  4. [backcolor=transparent]        [backcolor=transparent]"registry.cn-hangzhou.aliyuncs.com"[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]{
  5. [backcolor=transparent]            [backcolor=transparent]"auth"[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"XXXXXXXXXXXXXXXXXXXXXX"
  6. [backcolor=transparent]        [backcolor=transparent]}
  7. [backcolor=transparent]    [backcolor=transparent]}
  8. [backcolor=transparent]}


docker pull


[backcolor=transparent]注意:
  • 如果您要拉取 Docker 官方的镜像,参考下方相关链接中的加速器文档。
  • 如果您要拉取公共仓库下的镜像,不登录 Registry 也是可以拉取的。

以容器服务的公共镜像 registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8 为例。
  1. [backcolor=transparent]docker@default[backcolor=transparent]-[backcolor=transparent]online[backcolor=transparent]:~[backcolor=transparent]$ docker pull registry[backcolor=transparent].[backcolor=transparent]cn[backcolor=transparent]-[backcolor=transparent]hangzhou[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com[backcolor=transparent]/[backcolor=transparent]acs[backcolor=transparent]/[backcolor=transparent]agent[backcolor=transparent]:[backcolor=transparent]0.8
  2. [backcolor=transparent]0.8[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Pulling[backcolor=transparent] [backcolor=transparent]from[backcolor=transparent] acs[backcolor=transparent]/[backcolor=transparent]agent
  3. [backcolor=transparent]5a026b6c4964[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Already[backcolor=transparent] exists
  4. [backcolor=transparent]e4b621e8d9cb[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Already[backcolor=transparent] exists
  5. [backcolor=transparent]8bc2fd04bdd4[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Pull[backcolor=transparent] complete
  6. [backcolor=transparent]a977b0087b3e[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Pull[backcolor=transparent] complete
  7. [backcolor=transparent]8f6e00ea13c6[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Pull[backcolor=transparent] complete
  8. [backcolor=transparent]875dd8c9666f[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Pull[backcolor=transparent] complete
  9. [backcolor=transparent]9c07bcabc35d[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Pull[backcolor=transparent] complete
  10. [backcolor=transparent]Digest[backcolor=transparent]:[backcolor=transparent] sha256[backcolor=transparent]:[backcolor=transparent]cac848bd31bccf2a041bda7b57e3051341093abde6859df9ee9d332dfec6ddd9
  11. [backcolor=transparent]Status[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Downloaded[backcolor=transparent] newer image [backcolor=transparent]for[backcolor=transparent] registry[backcolor=transparent].[backcolor=transparent]cn[backcolor=transparent]-[backcolor=transparent]hangzhou[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com[backcolor=transparent]/[backcolor=transparent]acs[backcolor=transparent]/[backcolor=transparent]agent[backcolor=transparent]:[backcolor=transparent]0.8

您可以使用下边的命令查看下载下来的镜像(注意仓库坐标和 Tag)。
  1. [backcolor=transparent]docker@default[backcolor=transparent]-[backcolor=transparent]online[backcolor=transparent]:~[backcolor=transparent]$ docker images
  2. [backcolor=transparent]REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
  3. [backcolor=transparent]registry[backcolor=transparent].[backcolor=transparent]cn[backcolor=transparent]-[backcolor=transparent]hangzhou[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com[backcolor=transparent]/[backcolor=transparent]acs[backcolor=transparent]/[backcolor=transparent]agent   [backcolor=transparent]0.8[backcolor=transparent]                 b9ba5841bdb0        [backcolor=transparent]24[backcolor=transparent] hours ago        [backcolor=transparent]42.18[backcolor=transparent] MB


docker push


镜像在本地环境构建或是打包好之后,就可以推到 Registry。
前提条件是,您有对这个仓库的读写权限或是读写授权。否则您会看到下面的报错信息。
  1. [backcolor=transparent]docker@default[backcolor=transparent]-[backcolor=transparent]online[backcolor=transparent]:~[backcolor=transparent]$ docker push registry[backcolor=transparent].[backcolor=transparent]cn[backcolor=transparent]-[backcolor=transparent]hangzhou[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com[backcolor=transparent]/[backcolor=transparent]acs[backcolor=transparent]/[backcolor=transparent]agent[backcolor=transparent]:[backcolor=transparent]0.8
  2. [backcolor=transparent]The[backcolor=transparent] push refers to a repository [backcolor=transparent][[backcolor=transparent]registry[backcolor=transparent].[backcolor=transparent]cn[backcolor=transparent]-[backcolor=transparent]hangzhou[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com[backcolor=transparent]/[backcolor=transparent]acs[backcolor=transparent]/[backcolor=transparent]agent[backcolor=transparent]]
  3. [backcolor=transparent]359f80267111[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
  4. [backcolor=transparent]7e5fa28d90b8[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
  5. [backcolor=transparent]b20d7f600f63[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
  6. [backcolor=transparent]4a159b4f8370[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
  7. [backcolor=transparent]7c3712ebe877[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
  8. [backcolor=transparent]d91d130a53aa[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
  9. [backcolor=transparent]fcad8ad5a40f[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
  10. [backcolor=transparent]unauthorized[backcolor=transparent]:[backcolor=transparent] authentication required


FAQ



docker login 失败


主要需要排查以下两种可能。

  • 您使用了阿里云账户的登录密码,而不是 Registry 的独立登录密码。Registry 的登录密码是在 镜像仓库管理控制台 上设置与修改的。

  • 您使用了 sudo 进行登录。使用 sudo 时,系统第一个要求输入的密码是 Linux 的用户密码。您可能在这里输入了 Registry 的登录密码,导致登录操作失败。
    区分这个错误的方式很简单,Linux 的用户密码大多允许尝试三次,错误时会提示 try again。而 Registry 的登录密码错误一次之后就会退出,并返回以下错误。
    1. [backcolor=transparent] Error[backcolor=transparent] response [backcolor=transparent] from[backcolor=transparent] daemon[backcolor=transparent] :[backcolor=transparent] [backcolor=transparent] Get[backcolor=transparent] https[backcolor=transparent] :[backcolor=transparent] //registry.cn-hangzhou.aliyuncs.com/v2/: unauthorized: authentication required


docker pull 失败,提示 Error: image xxx not found


主要的排查步骤。

  • 如果您下载的是公共仓库,那么问题应该为镜像地址不正确。请在 镜像仓库管理控制台 搜索一下这个公共仓库,检查一下想要下载的这个镜像版本是不是真实存在。

  • 您想要下载一个私有仓库中的镜像,这时首先确认一下 Registry 的登录状态。运行下边的命令,可以看到所有登录的 Registry 域名。
    1. [backcolor=transparent] cat [backcolor=transparent] ~[backcolor=transparent] /.docker/[backcolor=transparent] config[backcolor=transparent] .[backcolor=transparent] json

    查看里面是不是包括您想要下载镜像的 Registry 域名。如果没有的话,您需要先进行登录操作。
    如果显示已经登录的话,那么您需要确认您登录的这个账户是否有权限下载这个镜像。子账户默认没有任何权限,参见下方相关链接中主子账户授权的文档。


docker push 失败


主要的排查步骤和 docker pull 基本一致,仅仅是授权要求的级别较 pull 更高一些。

展开
收起
反向一觉 2017-10-30 17:18:51 3321 分享 版权
0 条回答
写回答
取消 提交回答

国内唯一 Forrester 公共云容器平台领导者象限。

还有其他疑问?
咨询AI助理