下载 Docker 镜像: 目录,路径,到文件,到本地,限制,错误,政策,秘密
在这篇文章中,我们将介绍关于下载Docker镜像的六个最常见的问题。 我们将从docker镜像本地下载命令开始,在哪里找到本地下载路径,如何下载文件,下载限制,错误解决,以及关于Kubernetes的一些情况。
1. docker镜像的本地下载命令
Docker镜像可以直接构建,但也可以从几个不同的Docker容器注册处下载。 最流行的注册中心是Docker Hub,但其他注册中心包括谷歌的GCR、亚马逊的ECR和MS的ACR。 从这些注册中心下载Docker镜像的命令如下
$ docker image pull [OPTIONS] NAME[:TAG|@DIGEST]
其中NAME
是图像的名称,TAG
或DIGEST
是一个分隔符,从同一图像的几个版本中选择一个特定的图像。
如果没有指定标签或摘要值,将下载对应于:latest
标签的图像。
你分配给图像的标签可能会不时改变,所以有可能在一段时间内下载一个具有相同标签的图像,但它不是同一个图像。
在这种情况下,你可以使用一个摘要值来确保你下载的是完全相同的图像。
你可以在inspect
命令输出的RepoDigests
部分找到这些值,如下所示。
关于docker image inspect
命令的更多信息,请参阅图像检查帖子
$ docker image inspect --format '{ {.RepoDigests} }' nginx:latest
[nginx@sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305]
Copy
无论是价值、标签还是摘要,都会下载一个看起来像这样的图像
$ docker image pull nginx@sha256:af296b...092305
docker.io/library/nginx@sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305: Pulling from library/nginx
Digest: sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305
Status: Image is up to date for nginx@sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305
docker.io/library/nginx@sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305
$ docker image pull nginx:latest
latest: Pulling from library/nginx
Digest: sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
2. 镜像本地下载路径位置
当你使用第1节中的pull
命令下载Docker镜像时,镜像数据被放置在Docker为你管理的路径中。
典型的本地镜像下载路径位置如下
- Linux:
/var/lib/docker/
。 - MacOS:
~/Library/Containers/com.docker.docker/Data/vms/0/
。 - Windows:
C:\ProgramData\Docker\
。
然而,一般来说,直接访问这个docker是不合适的。 这是因为Docker用独立的数据结构和算法管理图像和容器。 如果你想把镜像作为文件来保存和加载,请看接下来的第3节。
3. 下载图像文件的命令
有些时候,你可能需要把某个特定的图像保存为文件,以便在网络上传输或分发,或用于备份和恢复目的。 要将本地下载的图像保存为文件,请使用以下命令格式。
docker image save -o IMAGE_NAME IMAGE
在IMAGE_NAME
部分,指定文件应该被保存的路径和带有.tar
扩展名的文件名。
如果你只指定一个文件名,它将被自动保存在当前目录下的该文件名下。
$ mkdir docker-images
$ docker image save -o ~/docker-images/nginx-image nginx:latest
$ ls docker-images
nginx-image
一旦保存到一个文件中,可以用load
命令重新加载图像。请在-i
选项后指定图像文件的路径和名称。
$ docker image load -i docker-images/nginx-image.tar
Loaded image: nginx:latest
4. Docker Hub的下载限制
为了提供更好的服务,Docker Hub根据用户计划对每天的下载次数进行了不同的限制。 每天的最大下载量如下
- 未签名的用户: 100次下载/6小时
- 免费计划用户:200次下载/6小时
- 付费计划用户: 5000次下载/天
如果你的下载请求超过了最大数量,你将收到以下日志信息
You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits
5. 如何解决没有基本认证凭证的错误
当你的Docker CLI无法找到它所需要的凭证来验证Docker注册表(包括Docker Hub)时,就会出现这个错误信息。 通常情况下,如果你需要登录但没有登录,或者你的凭证不正确,就会发生这种情况。
在这些情况下,你可以尝试用docker login
命令登录,或用docker logout
命令退出,然后再尝试登录。
如果登录成功,凭证会被保存在~/.docker/config.json
文件中。
如果登录尝试失败,你也可以尝试将config.json
文件备份到不同的目录,然后重新尝试。
6. Docker与Kubernetes: 图像拉动策略,Docker拉动秘密
像Kubernetes这样的容器编排工具会设置Docker拉动策略和秘密。
6.1. 镜像拉取策略
镜像拉取策略指的是当用Docker镜像运行容器时,决定Kubernetes何时应该下载镜像的规则。 在Kubernetes中,有三种策略。
-
Always
: 这个策略使Kubernetes总是从注册表中下载镜像。 即使本地已经存在相同标签的镜像,它也会被忽略,而从注册表中获取新的镜像。这是默认的策略,当图像标签是:最新的。 -
IfNotPresent
: 该策略使Kubernetes仅在本地不存在图像的情况下从注册表中获取图像。 如果本地已经存在相同标签的镜像,它将使用该镜像。这是默认的策略,当图像标签不是:latest
时。 -
Never
: 这个策略告诉Kubernetes不要从注册表下载镜像。 Kubernetes将始终尝试使用本地可用的镜像,如果不存在,将返回一个错误。
这些策略可以在Kubernetes pod规范中设置。
6.2. Docker拉动秘密
容器协调工具(如Kubernetes)使用Docker拉动秘密,以存储特定Docker注册表的访问凭证。 你可以使用这个秘密来下载一个Docker镜像。
秘密通常是JSON文件格式,Kubernetes CLI提供以下命令来创建一个秘密
$ kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
上述命令创建了一个名为my-secret
的秘密文件,可以通过imagePullSecrets
条目在Kubernetes Pod规范中引用。
7. 总结
在这篇文章中,我们已经涵盖了关于下载Docker镜像的前6个最常见的问题。 我们涵盖了从本地下载Docker镜像的命令、在哪里找到本地下载路径、如何下载文件、下载限制、故障排除,以及关于Kubernetes的一些内容。 我们希望这能帮助你完成下载和存储镜像的过程。
