Docker images 命令入门:从零开始掌握镜像管理
你有没有遇到过这样的场景?写完一个项目,本地运行得好好的,一放到服务器上就报错。或者团队里其他人跑你的代码总是失败?其实问题很可能出在“环境不一致”上。这时候,Docker 就像一个“标准化的集装箱”——不管你从哪来,只要装进这个集装箱,就能在任何地方正常运行。
而 Docker images 命令,就是你管理这些“集装箱”的核心工具。它能让你查看、搜索、删除、导出镜像,是日常开发中不可或缺的一环。今天,我们就来系统地拆解 Docker images 命令的用法,帮助你真正掌控镜像生命周期。
查看本地所有镜像:docker images
最基础也最常用的命令,就是查看当前机器上已有的镜像。运行以下命令:
docker images
执行后你会看到类似这样的输出:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest a39a3a3c8f4b 2 weeks ago 141MB
redis 6.2 4c62d910c103 3 weeks ago 108MB
ubuntu 20.04 1d622ef86b13 4 weeks ago 72.8MB
hello-world latest fce289e99eb2 11 months ago 1.84kB
这个表格中每一列都有明确含义:
- REPOSITORY:镜像的名称,比如
nginx、redis,代表镜像的用途。 - TAG:标签,用来区分同一镜像的不同版本,如
latest表示最新版,6.2是 Redis 的特定版本。 - IMAGE ID:镜像的唯一 ID,由 Docker 自动生成,用于唯一标识一个镜像。
- CREATED:镜像创建时间,方便你判断是否需要更新。
- SIZE:镜像大小,通常从几 MB 到几百 MB 不等。
💡 小贴士:
hello-world是 Docker 官方提供的测试镜像,用来验证 Docker 是否安装成功。运行它时会输出“Hello from Docker!”,是初学者的入门第一课。
通过过滤条件精准查找镜像
当你系统里镜像越来越多,docker images 输出会变得杂乱。这时候,你可以用参数过滤,快速定位目标镜像。
例如,只查看某个特定镜像:
docker images nginx
这条命令会只列出所有 nginx 相关的镜像,比如 nginx:latest、nginx:1.21 等。
再比如,查看所有未打标签的镜像(即悬空镜像,dangling images):
docker images --filter "dangling=true"
悬空镜像通常是构建过程中产生的中间层,不再被任何标签引用,占用磁盘空间。定期清理它们能释放空间。
搜索远程镜像:docker search
你可能不知道某个镜像是否存在,或者想看看社区里有没有现成的镜像可用。这时 docker search 就派上用场了。
docker search nginx
输出结果包含:
- 镜像名称(NAME)
- 描述(DESCRIPTION)
- 星级(STARS)——表示受欢迎程度
- 是否官方(OFFICIAL)——官方镜像更安全可靠
例如:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16500 OK 2600
jwilder/nginx-proxy Automated Nginx proxy for Docker contai... 2400 [OK] 1200
⚠️ 注意:搜索结果来自 Docker Hub 公共仓库,建议优先选择
OFFICIAL标记的镜像,安全性和稳定性更有保障。
删除镜像:docker rmi
当你不再需要某个镜像时,可以使用 docker rmi 删除它,释放磁盘空间。
docker rmi nginx:latest
执行后,Docker 会删除名为 nginx:latest 的镜像。如果该镜像被某个容器使用,删除会失败。此时需要先删除相关容器。
你也可以批量删除多个镜像:
docker rmi nginx:latest redis:6.2
或者删除所有悬空镜像(推荐定期执行):
docker rmi $(docker images --filter "dangling=true" -q)
🧼 清理小技巧:
-q参数只输出镜像 ID,配合$(...)可以将多个 ID 传给rmi命令,实现一键清理。
导出与导入镜像:docker save & docker load
在某些场景下,你可能需要把镜像从一台机器搬到另一台,比如开发机和服务器之间传输。这时可以使用 docker save 和 docker load。
导出镜像
docker save -o nginx.tar nginx:latest
这条命令将 nginx:latest 镜像导出为一个名为 nginx.tar 的压缩文件。你可以把它拷贝到其他机器。
📦 比喻:就像把一个完整的软件包打包成 ZIP 文件,方便传输。
导入镜像
在目标机器上运行:
docker load -i nginx.tar
Docker 会从 nginx.tar 文件中读取镜像数据,并重新注册到本地镜像库中。
✅ 重要提示:导入的镜像名称和标签会保持原样,无需手动重命名。
查看镜像详细信息:docker inspect
有时候你不仅想知道镜像的“表面信息”,还想了解它的内部结构。docker inspect 就是为你准备的。
docker inspect nginx:latest
执行后会输出一大段 JSON 格式的数据,包含:
- 镜像的创建者
- 所有层(layer)的 ID
- 默认启动命令(Entrypoint)
- 环境变量设置
- 网络配置
- 挂载点信息
🔍 实用场景:当你遇到“容器启动失败”时,查看镜像的
Entrypoint和Cmd设置,就能快速定位问题。
为镜像打标签:docker tag
你可能已经注意到,有些镜像没有 TAG,或者你想让某个镜像更“易读”。这时可以用 docker tag 添加标签。
docker tag nginx:latest my-nginx:1.0
这条命令将 nginx:latest 镜像的标签改为 my-nginx:1.0。你可以在 Docker Hub 上推送这个镜像,便于团队共享。
📝 注意:
docker tag不会创建新镜像,只是给已有镜像添加一个别名。两个标签指向同一个镜像内容。
实际案例:构建并管理一个 Python Web 项目镜像
假设你有一个 Flask 项目,目录结构如下:
flask-app/
├── app.py
├── requirements.txt
└── Dockerfile
Dockerfile 内容如下:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
构建镜像:
docker build -t my-flask-app:1.0 .
查看构建后的镜像:
docker images | grep my-flask-app
输出:
my-flask-app 1.0 abc123def456 2 minutes ago 120MB
现在你可以运行这个镜像:
docker run -d -p 5000:5000 --name flask-server my-flask-app:1.0
访问 http://localhost:5000,你的 Flask 应用就跑起来了!
总结:Docker images 命令的核心价值
Docker images 命令不仅是查看镜像的工具,更是你构建、维护、分发应用的基础设施。掌握它,你就掌握了:
- 如何管理本地镜像生命周期
- 如何高效查找和筛选镜像
- 如何在不同环境间迁移镜像
- 如何排查镜像相关的问题
无论你是初学者还是中级开发者,这些命令都能让你的开发流程更稳定、更可复现。尤其是在团队协作中,一个清晰的镜像管理策略,能大幅降低“在我机器上能跑”的尴尬。
下次你写完代码,别忘了用 docker images 检查一下,你的镜像是否整洁、是否版本清晰。这不仅是技术习惯,更是专业素养的体现。