Docker Image (镜像) 常用命令
docker images
-
功能:列出本地所有的镜像。如果镜像 ID 相同,但是 Tag 标签不同,也会被当作不同的条目被列出来。
-
语法:
docker images [options] [REPOSITORY[:TAG]]
-
别名:
docker image ls # 这个命令属于是镜像的命令,所以说会有一个 image 的标识哈 docker image list # 之后我们学习到的容器的命令,就会有一个 container 的标识!
-
参数:
- -a:列出本地的所有镜像,他只会显示*的镜像层,会过滤掉中间的镜像层。Docker 镜像是分层的,中间镜像层的存在可以 提高重用性,减少磁盘用量,加速 docker 镜像的构建 ,默认这些中间层是不显示的,后续我们会讲到显示这些中间层镜像的命令。
- –digests:显示镜像的摘要信息。
- -f 或 –fliter:显示满足条件的所有镜像。
- –format:指定返回值的模板文件。
- –no-trunc:显示完整的镜像信息,不截断输出。
- -q:只显示镜像的 ID。
-
演示:
如下图:我们使用
docker images -a
命令列出了本地的所有镜像,我们能看到镜像的名字,镜像的 Tag,镜像的 IMAGE ID,镜像创建的时间,以及镜像的大小哈!
如下图:我们使用
docker images --digests
就能看到我们在拉取镜像时,可能会用到的DIGESTS
值。
如下图:我们使用
docker images --format json
就可以将输出的结果格式化成 json 的格式。具体格式化出来的格式支持自定义,大家可以去官网学习!
如下图:我们使用 docker images -q
命令,就只能看到镜像的 ID,不能毫无用处,只能说一点用没有。奥,不对,在删除镜像的时候可能会用到。
docker tag
-
功能:创建引用 SOURCE_IMAGE 的标签 TARGET_IMAGE,就相当于取别名,在使用
docker pull
命令的时候就需要使用docker tag
给镜像取别名,然后pull
到指定的仓库。 -
语法:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
-
别名:
docker image tag
-
演示:
如下图:我们使用
docker tag centos:centos7
给centos:centos7
这个镜像取别名,然后就会在本地创建引用 SOURCE_IMAGE 的镜像,因为他们的 IMAGE ID 都是一样的。当然我们使用
docker tag IMAGE_ID
也可以,docker tag eeb6ee3f44bd centos:v5
docker image inspect
-
功能:列出一个或者多个镜像的详细信息。
-
语法:
docker image inspect [OPTIONS] IMAGE [IMAGE ...]
-
参数:
- -f 或 –format :以指定格式输出。
-
演示:
如下图:我们使用
docker iamge inspect
查看一个镜像的详细信息,我们能看到 Tag,DIGESTS,创建时间等,可以看到有一个 Layers,它显示镜像的所有层,构成了整个镜像的文件系统,是镜像中实际存在的层。可以对比等会讲的docker history
命令。
docker history
-
功能:显示镜像的历史。
-
语法:
docker history [OPTIONS] IMAGE
-
别名
docker image history
-
参数:
- -H 或 –human :以人易读的方式显示大小和日期。默认应该是带了这个选项的。
- –no-trunc :显示全部信息,不截断。
- -q 或 –quiet :只显示镜像 ID。
-
演示:
如下图:我们使用
docker history nginx:1.25.4
查看 nginx 这个镜像的历史。我们看到结果也显示出来了分层信息。这里的分层是什么呢?它显示的是镜像的构建历史,它记录了构建镜像时执行的每个步骤和创建的层。这些步骤通常对应于 Dockerfile 中的指令,例如RUN
、COPY
、ADD
等。history
命令主要关注于这些构建步骤,而不是镜像中的每一个物理层。此外,Dockerfile 中的某些指令可能会创建多个内部层,但这些内部层在最终镜像中可能被合并为一个层,这会导致docker image history
和docker image inspect
看到的层数不同。
docker pull
参考镜像仓库的命令。
docker push
参考镜像仓库的命令。
docker rmi
-
功能:删除一个或者多个镜像。
-
语法:
docker rmi [OPTIONS] IMAGE [IMAGE ...]
-
别名:
docker image rm docker image remove
-
参数:
-
-f :强制删除镜像。正在运行的容器镜像是无法删除的,除非使用
-f
选项。
-
-f :强制删除镜像。正在运行的容器镜像是无法删除的,除非使用
-
演示:
如下图:在我的本地镜像中,有多个 IMAGE ID 为 eeb6ee3f44bd 的镜像标签,当
docker rmi
的不是最后的那个标签,只会进行 Untagged 的操作,只有当删除的是最后一个标签才会把这个镜像从本地删除。
如果我们使用 docker rmi IMAGE ID
删除镜像的时候,如果这个镜像被多个 Tag 关联,是不能直接删除这个镜像的!除非加上 -f
选项,这会将所有 Tag 解除关联,并删除镜像!
如下图:我们无法删除正在运行的容器镜像。但是可以加上 -f 选项,删除已经停止的容器镜像。
docker save
-
功能:将一个或者多个镜像保存成为 tar 归档文件。
-
语法:
docker save [OPTIONS] IMAGE [IMAGE ...]
-
别名
docker image save
-
参数:
- -o 或 –output:输出到的目标文件。
-
演示:
如下图:我们将 nginx 这个镜像 保存成为 tar 文件。我们将来就可以使用
docker load
命令将这个文件导出为镜像。这两个命令常用于由于环境限制无法在镜像网站拉取镜像的时候。
docker load
-
功能:从 tar 归档文件中加载镜像。也可以从标准输入 STDIN 中加载!
-
语法:
docker load [OPTIONS]
-
别名:
docker image load
-
参数:
- –input 或 -i :指定导入的文件,加上该选项就会替代 STDIN。
- –quiet 或 -q:精简输出信息。
-
演示:
如下图:原来本地是没有 nginx 这个镜像的,通过
docker load
从刚才docker save
形成的 tar 文件中加载镜像!
从标准输入加载镜像可以这么写:
docker load < test_docker_save.tar.gz
docker image prune
-
功能:删除没有使用过的镜像。
-
语法:
docker image prune [OPTINONS]
-
参数:
- -a 或 -all :删除全部不使用的镜像。
- –filter :指定过滤条件。
- -f 或 –force :不提示是否删除。
-
演示:
如下图:我的本地有两个镜像:nginx 和 busybox,其中 busybox 镜像被一个容器引用!然后我们通过
docker image prune -a
删除所有未被使用的镜像!因为我们没有加上-f
选项,就会让我们确认是否删除,输入 y 之后成功将未被使用的 nginx 镜像删除啦!
docker import
这个命令暂时没法讲,我们在讲解 docker 容器命令的时候需要和 docker export 命令一起讲。
docker build
这个命令也没法讲,我们在讲镜像制作的时候讲解!