每天半小时,轻松学Docker第四篇:Docker 镜像管理
·

一、上期回顾
每天半小时,轻松学Docker第三篇:Docker 27.4.1部署与配置
二、Docker核心概念
| 概念(英文) | 核心作用 | 简单类比 |
|---|---|---|
| Image(镜像) | 存储应用及依赖的静态文件系统,构建后内容不变 | 虚拟机快照、类(面向对象) |
| Container(容器) | 镜像运行后的实体,独立运行的进程,可创建 / 启停 / 删除 | 运行中的虚拟机、类的实例 |
| Repository(仓库) | 集中存储、分发镜像,按标签区分不同版本 | 代码仓库(如 Git)、软件仓库 |
二、镜像分层原理
1、联合文件系统(UnionFS)
Docker使用联合文件系统来实现分层存储。UnionFS允许将多个目录(称为分支)透明地叠加,形成一个统一的文件系统视图。
主要特点:
-
写时复制(Copy-on-Write)机制
-
分层叠加
-
资源共享
2、分层结构示意
┌─────────────────┐ ← 容器可写层 (Container Layer)
│ 可写层 │
├─────────────────┤
│ 镜像层 3 │ ← 添加应用配置
├─────────────────┤
│ 镜像层 2 │ ← 安装应用程序
├─────────────────┤
│ 镜像层 1 │ ← 安装系统工具
├─────────────────┤
│ 镜像层 0 │ ← 基础操作系统
└─────────────────┘
三、镜像查找
1、命令行查找
root@debase:/home# docker search mysql
NAME DESCRIPTION STARS OFFICIAL
mysql MySQL is a widely used, open-source relation… 15583 [OK]
bitnami/mysql Bitnami container image for MySQL 123
circleci/mysql MySQL is a widely used, open-source relation… 30
...
默认情况下,Docker daemon服务会从Docker官网查找镜像image,但由于Docker官网位于中国大陆之外,网络通过质量极不稳定,为便于后续学习可以快速拉取镜像,需要学习Docker如何配置镜像加速。
2、官网查找


四、镜像拉取
docker pull mariadb:12.1.1-ubi10-rc
root@debase:/home# docker pull mariadb:12.1.1-ubi10-rc
12.1.1-ubi10-rc: Pulling from library/mariadb
551849931ba0: Pull complete
a5b5eb905320: Pull complete
36d35d03dc1f: Pull complete
91f1aedeaa87: Pull complete
43bc53c76daf: Pull complete
b07a02cf2098: Pull complete
157b7dd0986b: Pull complete
3b84c8b1fbbe: Pull complete
b1f10801bd19: Pull complete
fcc7a4c4a770: Pull complete
Digest: sha256:986f196ef4e5fd8ad2aad341c4b8f4c807d1cd48f12ff644e4e725e8dbc45f26
Status: Downloaded newer image for mariadb:12.1.1-ubi10-rc
docker.io/library/mariadb:12.1.1-ubi10-rc
root@debase:/home# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb 12.1.1-ubi10-rc 033df3477506 7 weeks ago 572MB
hello-world latest 1b44b5a3e06a 7 weeks ago 10.1kB
mariadb latest 3ccf43d36f1d 7 weeks ago 330MB
五、镜像列表查看
1、docker images 命令用法全表
| 命令格式 | 核心作用 | 适用场景 | |
|---|---|---|---|
docker images | 列出本地所有镜像,显示默认字段(仓库名、标签、镜像 ID、创建时间、大小) | 快速查看本地镜像库存,确认镜像是否存在 | |
docker images <仓库名> | 筛选显示指定仓库的所有镜像(如 docker images ubuntu) | 仅关注某一类镜像(如 Ubuntu 系列),避免列表杂乱 | |
docker images <仓库名>:<标签> | 精准查看指定仓库 + 指定标签的镜像(如 docker images nginx:1.24) | 确认特定版本镜像是否已本地存在,避免版本混淆 | |
docker images -a / docker images --all | 列出所有镜像(包括临时镜像、中间层镜像) | 排查镜像残留问题,清理无用中间层镜像 | |
docker images -q / docker images --quiet | 仅输出本地所有镜像的 镜像 ID(无其他字段) | 批量操作镜像时使用(如结合 xargs 删除镜像:`docker images -q ubuntu | xargs docker rmi`) |
docker images --filter "dangling=true" | 筛选显示 “悬虚镜像”(标签为 <none> 的无用镜像) | 清理构建镜像后残留的无用悬虚镜像,释放磁盘空间 | |
docker images --filter "reference=*:latest" | 筛选显示标签为 latest 的所有镜像 | 统一管理默认标签镜像,检查是否需更新版本 | |
docker images --format "{{.Repository}}:{{.Tag}} ({{.Size}})" | 自定义输出格式(按指定字段展示,支持的字段见注) | 按需提取关键信息(如仅显示 “仓库:标签 + 大小”),方便数据整理 | |
docker images -f "since=<镜像ID/仓库:标签>" | 列出在指定镜像 之后创建 的所有镜像(如 docker images -f "since=nginx:1.24") | 追踪某镜像构建后新增的本地镜像,排查版本关联问题 | |
docker images -f "until=<镜像ID/仓库:标签>" | 列出在指定镜像 之前创建 的所有镜像 | 筛选早期镜像,清理过时的旧版本镜像 | |
docker images --no-trunc | 显示完整的镜像 ID(默认显示缩写 ID) | 精准匹配镜像(如远程仓库镜像 ID 比对时,避免缩写冲突) |
注:--format 支持的常用字段:
.Repository:镜像仓库名.Tag:镜像标签.ID:镜像 ID(默认缩写,配合--no-trunc显示完整).CreatedSince:镜像创建距离现在的时间(如 “2 weeks ago”).Size:镜像大小
2、常用命令
root@debase:/home# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb 12.1.1-ubi10-rc 033df3477506 7 weeks ago 572MB
hello-world latest 1b44b5a3e06a 7 weeks ago 10.1kB
mariadb latest 3ccf43d36f1d 7 weeks ago 330MB
六、镜像删除
1、基础用法
1.1、删除指定镜像(常用)
# 通过 镜像ID (通常前3-4位即可) 删除
docker rmi 1f9b
# 通过 仓库名:标签 删除
docker rmi nginx:latest
1.2、同时删除多个镜像
docker rmi nginx:latest redis:6.2 alpine:3.18
2、高级用法与常见场景
2.1、强制删除镜像 (-f 或 --force)
当一个镜像正在被一个或多个容器使用时(即使容器已停止),直接删除会失败。此时需要使用
-f参数强制删除。
# 假设 hello-world 镜像被某个容器引用
docker rmi hello-world
# 报错:Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container <container_id> is using its referenced image <image_id>
# 使用 -f 强制删除
docker rmi -f hello-world
2.2、删除所有本地镜像
这是一个危险操作,会清空你本地所有的镜像,请谨慎使用!通常结合 docker images -q 来实现
# docker images -q 会列出所有镜像的ID,然后通过 xargs 传递给 docker rmi
docker images -q | xargs docker rmi -f
2.3、删除所有悬虚镜像 (Dangling Images)
# 列出所有悬虚镜像
docker images --filter "dangling=true"
# 删除所有悬虚镜像
docker rmi $(docker images -f "dangling=true" -q)
# 直接删除所有悬虚镜像,并会提示你确认
docker image prune
# 加上 -f 或 --force 参数可以跳过确认,直接删除
docker image prune -f
3、命令参数详解
| 参数 | 简写 | 说明 |
|---|---|---|
--force | -f | 强制删除镜像,即使有容器正在使用它。 |
--no-prune | 不要删除未被引用的父镜像。默认情况下,如果一个父镜像没有被任何其他子镜像引用,docker rmi 会一并删除它。使用此参数可以保留这些父镜像。 |
| 命令 | 作用 |
|---|---|
docker rmi <镜像ID/标签> | 删除指定镜像。 |
docker rmi -f <镜像ID/标签> | 强制删除指定镜像。 |
docker rmi $(docker images -q) | 删除所有镜像。 |
docker image prune | 删除所有悬虚镜像(推荐)。 |
docker rmi $(docker images -q <仓库名>) | 删除指定仓库的所有镜像。 |
七、镜像归档和导入
1、镜像归档
# 归档镜像
root@debase:/home# docker save hello-world -o hello-world.tar.gz
root@debase:/home# ll
total 36
drwxr-xr-x 3 root root 4096 Sep 30 15:43 ./
drwxr-xr-x 18 root root 4096 Sep 29 17:37 ../
-rw------- 1 root root 22528 Sep 30 15:43 hello-world.tar.gz
drwx------ 2 rz rz 4096 Sep 30 10:11 rz/
# 删除本地镜像
root@debase:/home# docker rmi hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:54e66cc1dd1fcb1c3c58bd8017914dbed8701e2d8c74d9262e26bd9cc1642d31
Deleted: sha256:1b44b5a3e06a9aae883e7bf25e45c100be0bb81a0e01b32de604f3ac44711634
Deleted: sha256:53d204b3dc5ddbc129df4ce71996b8168711e211274c785de5e0d4eb68ec3851
root@debase:/home# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb 12.1.1-ubi10-rc 033df3477506 7 weeks ago 572MB
mariadb latest 3ccf43d36f1d 7 weeks ago 330MB
2、镜像导入
root@debase:/home# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb 12.1.1-ubi10-rc 033df3477506 7 weeks ago 572MB
mariadb latest 3ccf43d36f1d 7 weeks ago 330MB
root@debase:/home# docker load -i hello-world.tar.gz
53d204b3dc5d: Loading layer [==================================================>] 11.78kB/11.78kB
Loaded image: hello-world:latest
root@debase:/home# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb 12.1.1-ubi10-rc 033df3477506 7 weeks ago 572MB
hello-world latest 1b44b5a3e06a 7 weeks ago 10.1kB
mariadb latest 3ccf43d36f1d 7 weeks ago 330MB
八、总结与预告
本次课程围绕 Docker 镜像管理展开,从镜像分层原理入手,依次讲解了镜像的查找、拉取、列表查看、删除,以及归档与导入操作,覆盖了镜像全生命周期的核心管理场景,帮助大家掌握从获取镜像到维护镜像的实用技能,为后续容器管理奠定基础。
1、下节课程预告
每天半小时,轻松学Docker第五篇:Docker 容器管理
更多推荐


所有评论(0)