news 2026/5/7 9:41:00

第一部分-Docker基础入门——03. 镜像管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第一部分-Docker基础入门——03. 镜像管理

03. 镜像管理

1. 镜像概述

镜像是 Docker 的核心概念之一,是容器运行的基础。掌握镜像管理是使用 Docker 的必备技能。

1.1 镜像的组成

┌─────────────────────────────────────────────────────────────┐ │ 镜像的组成 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ ┌─────────────────────────────────────────────────┐│ │ │ │ │ Layer 4: App Code (只读) ││ │ │ │ ├─────────────────────────────────────────────────┤│ │ │ │ │ Layer 3: Dependencies (只读) ││ │ │ │ ├─────────────────────────────────────────────────┤│ │ │ │ │ Layer 2: OS Packages (只读) ││ │ │ │ ├─────────────────────────────────────────────────┤│ │ │ │ │ Layer 1: Base OS (只读) ││ │ │ │ └─────────────────────────────────────────────────┘│ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌─────────────────────┐ │ │ │ │ │ Container Layer │ (可写) │ │ │ │ │ (每个容器独立) │ │ │ │ │ └─────────────────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ 镜像层特点: │ │ - 只读、共享 │ │ - 相同层只存储一份 │ │ - 写时复制(CoW) │ │ │ └─────────────────────────────────────────────────────────────┘

2. 镜像搜索与拉取

2.1 搜索镜像

# 搜索官方仓库中的镜像dockersearch nginxdockersearch--limit10nginx# 限制结果数量dockersearch--filterstars=100nginx# 筛选 stars>100# 搜索特定用户的镜像dockersearch username/nginx# 使用 Docker Hub API 搜索curl-XGET"https://hub.docker.com/v2/repositories/library/nginx/tags"

2.2 拉取镜像

# 拉取最新版本dockerpull nginx# 拉取指定版本dockerpull nginx:1.21dockerpull nginx:alpine# 拉取指定平台镜像dockerpull--platformlinux/amd64 nginx# 拉取私有仓库镜像dockerpull myregistry.com/myapp:v1# 拉取镜像并显示详细进度dockerpull--progress=plain nginx# 拉取所有标签(慎用)dockerpull-anginx

2.3 镜像标签与平台

# 查看镜像支持的平台dockermanifest inspect nginx# 常用标签说明# - latest: 最新稳定版# - alpine: 基于 Alpine Linux,体积小# - slim: 精简版# - 具体版本号: 如 1.21、1.22.0

3. 镜像查看与管理

3.1 列出镜像

# 列出所有镜像dockerimagesdockerimagels# 列出特定镜像dockerimages nginx# 列出镜像 ID(只显示 ID)dockerimages-q# 列出所有镜像(包含中间层)dockerimages-a# 格式化输出dockerimages--format"table {{.Repository}}\t{{.Tag}}\t{{.Size}}"# 按大小排序dockerimages--format"{{.Size}}\t{{.Repository}}:{{.Tag}}"|sort-h# 查看镜像详情dockerinspect nginx:latestdockerinspect--format='{{.Architecture}}'nginx# 查看镜像构建历史dockerhistorynginx:latestdockerhistory--no-trunc nginx# 查看镜像占用空间dockersystemdfdockersystemdf-v

3.2 镜像过滤

# 过滤悬挂镜像(无标签镜像)dockerimages--filter"dangling=true"# 过滤指定标签前的镜像dockerimages--filter"before=nginx:1.22"# 过滤指定标签后的镜像dockerimages--filter"since=nginx:1.20"# 过滤引用标签dockerimages--filter"reference=nginx:*"# 过滤特定仓库dockerimages--filter"label=maintainer=nginx"

4. 镜像删除与清理

4.1 删除镜像

# 通过名称:标签删除dockerrmi nginx:1.21# 通过镜像 ID 删除dockerrmi a6bd71f48f68# 强制删除(即使有容器依赖)dockerrmi-fnginx# 删除多个镜像dockerrmi nginx:1.21 ubuntu:20.04# 删除所有未使用的镜像dockerimage prunedockerimage prune-a# 删除所有未使用的镜像(包含无标签)# 删除所有镜像# 先停止所有容器dockerstop$(dockerps-aq)# 删除所有容器dockerrm$(dockerps-aq)# 删除所有镜像dockerrmi$(dockerimages-q)

4.2 清理空间

# 清理所有未使用的资源(镜像、容器、网络)dockersystem prunedockersystem prune-a# 更彻底清理# 清理卷(慎用,会删除数据)dockervolume prune# 查看磁盘使用情况dockersystemdfdockersystemdf-v# 自动清理(cron 任务)# 0 2 * * * docker system prune -f

5. 镜像导入导出

5.1 保存与加载(保留历史记录)

# 保存镜像为 tar 文件dockersave-onginx.tar nginx:latestdockersave nginx:latest>nginx.tar# 保存多个镜像到一个文件dockersave-oimages.tar nginx:latest ubuntu:20.04# 加载镜像dockerload-inginx.tardockerload<nginx.tar

5.2 导出与导入(扁平化,不保留历史)

# 导出容器为 tar(扁平化)dockerexport-ocontainer.tar container_name# 导入为镜像dockerimportcontainer.tar myimage:v1# save vs export 区别# - save: 保存镜像(保留层历史)# - export: 导出容器(丢弃历史,体积更小)

6. 镜像标签与命名

6.1 打标签

# 添加标签dockertag nginx:latest mynginx:v1# 为镜像添加多个标签dockertag nginx:latest mynginx:1.21dockertag nginx:latest mynginx:stable# 标签重命名(删除原标签)dockertag nginx:latest nginx:newdockerrmi nginx:latest# 标签用途:# - 版本管理# - 环境区分(dev、test、prod)# - 推送到不同仓库# 常见标签命名规范# myapp:1.0.0 # 版本号# myapp:latest # 最新版# myapp:dev # 开发环境# myapp:prod-20240101 # 生产环境+日期

6.2 镜像仓库管理

# 登录公共仓库dockerlogindockerlogin-uusername# 登录私有仓库dockerlogin myregistry.com# 推送到仓库dockertag nginx:latest username/mynginx:v1dockerpush username/mynginx:v1# 推送到私有仓库dockertag nginx:latest myregistry.com/mynginx:v1dockerpush myregistry.com/mynginx:v1# 从私有仓库拉取dockerpull myregistry.com/mynginx:v1# 登出dockerlogoutdockerlogoutmyregistry.com

7. 镜像构建准备

7.1 查看镜像信息

# 查看镜像详细信息dockerinspect nginx:latest# 查看镜像的入口点dockerinspect--format='{{.Config.Entrypoint}}'nginx# 查看镜像的 CMDdockerinspect--format='{{.Config.Cmd}}'nginx# 查看镜像暴露的端口dockerinspect--format='{{.Config.ExposedPorts}}'nginx# 查看镜像的环境变量dockerinspect--format='{{.Config.Env}}'nginx# 查看镜像的卷dockerinspect--format='{{.Config.Volumes}}'nginx# 查看镜像的工作目录dockerinspect--format='{{.Config.WorkingDir}}'nginx

7.2 镜像大小分析

# 查看镜像大小dockerimages--format"{{.Repository}}:{{.Tag}}\t{{.Size}}"# 分析镜像层大小(需要 dive 工具)dockerrun--rm-it\-v/var/run/docker.sock:/var/run/docker.sock\wagoodman/dive:latest nginx:latest# 手动分析dockerhistorynginx:latest# 优化建议:# - 使用 alpine 基础镜像# - 合并 RUN 命令# - 清理缓存和临时文件# - 多阶段构建

8. 实战示例

8.1 完整镜像操作流程

# 1. 搜索镜像dockersearch ubuntu--limit5# 2. 拉取镜像dockerpull ubuntu:20.04# 3. 查看镜像dockerimages ubuntu# 4. 查看详情dockerinspect ubuntu:20.04|grep-A5"Architecture"# 5. 打标签dockertag ubuntu:20.04 myubuntu:dev# 6. 查看镜像大小dockerimages|grepubuntu# 7. 导出镜像dockersave-oubuntu-20.04.tar ubuntu:20.04# 8. 删除镜像dockerrmi ubuntu:20.04# 9. 验证删除dockerimages|grepubuntu# 10. 导入镜像dockerload-iubuntu-20.04.tar# 11. 清理dockerrmi myubuntu:devrmubuntu-20.04.tar

8.2 镜像版本管理

# 为应用创建多个版本标签dockertag myapp:latest myapp:1.0.0dockertag myapp:latest myapp:1.0dockertag myapp:latest myapp:1# 推送到仓库dockerpush myapp:1.0.0dockerpush myapp:1.0dockerpush myapp:1dockerpush myapp:latest# 拉取指定版本dockerpull myapp:1.0.0# 删除远程标签(推送空镜像)dockerpush myapp:oldversion--force

8.3 镜像迁移

# 导出所有镜像forimgin$(dockerimages--format"{{.Repository}}:{{.Tag}}"|grep-v"<none>");dodockersave$img-o$(echo$img|tr'/:''_').tardone# 批量导入fortarin*.tar;dodockerload-i$tardone# 跨机器迁移dockersave nginx:alpine|sshuser@remote"docker load"

9. 镜像优化建议

9.1 体积优化

策略说明效果
使用 AlpineAlpine 基础镜像约 5MB减小 50-90%
多阶段构建分离构建和运行环境减小 30-70%
合并 RUN 命令减少层数减小 10-30%
清理缓存rm -rf /var/cache/*减小 10-20%
删除开发工具apt remove gcc make减小 20-50%

9.2 安全优化

# 使用指定版本而非 latestFROM nginx:1.21# 使用非 root 用户RUNuseradd-mappuserUSERappuser# 设置只读文件系统# --read-only 运行容器# 删除不必要的 SUID/SGIDRUNfind/-perm/6000-typef-execchmod000{}\;

10. 常用命令速查

操作命令
搜索docker search
拉取docker pull
列出docker images
查看详情docker inspect
查看历史docker history
删除docker rmi
清理docker image prune
保存docker save
加载docker load
导出docker export
导入docker import
打标签docker tag
推送docker push

11. 常见问题

Q1: 如何删除所有<none>镜像?

dockerimage prunedockerrmi$(dockerimages-f"dangling=true"-q)

Q2: 如何查看镜像的构建历史?

dockerhistory--no-trunc nginx:latest

Q3: 镜像和容器的区别?

镜像:静态文件,不可变;容器:运行中的实例,可写

12. 小结

  • 掌握镜像的搜索、拉取、查看、删除
  • 学会镜像的导入导出和迁移
  • 合理使用标签管理版本
  • 定期清理无用镜像释放空间
  • 优化镜像体积提升部署效率

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 9:39:41

78.YOLOv8口罩检测30分钟全闭环,数据集脚本+训练+部署,30分钟落地实操

摘要 YOLO(You Only Look Once)系列算法是目标检测领域最主流的实时检测框架。 本文从零开始,系统讲解YOLOv8的核心原理、数据准备、模型训练、推理优化与部署全流程。 所有代码基于Ultralytics官方库,经过严格测试,可直接运行。文章包含完整的数据集构建脚本、训练配置、…

作者头像 李华
网站建设 2026/5/7 9:38:29

测量与量表 12 条实用 Prompt:从选量表到检查信效度

一、测量与量表 Prompt 合集模块 A&#xff1a;从构念到「量什么、量到什么水平」Prompt A1&#xff1a;帮我从概念走到可测变量我想要研究的抽象概念是&#xff1a;【例如「学业自我效能感 / 护理同理心 / 科研倦怠」】。 请你&#xff1a; 1&#xff09;用 2–3 句话帮我给出…

作者头像 李华
网站建设 2026/5/7 9:34:32

Cortex-R82处理器RAS架构设计与错误处理机制详解

1. Cortex-R82处理器RAS架构设计理念在现代嵌入式系统中&#xff0c;处理器可靠性直接关系到整个系统的稳定性。Cortex-R82作为面向高可靠性场景设计的处理器&#xff0c;其RAS(Reliability, Availability, Serviceability)扩展架构体现了三个核心设计理念&#xff1a;首先&…

作者头像 李华
网站建设 2026/5/7 9:25:28

马尔可夫思维:架构无关的线性推理扩展解析

1. 项目概述 "马尔可夫思维&#xff1a;架构无关的线性推理扩展"这个标题揭示了两个关键创新点&#xff1a;一是将马尔可夫性质引入思维过程建模&#xff0c;二是实现了与底层架构无关的推理能力扩展。作为一名长期从事算法架构设计的工程师&#xff0c;我最初看到这…

作者头像 李华
网站建设 2026/5/7 9:23:03

WarpGPT:Go语言构建的AI API网关,统一管理多模型服务

1. 项目概述与核心价值 最近在折腾AI应用开发的朋友&#xff0c;估计都绕不开一个核心痛点&#xff1a;如何让大语言模型&#xff08;LLM&#xff09;的能力稳定、高效地接入到自己的业务流程里。无论是想做个智能客服&#xff0c;还是搞个自动化内容生成工具&#xff0c;你很快…

作者头像 李华