文章首发我的网站: https://www.exception.site/docker/docker-pull-imagemysql
本文中,咱们将须要学习 Docker 如何下载镜像?sql
1、前言
你们都知道,镜像是 Docker 三大核心概念中最重要的。若是咱们想要在本地运行容器,就必须保证本地存在对应的镜像。因此,第一步,咱们须要下载镜像。当咱们尝试下载镜像时,Docker 会尝试先从默认的镜像仓库(默认使用 Docker Hub 公共仓库)去下载,固然了,用户也能够自定义配置想要下载的镜像仓库。docker
2、下载镜像
镜像是运行容器的前提,咱们能够使用 docker pull [IMAGE_NAME]:[TAG]
命令来下载镜像,其中 IMAGE_NAME
表示的是镜像的名称,而 TAG
是镜像的标签,也就是说咱们须要经过 “镜像 + 标签” 的方式来下载镜像。bash
注意:您也能够不显式地指定 TAG, 它会默认下载 latest 标签,也就是下载仓库中最新版本的镜像。这里并不推荐您下载 latest 标签,由于该镜像的内容会跟踪镜像的最新版本,并随之变化,因此它是不稳定的。在生产环境中,可能会出现莫名其妙的 bug, 推荐您最好仍是显示的指定具体的 TAG。服务器
举个例子,如咱们想要下载一个 Mysql 5.7 镜像,能够经过命令来下载:学习
docker pull mysql:5.7
会看到控制台输出内容以下:网站
注意:因为官方 DockerHub 仓库服务器在国外,下载速度较慢,因此我将仓库的地址更改为了国内的
docker.io
的镜像仓库,因此在上图中,镜像前面会有docker.io
出现。spa
当有 Downloaded 字符串输出的时候,说明下载成功了!!命令行
2、验证
让咱们来验证一下,本地是否存在 Mysql5.7 的镜像,运行命令:code
docker images
能够看到本地的确存在该镜像,确实是下载成功了!
3、下载镜像相关细节
再说说上面下载镜像的过程:
经过下载过程,能够看到,一个镜像通常是由多个层(layer
) 组成,相似 f7e2b70d04ae
这样的串表示层的惟一 ID。
PS: 实际上完整的 ID 包括了 256 个 bit, 64 个十六进制字符组成的。
**您可能会想,若是多个不一样的镜像中,同时包含了同一个层(layer
),这样重复下载,岂不是致使了存储空间的浪费么?**实际上,Docker 并不会这么傻会去下载重复的层(layer
),Docker 在下载以前,会去检测本地是否会有一样 ID 的层,若是本地已经存在了,就直接使用本地的就行了。
另外一个问题,不一样仓库中,可能也会存在镜像重名的状况发生, 这种状况咋办?
严格意义上,咱们在使用 docker pull
命令时,还须要在镜像前面指定仓库地址(Registry
), 若是不指定,则 Docker 会使用您默认配置的仓库地址。例如上面,因为我配置的是国内 docker.io
的仓库地址,我在 pull
的时候,docker 会默认为我加上 docker.io/library
的前缀。
如:当我执行 docker pull mysql:5.7
命令时,实际上至关于 docker pull docker.io/mysql:5.7
,若是您未自定义配置仓库,则默认在下载的时候,会在镜像前面加上 DockerHub 的地址。
Docker 经过前缀地址的不一样,来保证不一样仓库中,重名镜像的惟一性。
4、PULL 子命令
命令行中输入:
docker pull --help
会获得以下信息:
[root@iZbp1j8y1bab0djl9gdp33Z ~]# docker pull --help Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST] Pull an image or a repository from a registry Options: -a, --all-tags Download all tagged images in the repository --disable-content-trust Skip image verification (default true) --help Print usage
咱们能够看到主要支持的子命令有:
-a, --all-tags=true|false
: 是否获取仓库中全部镜像,默认为否;--disable-content-trust
: 跳过镜像内容的校验,默认为 true;
5、总结
本文中,咱们着重了解了 Docker 中如何下载镜像,下载镜像相关的细节,以及 Docker pull 相关子命令。祝您学习愉快!