Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,Docker会尝试先从默认镜像仓库下载,用户也可以通过配置,使用自定义的镜像仓库。
1.1搜寻镜像
使用docker search命令可以搜索Docker Hub官方仓库中的镜像。语法为docker search [option] keyword。支持的命令选项主要包括:
-f ,--filter filter:过滤输出内容;
--format string :格式化输出内容;
--limit int:限制输出结果的个数,默认为25个;
--no-trunk :不截断输出结果
例如,搜索官方提供的带nginx关键字的镜像,如下图
1.2 获取镜像
镜像是运行容器的前提,官方的Docker Hub网站已经提供了数十万个镜像供我们开放
下载。可以使用docker pull 镜像名字 命今,直接从Docker Hub镜像源来下载镜像。该命
令的格式为docker pull NAME[:TAG]。
其中,NAME是镜像仓库名称(用来区分镜像),TAG是镜像的标签(往往用来表示版本
信息)。通常情况下,描述一个镜像需要包括“名称+标签”信息。
例如,获取一个Ubuntu18.04系统的基础镜像可以使用如下的命令:
对于Docker镜像来说,如果不显式指定Tag,则默认会选择latest标签,这会下载仓库中最新版本的镜像。
下载过程中可以看出,镜像文件一般由若干层(layer)组成,5a214d77f5d7这样的串是层的唯一id(实际上完整的id包括256比特,64个十六进制字符组成)。使用docker pull命令下载中会获取并输出镜像的各层信息。当不同的镜像包括相同的层时,本地仅存储了层的一份内容,减小了存储空间。
1.3 查看镜像信息
Docker镜像相关的查询命令有ls,tag,和inspect等子命令。
1. 使用images命令列出镜像
使用docker images或docker image ls命令可以列出本地主机上已有镜像的基本信息
例如,下面的命令列出我的本地主机镜像信息:
在列出信息中,可以看到几个字段信息:
REPOSITORY:表示来自于哪个仓库,比如ubuntu表示ubuntu系列的基础镜像;
TAG:表示镜像的标签信息,比如18.04、latest表示不同的版本信息。标签只是标记,并不能标识镜像内容;
IMAGE ID:表示镜像的ID(唯一标识镜像),如果两个镜像的D相同,说明它们实际上指向了同一个镜像,只是具有不同标签名称而已;
CREATED:表示创建时间,说明镜像最后的更新时间;
SIZE:表示镜像大小,优秀的镜像往往体积都较小。
其中能镜像的ID信息十分重要,它唯一标识了镜像。在使用镜像ID的时候,一般可以使
用该ID的前若干个字符组成的可区分串来替代完整的ID。
TAG信息用于标记来自同一个仓库的不同镜像。例如ubuntu仓库中有多个镜像,通过
TAG信息来区分发行版本,如18.04、18.10等。
镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存
储一份,物理上占用的存储空间会小于各镜像逻辑体积之和。
image子命令主要支持如下选项:
-a :列出所有(包括临时文件)镜像文件,默认为否;
--digests=true/false:列出镜像的数字摘要值,默认为否;
-f , --filter=[ ] :过滤列出的镜像,如dangling=true只显示没有被使用的
镜像;也可指定带有特定标注的镜像等;
--format=“TEMPLATE”:控制输出格式,如.ID代表ID信息,.Repository
代表仓库信息等;
--no-trunc=true/false:对输出结果中太长的部分是否进行截断,如镜像的ID
信息,默认为是;
-q, --quiet=true/false:仅输出ID信息,默认为否。
更多子命令选项还可以通过man docker-images来查看。
2.使用tag命令添加镜像标签
为了方便在后续工作中使用特定镜像,还可以使用docker tag命令来为本地镜像任
意添如新的标签,例如,添加一个新的my_ubuntu:latest镜像标签,再次使用docker images列出本地主机上镜像信息,可以看到多了一个my_ubuntu:latest标签的镜像。
3. 使用inspect命令查看详细信息
使用docke inspect + 镜像名:tag 命令可以获取该镜像的详细信息,包括制作者,适应
架构、各层的数字摘要等:
上面代码返回的是一个JSON格式的消息,如果我们只要其中一项内容时,可以使用-f来指定,例如,获取镜像的Architecture:
4. 使用history命令查看镜像历史
既然镜像文件由多个层组成,那么怎么知道各个层的具体内容是什么呢?这时候可以使用history子命令,该命今将列出各层的创建信息。
例如,查看ubuntu:18.04镜像的创建过程,可以使用如下命今:
1.4 删除和清理镜像
1.使用标签删除镜像
使用docker rmi或docker image rm命令可以删除镜像,命令格式为docker rmi IMAGE [IMAGE...],其中IMAGE可以为标签或ID,支持选项包括:
-f,-force:强制删除镜像,即使有容器依赖它;
-no-prune:不要清理未带标签的父镜像;
例如,要删除掉my_ubuntu:latest镜像,可以使用如下命令:
当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像多个标签中的指定
标签而已,并不影响镜像文件。因此上述操作相当于只是删除了镜像5a214d77f5d7的一个标签副本而已。但当镜像只剩下一个标签的时候就要小心了,此时再使用docker rmi命令会彻底删除镜像。
2.使用镜像ID来删除镜像
当使用docker rmi 命令,并且后面跟上镜像的ID(也可以是能进行区分的部分ID串前缀)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。
注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的、例如:先利用
ubuntu:18.04镜像来创建一个简单的容器输出一段话:
使用docker ps -a 命令可以看到本机上存在的所有容器:
可以看到,后台存在一个退出状态的容器,是刚基于ubuntu:18.04镜像创建的。试图删除该镜像,Docker会提示有容器正在使用它指定的镜像,无法删除:
如果要想强行别除镜像,可以使用-f 参数;
注意,通常并不推荐使用-f 参数来强制删除一个存在容器依赖的镜像。正确的做法是先删除依赖该镜像的所有容器,再来删除镜像。
首先删除客器:
docker rm d297e9a067a7
然后使用ID来删除镜像,此时会正常打印出删除的各层信息:
3,清理镜像
使用ID红一段时间后,系统中可能会遗留一些临时的镜像文件.以及一些没有被使用的镜像,可以通过docker image prune命令来进行清理。
支持选项包括:
-a,-all:删除所有无用镜像,不光是临时镜像;
-filter filter: 只清理符合给定过滤器的镜像;
-force: 强制删除镜像,而不进行提示确认。
1.5 创建镜像
创建镜像的方法主要有三种:基于已有镜像的容器创建、基于本地模板导人、基于
Dockerfile创建。
1.docker [container] commit [OPTIONS] CONTAINER [REPOSITORY] [:TAG]
2.docker [image] import [OPTIONS] file |URL|-[REPOSITORY] [:tag]文章来源:https://www.toymoban.com/news/detail-793304.html
3.docker [image] build文章来源地址https://www.toymoban.com/news/detail-793304.html
到了这里,关于Docker核心概念之镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!