Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中的仓库), 用户也可以通过配置,使用自定义的镜像仓库。
1. 获取镜像
镜像是运行容器的前提,官方的 Docker Hub 网站已经提供了数十万个镜像供大家开放下载。
可以使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像。
docker [image] pull NAME [:TAG]
-a --all-tags #拉取所有 tagged 镜像
--disable-content-trust #忽略镜像的校验,默认开启
-q, --quiet #禁止详细输出
其中, NAME 是镜像仓库名称(用来区分镜像), TAG 是镜像的标签(往往用来表示版本信息)。 通常情况下, 描述 一 个镜像需要包括“名称+标签”信息。
对于Docker镜像来说,如果不显式指定TAG, 则默认会选择laest标签,这会下载仓库中最新版本的镜像。
在比如 我们拉取仓库最新的ubuntu 18.04 镜像
下面四个命令效果是一样的!
docker pull ubuntu
docker pull ubuntu:latest
docker pull ubuntu:18.04
docker pull registry.hub.docker.com/ubuntu:18.04
拉取一个或多个镜像使用docker pull,如果没有指定镜像标签,docker默认使用:latest,下面的示例命令就会拉取最新的镜像文件,等同于:docker pull debian:latest,默认的注册服务器是registry.hub.docker.com。
2. 检索仓库镜像
要检索仓库中的镜像,需要使用docker search 命令
docker search [OPTIONS] TERM
--automated 不推荐使用:仅显示自动构建
--filter , -f 根据提供的条件过滤输出
--format 使用Go模板进行漂亮的打印搜索
--limit 25 最多搜索结果(默认:25)
--no-trunc 不要截断输出
--stars , -s 不推荐使用:只显示至少x个的星标
命令只能查看软件这一层次,如果需要查看软件版本就只能像其他办法了!因为这个命令查看不到tag信息。
3. 查看镜像信息
3.1 查看镜像
docker images 和 docker image ls 是一样的。
上图中的字段信息:
REPOSITORY:来自于哪个仓库,比如ubuntu表示ubuntu系列的基础镜像;
- TAG:镜像的标签信息,比如18.04、latest表示不同的版本信息。标签只是标记,并不能标识镜像内容;
- IMAGE ID:镜像的ID(唯一标识镜像),如果两个镜像的ID相同,说明它们实际上指向了同一个镜像,只是具有不同标签名称而已;
- CREATED:创建时间,说明镜像最后的更新时间;
- SIZE:口镜像大小,优秀的镜像往往体积都较小。
其中镜像的ID信息十分重要,它唯一标识了镜像。在使用镜像ID的时候,一般可以使用该ID的前若干个字符组成的可区分串来替代完整的ID。
TAG信息用于标记来自同一个仓库的不同镜像。例如ubuntu仓库中有多个镜像,通过TAG信息来区分发行版本,如18.04、18.10等。
镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用的存储空间会小于各镜像逻辑体积之和。
docker images
-a,--all=true|false:列出所有(包括临时文件)镜像文件,默认为否;
--digests=true|false:列出镜像的数字摘要值,默认为否;
-f,--filter=[]:过滤列出的镜像,如dangling=true只显示没有被使用的镜像;也可指定带有特定标注的镜像等;
--format="TEMPLATE":控制输出格式,如.ID代表ID信息,.Repository代表仓库信息等;
--no-trunc=truelfalse:对输出结果中太长的部分是否进行截断,如镜像的ID信息,默认为是;
-q,--quiet=truelfalse:仅输出ID信息,默认为否。
3.2 查看镜像详细信息
查看镜像详细的信息需要使用
docker image inspect 镜像名称 #镜像名称需要详细的tag
3.3 查看镜像历史
既然镜像文件由多个层组成,那么怎么知道各个层的内容具体是什么呢?这时候可以使用history子命令,该命令将列出各层的创建信息。
例如,查看ubuntu:18.04镜像的创建过程,可以使用如下命令:
查看信息字段的CREATED BY 字段只是截取了一部分,需要详细的需要加上 --no-trunc 参数,就可以看到完整信息!
3.4 给镜像添加个性标签
为了区分多个镜像,可以给镜像添加自己的标签,用于区别!
这时候就需要使用tag命令:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
我给ubuntu的镜像添加 zabbx 标签,使用如下
docker tag ubuntu:18.04 myubuntu:zabbx
从上图我们可以看到:首先多了一个镜像,然后新创建的镜像myubuntu:zabbx和原来的ubuntu:18.04的IMAGE ID是一模一样的!
它们实际上指向了同一个镜像文件,只是别名不同而巳。docker tag命令添加的标签实际上起到了类似链接的作用。
4. 删除和清理镜像
4.1 删除镜像
使用 docker rmi 或 docker image rm 命令可以删除镜像。
docker rmi IMAGE [IMAGE ... ] # 其中 IMAGE 可以为标签或 ID 。
docker image rm IMAGE [IMAGE ... ]
-f, -force # 强制删除镜像, 即使有容器依赖它;
-no-prune # 不要清理未带标签的父镜像。
例如;我们删除刚刚新建的myubuntu:zabbx 镜像
图中可以看到myubuntu:zabbx 已经删除!
我们可能会想到,本地的ubuntu:18.04镜像是否会受到此命令的影响。无须担心,当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像多个标签中的指定标签而已,并不影响镜像文件。因此上述操作相当于只是删除了镜像ccc6e87d482b的一个标签副本而已。
但当镜像只剩下一个标签的时候就要小心了,此时再使用 docker rmi 命令会彻底删除镜像。
还有就是如果有镜像已经在容器里运行的话,删除就会提示无法删除,如果要强制删除,就需要带上“-f”参数。
然后还可以通过ID 删除镜像:
docker rmi ccc6e87d482b
如果镜像的ID 拥有多个标签,也是只能强制删除了!
4.2 清理镜像
使用Docker一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune命令来进行清理。
docker image prune
-a, -all # 删除所有无用镜像, 不光是临时镜像;
-filter filter # 只清理符合给定过滤器的镜像;
-f, -force # 强制删除镜像, 而不进行提示确认。
评论区