全部产品
容器服务

Docker 镜像的基本使用

更新时间:2017-07-14 14:31:50   分享:   

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 域名,并输入您的用户名和登录密码。

注意:此处的登录密码是您在 镜像仓库管理控制台 设置的,而不是您的阿里云登录密码。1

  1. docker@default-online:~$ docker login registry.cn-hangzhou.aliyuncs.com
  2. Username: sample@alibaba-inc.com
  3. Password:
  4. Login Succeeded

登录成功之后会显示 Login Succeeded

另外,您还可以通过查看 config.json 文件,确认您的登录信息。

  1. docker@default-online:~$ cat ~/.docker/config.json
  2. {
  3. "auths": {
  4. "registry.cn-hangzhou.aliyuncs.com": {
  5. "auth": "XXXXXXXXXXXXXXXXXXXXXX"
  6. }
  7. }
  8. }

docker pull

注意:

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

以容器服务的公共镜像 registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8 为例。

  1. docker@default-online:~$ docker pull registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8
  2. 0.8: Pulling from acs/agent
  3. 5a026b6c4964: Already exists
  4. e4b621e8d9cb: Already exists
  5. 8bc2fd04bdd4: Pull complete
  6. a977b0087b3e: Pull complete
  7. 8f6e00ea13c6: Pull complete
  8. 875dd8c9666f: Pull complete
  9. 9c07bcabc35d: Pull complete
  10. Digest: sha256:cac848bd31bccf2a041bda7b57e3051341093abde6859df9ee9d332dfec6ddd9
  11. Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8

您可以使用下边的命令查看下载下来的镜像(注意仓库坐标和 Tag)。

  1. docker@default-online:~$ docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. registry.cn-hangzhou.aliyuncs.com/acs/agent 0.8 b9ba5841bdb0 24 hours ago 42.18 MB

docker push

镜像在本地环境构建或是打包好之后,就可以推到 Registry。

前提条件是,您有对这个仓库的读写权限或是读写授权。否则您会看到下面的报错信息。

  1. docker@default-online:~$ docker push registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8
  2. The push refers to a repository [registry.cn-hangzhou.aliyuncs.com/acs/agent]
  3. 359f80267111: Layer already exists
  4. 7e5fa28d90b8: Layer already exists
  5. b20d7f600f63: Layer already exists
  6. 4a159b4f8370: Layer already exists
  7. 7c3712ebe877: Layer already exists
  8. d91d130a53aa: Layer already exists
  9. fcad8ad5a40f: Layer already exists
  10. unauthorized: authentication required

FAQ

docker login 失败

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

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

    2

  • 您使用了 sudo 进行登录。使用 sudo 时,系统第一个要求输入的密码是 Linux 的用户密码。您可能在这里输入了 Registry 的登录密码,导致登录操作失败。

    区分这个错误的方式很简单,Linux 的用户密码大多允许尝试三次,错误时会提示 try again。而 Registry 的登录密码错误一次之后就会退出,并返回以下错误。

    1. Error response from daemon: Get https://registry.cn-hangzhou.aliyuncs.com/v2/: unauthorized: authentication required

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

主要的排查步骤。

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

  • 您想要下载一个私有仓库中的镜像,这时首先确认一下 Registry 的登录状态。运行下边的命令,可以看到所有登录的 Registry 域名。

    1. cat ~/.docker/config.json

    查看里面是不是包括您想要下载镜像的 Registry 域名。如果没有的话,您需要先进行登录操作。

    如果显示已经登录的话,那么您需要确认您登录的这个账户是否有权限下载这个镜像。子账户默认没有任何权限,参见下方相关链接中主子账户授权的文档。

docker push 失败

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

本文导读目录
本文导读目录
以上内容是否对您有帮助?