news 2026/11/3 19:26:14

Docker Image-- 镜像命令详解与使用示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker Image-- 镜像命令详解与使用示例

目录

1. Docker 镜像是什么

2. 镜像命令详解

2.1 docker images

2.2 docker tag

2.3 docker pull

2.4 docker push

2.5 docker rmi

2.6 docker save

2.7 docker load

2.8 docker image inspect

2.9 docker history

2.10 docker image prune

2.11 docker build

2.12 docker import

3. 镜像实操演示:

3.1 查找、拉取镜像:

3.2 镜像详情查看和打标推送:

3.3 运行容器和删除镜像

4. 综合练习:离线迁移镜像(值得熟练掌握)

5. 综合练习:镜像存储的压缩与共享


正文开始:

1. Docker 镜像是什么

Docker 镜像是什么:

  • Docker image本质上是一个read-only只读文件, 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application所必须的文件。

  • 我们可以把Docker image理解成一个模板, 可以通过这个模板实例化出来很多容器。

  • image里面是一层层文件系统Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统

每一层文件系统我们叫做一层layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是docker镜像中每一层文件系统都是只读的。

构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。

镜像生活案例:

镜像相当于我们java或者C++中的类,相当于一个模板,可以很方便的构建出来不同的对象。

镜像分层的生活案例:

我们以日常的地板为例,开发商的房子提供给用户的时候一般是做好了地暖,而这些地暖其实是一层一层添加的,最底层的钢筋水泥层,然后添加保温层,采暖管,再铺设水泥层,到最后交付的时候家家户户都是水泥面,这一层一般是不可修改的,最上层用户一般会再铺设商木地板或者地板砖每家每户的选择不一样,相当于我们镜像的容器层。

为什么需要镜像:

在部署应用时,通过手工或写一些脚本的方式进行部署。这样部署面临问题就是云端和本地环境一致问题。用户为每个应用打包过程比较繁琐,需要配置和给中修改等操作,非常费劲。

然而,Docker镜像就是为了解决这个小小的打包功能,突然一夜之间成名。那么,你可能说 Docker镜像就是个压缩包,是的,你猜对了,它就像一个压缩包文件。它是如何解决 Paas时代所面临的云端和本地一致性问题?很简单,它是把一个镜像制作成一个完整的操作系统所有文件和对应的目录结构,这样的压缩包是跟你本地和测试环境用的操作系统一摸一样。

docker最大的贡献就是定义了容器镜像的分层的存储格式,docker镜像技术的基础是联合文件系统(UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用。

docker镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的将其用于个人用途或与其他 Docker用户公开共享。

2. 镜像命令详解

2.1 docker images

  • 功能:列出本地镜像。
  • 语法:
docker images [OPTIONS] [REPOSITORY[:TAG]]
  • 别名:
docker image ls, docker image list
  • 关键参数:

1.-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);

2.--digests :显示镜像的摘要信息;

3.-f :显示满足条件的镜像;

4.--format :指定返回值的模板文件;

5.--no-trunc :显示完整的镜像信息;

6.-q :只显示镜像ID。

  • 样例
#列出本地全部镜像 docker images #列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表。 docker images ubuntu

2.2 docker tag

  • 功能:标记本地镜像,将其归入某一仓库。
  • 语法
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • 别名
docker image tag
  • 样例
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04

2.3docker pull

可参考镜像仓库实操一文中的使用演示。

2.4 docker push

可参考镜像仓库实操一文中的使用演示。

2.5docker rmi

  • 功能:删除镜像。
  • 语法
docker rmi [OPTIONS] IMAGE [IMAGE...]
  • 别名
docker image rm, docker image remove
  • 关键参数:

1.-f :强制删除;

2. --no-prune :不移除该镜像的过程镜像,默认移除;

  • 样例

再查看发现本地以及删除了:

还可通过REPOSITORY和TAG进行删除:

2.6docker save

  • 功能:将指定镜像保存成tar归档文件。
  • 语法
docker save [OPTIONS] IMAGE [IMAGE...]
  • 别名
docker image save
  • 关键参数

1.-o :输出到的文件。

  • 样例

2.7docker load

  • 功能:导入使用docker save命令导出的镜像。
  • 语法
docker load [OPTIONS]
  • 别名
docker image load
  • 关键参数

1.--input , -i :指定导入的文件,代替STDIN。

2. --quiet , -q :精简输出信息。

  • 样例

2.8docker image inspect

  • 功能:查看镜像详细信息
  • 语法
docker image inspect [OPTIONS] IMAGE [IMAGE...]
  • 注意事项:docker inspect会自动检查是镜像还是容器然后显示相关信息
  • 样例
#查看镜像详细信息 docker images inspect nginx:1.23.3

2.9docker history

  • 功能:显示镜像历史。
  • 语法
docker history [OPTIONS] IMAGE
  • 别名
docker image history
  • 关键参数

1.-H , --human :大小和日期采用人容易读的格式展现

2.--no-trunc :显示全部信息,不要隔断;

3.-q, --quiet:只显示镜像id信息;

  • 样例

2.10docker image prune

  • 功能:删除不使用的镜像。
  • 语法
docker image prune [OPTIONS]
  • 关键参数

1.-a , --all :删除全部不使用的镜像;

2.--filter filter:指定过滤条件;

3.-f, --force :不提示是否删除;

2.11docker build

功能:docker build命令用于使用Dockerfile创建镜像。

语法:

docker build [OPTIONS] PATH | URL | -

关键参数:

  • --build-arg=[] :设置镜像创建时的变量;

  • -f :指定要使用的Dockerfile路径;

  • --label=[] :设置镜像使用的元数据;

  • --no-cache :创建镜像的过程不使用缓存;

  • --pull :尝试去更新镜像的新版本;

  • --quiet, -q :安静模式,成功后只输出镜像ID;

  • --tag, -t:镜像的名字及标签,通常name:tag或者name 格式;可以在一次构建中为一个镜像设置多个标签。

  • --network:默认default。在构建期间设置RUN指令的网络模式

2.12 docker import

功能:从归档文件中创建镜像

语法:

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] 别名 docker image import

关键参数:

  • -c :应用docker指令创建镜像;
  • -m :提交时的说明文字;

样例:

3. 镜像实操演示:

3.1 查找、拉取镜像:

3.2 镜像详情查看和打标推送:

进入/data/var/lib/docker/image/目录,注意存储位置是修改后的

查看镜像的详细信息:

docker image inspect busybox:1.36.0
root@hcss-ecs-c91e:/data/var/lib/docker/image# docker image inspect busybox:1.36.0 [ { "Id": "sha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112", "RepoTags": [ "busybox:1.36.0", "lih2026/maxhou:v1.0" ], "RepoDigests": [ "busybox@sha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112", "lih2026/maxhou@sha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112" ], "Created": "2023-05-11T22:48:43.533857581Z", "Config": { "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "sh" ] }, "Architecture": "amd64", "Os": "linux", "Size": 7581664, "RootFS": { "Type": "layers", "Layers": [ "sha256:1f1d08b81bbe3cb8d730d2e163d6737b4352192712b1f1548720dc224f6cac06" ] }, "Metadata": { "LastTagTime": "2026-10-30T08:22:23.728272293Z" }, "Descriptor": { "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", "digest": "sha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112", "size": 2295 }, "Identity": { "Pull": [ { "Repository": "docker.io/library/busybox" } ] } } ]

查看分层:

3.3 运行容器和删除镜像

从另一个xshell窗口可发现容器已经跑起来了:

exit后可发现容器已经没有在运行了:

通过该命令可以找到这个exit的容器:

镜像的删除:可以根据id和名字删除,对于使用的镜像需要先清理容器再删除镜像

该命令下只是去除标签并没有删除我们实践的空间:

4. 综合练习:离线迁移镜像(值得熟练掌握)

在Ubuntu的环境下保存一个镜像,把它拷贝到CentOS的服务器上加载运行它。值得注意的是像之前文章中介绍的不管是容器命令还是镜像命令,这些命令都属于Docker,所以在不同操作系统环境下执行这些命令都是一样的。

1. 在Ubuntu环境下,把一个镜像打包成tar包。

拉取一个镜像:

2.在另外的环境下(CentOS):

先检查该环境有没有安装docker:

docker version

注意:下图是在Ubuntu环境下的操作:

此时,即可在CentOS环境下看到我们需要的tar包:

如下图,镜像迁移成功:

交互式启动该镜像成为容器:

5.综合练习:镜像存储的压缩与共享

拉取nginx 镜像,如果本地没有,镜像是从仓库拉取,如果有会提示镜像已经存在,并且是最新的。

Docker images查看本地镜像,可以看到该镜像为142Mb

从上面看到nginx为1.21.4的大小是140多MB,但是我们从docker hub上查看可以看到镜像是 50多MB,说明发生了压缩,因为仓库到本地需要走网络,所以文件越小越好

把一个镜像打多个tag,然后同时推送仓库,可以看到是说层已经存在,不会重复存储

root@139-159-150-152:/data/maxhou# docker tag nginx:1.22.1 maxhou/mybitnginx:1.22.1 root@139-159-150-152:/data/maxhou# docker tag nginx:1.22.1 maxhou/mybitnginx:1.22.2 root@139-159-150-152:/data/maxhou# docker tag nginx:1.22.1 maxhou/mybitnginx:1.22.3 root@139-159-150-152:/data/maxhou# docker tag nginx:1.22.1 maxhou/mybitnginx:1.22.4 root@139-159-150-152:/data/maxhou# docker push maxhou/mybitnginx -a The push refers to repository [docker.io/maxhou/mybitnginx] 9543dec06aa8: Layer already exists ccf4f419ba49: Layer already exists 21f8452ebfb1: Layer already exists 25bbf4633bb3: Layer already exists a4f34e6fb432: Layer already exists 3af14c9a24c9: Layer already exists 1.22.1: digest: sha256:9081064712674ffcff7b7bdf874c75bcb8e5fb933b65527026090dacda3 6ea8b size: 1570 9543dec06aa8: Layer already exists ccf4f419ba49: Layer already exists 21f8452ebfb1: Layer already exists 25bbf4633bb3: Layer already exists a4f34e6fb432: Layer already exists 3af14c9a24c9: Layer already exists 1.22.2: digest: sha256:9081064712674ffcff7b7bdf874c75bcb8e5fb933b65527026090dacda3 6ea8b size: 1570 9543dec06aa8: Layer already exists ccf4f419ba49: Layer already exists 21f8452ebfb1: Layer already exists 25bbf4633bb3: Layer already exists a4f34e6fb432: Layer already exists 3af14c9a24c9: Layer already exists

添加一个新的镜像到我们的仓库的时候,如果docker hub发现已经有了是mount 的,不是从本地推上去的

root@139-159-150-152:/data/maxhou# docker tag nginx:1.16.1 maxhou/mybitnginx:1.16.1 root@139-159-150-152:/data/maxhou# docker push maxhou/mybitnginx:1.16.1 The push refers to repository [docker.io/maxhou/mybitnginx] c23548ea0b99: Mounted from library/nginx 82068c842707: Mounted from library/nginx c2adabaecedb: Mounted from library/nginx 1.16.1: digest: sha256:2963fc49cc50883ba9af25f977a9997ff9af06b45c12d968b7985dc1e92 54e4b size: 948
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 19:24:42

智能工厂梯度建设中的边缘计算网关架构设计与工程实践

摘要: 智能工厂梯度建设对工业现场数据采集、业务系统互通和边缘应用提出了逐步提高的要求。不同阶段需要解决的问题存在差异,不能简单通过增加工业网关数量或提高通信带宽完成升级。边缘计算网关的部署应基于设备接口、采集负载、数据模型、网络条件和业…

作者头像 李华
网站建设 2026/11/3 19:24:41

〖AI物流落地 03〗强化学习驱动的动态重路由:当港口拥堵时,系统如何完成秒级自救

一、静态路由在中断面前是“盲的”跨境干线和城际运输的路由,传统上依赖静态的路由表或每日一次的离线规划。这套机制在路网稳定时够用,但面对港口拥堵、突发封路、极端天气时,静态路由是“盲的”——它不知道前方已经堵死,仍然把…

作者头像 李华
网站建设 2026/11/3 19:24:39

续篇-播客文字笔记整理工具做成WorkBuddy技能

前言 上篇文章《播客文字笔记整理工具》发出来之后,发现我只用到了转写,整理成笔记还是用的gemini聊天窗口,记笔记用onenote,听播客用浏览器,感觉很割裂。这两个月我把这条链路重新实现了一遍——这次不写桌面应用&am…

作者头像 李华
网站建设 2026/11/3 19:23:14

用 AI 驱动 FreeCAD:对话建模、代码量产,从模型到打印和施工图

用 AI 驱动 FreeCAD:对话建模、代码量产,从模型到打印和施工图 这是「FreeCAD 1.1 从零到一」系列第 2 篇,也是收官篇。上一篇你亲手点鼠标,体会了参数化建模的好处——但也体会了点鼠标的累。这一篇把 FreeCAD 交给 AI,一次讲完三件事:先装上 MCP 这颗"AI 大脑&quo…

作者头像 李华