当前位置: 首页 > news >正文

第四篇:《Docker 镜像:分层结构、拉取与推送》

镜像是 Docker 的基石。要高效使用 Docker必须理解镜像的分层文件系统、写时复制机制以及常用操作命令。本文将详细讲解镜像的存储结构、如何拉取、推送、构建镜像以及镜像的导入导出技巧。一、镜像的本质Docker 镜像是一个只读的、分层的文件系统。它包含了运行应用程序所需的所有内容代码、运行时、系统工具、库和配置文件。镜像不包含内核因为它共享宿主机的内核。二、分层存储与写时复制Copy-on-Write2.1 UnionFS联合文件系统Docker 镜像使用 UnionFS如 OverlayFS、AUFS将多个目录层“联合”挂载为一个虚拟文件系统。每一层都是只读的只有容器运行时会在最顶层增加一个可写层。举例一个 Nginx 镜像可能包含以下层Layer 1: Ubuntu 基础系统Layer 2: 安装 gcc 等编译工具Layer 3: 编译安装 nginxLayer 4: 删除编译工具虽然删除动作也是新层但最终文件系统中看不见2.2 写时复制CoW机制当容器读取文件时从上到下查找优先读取可写层如果存在修改。当容器修改文件时会将该文件从下层只读层复制到可写层然后修改。这大大节省了容器启动时间和磁盘空间。2.3 分层的好处节省磁盘空间多个容器可以共享相同的基础镜像层只需额外存储变化的层。加速构建与推送若某层未变化构建和推送时可利用缓存只传输变化的层。便于回滚镜像的历史层记录了每次变更。三、镜像命名规范镜像完整名称格式为text[registry-host]/[namespace]/[repository]:[tag]registry-host仓库服务器地址默认 docker.io。namespace命名空间用户或组织默认 library 对应官方镜像。repository仓库名。tag标签默认为 latest。示例nginx:latest → docker.io/library/nginx:latestmyregistry.example.com:5000/myteam/myapp:v1.0四、常用镜像操作命令4.1 拉取镜像pull# 拉取最新版dockerpull nginx# 拉取指定版本dockerpull alpine:3.18# 从私有仓库拉取dockerpull myregistry.com:5000/myapp:v14.2 列出本地镜像dockerimages# 或dockerimagels输出包含REPOSITORY、TAG、IMAGE ID、CREATED、SIZE。4.3 查看镜像详细信息dockerinspect nginx可以获取镜像的元数据环境变量、暴露端口、创建历史等。4.4 删除镜像dockerrmi nginx# 按名称删除dockerrmiimage_id# 按 ID 删除dockerimage prune# 清除 dangling 镜像无标签的中间层dockersystem prune-a# 清除所有未使用的镜像、容器、网络、卷危险删除镜像前需先删除使用该镜像的容器即使容器已停止也要先dockerrm。4.5 给镜像打标签tag# 为本地镜像添加新的标签dockertag nginx mynginx:v1# 准备推送到私有仓库时dockertag myapp:latest myregistry.com:5000/myteam/myapp:latest4.6 推送镜像到仓库push# 登录仓库Docker Hub 或私有仓库dockerlogin# 推送dockerpush myregistry.com:5000/myteam/myapp:latest4.7 镜像导出与导入无仓库场景# 导出镜像到 tar 文件dockersave-onginx.tar nginx:latest# 加载镜像dockerload-inginx.tardockersave 保存完整的历史层dockerexport导出容器为单层文件一般不用。五、查看镜像分层历史dockerhistorynginx:latest --no-trunc输出每一层的创建命令、大小。这有助于分析镜像为什么那么大。六、镜像大小优化为什么 Alpine 受欢迎Alpine Linux 是一个非常小的 Linux 发行版仅 5MB 左右使用 musl libc 和 busybox。与 Ubuntu 基础镜像~70MB相比Alpine 能极大减小镜像体积。示例 DockerfiledockerfileFROM alpine:3.18RUN apk add --no-cache nginx七、实战本地私有镜像仓库# 启动私有仓库容器dockerrun-d-p5000:5000--nameregistry registry:2# 打标签并推送dockertag alpine:3.18 localhost:5000/my-alpinedockerpush localhost:5000/my-alpine# 从私有仓库拉取dockerpull localhost:5000/my-alpine八、常见问题与解决九、小结本文讲解了 Docker 镜像的分层结构、写时复制原理、命名规范以及常用操作命令。掌握这些知识后你就能高效地管理本地及远程镜像。
http://www.zskr.cn/news/1390271.html

相关文章:

  • 5分钟打造你的网易云音乐超级插件中心:BetterNCM-Installer终极指南
  • 如何快速搭建企业级ITSM平台:iTop开源CMDB与IT服务管理完整指南
  • drawio-desktop:企业级跨平台图表协作解决方案
  • AI时代开发者转型:从代码工匠到战略指挥官的三方结对编程实践
  • 中山黄金上门回收推荐,福运来高分领跑 - 黄金回收
  • SPT-AKI存档编辑器:逃离塔科夫离线版的完整游戏进度管理指南
  • 你的电脑健康管家:LibreHardwareMonitor如何帮你预防硬件故障?
  • Pixhawk飞控刷固件后,为什么电机就是不转?我踩过的三个校准大坑
  • 融合经典测量与机器学习:数学分班考试的效度验证与优化实践
  • 文本嵌入实战指南:从语义理解到业务落地
  • 用Arduino UNO与AMG88xx传感器打造低成本热成像相机
  • 高价购买的传统SolidWorks工作站利用率不到30%!云飞云共享算力让每一分钱都花在刀刃上
  • 好用的淡纹眼油 CA眼油30天25 +轻松抗初老 - 全网最美
  • Unity WebGL项目如何实现画布透明,完美融入你的网页设计(附.jslib文件与完整配置)
  • Layerdivider终极指南:如何免费快速实现专业级图像智能分层
  • 你的SPSS方差分析结果真的靠谱吗?深入聊聊ANOVA背后的6大假设检验(附实操验证方法)
  • 3PEAK思瑞浦 TP1564AL1-SO2R-S SOP14 运算放大器
  • 新手首次使用taotoken从注册到发出第一个请求的全流程体验
  • Snowflake与Redshift选型实战:云数据仓库底层架构深度对比
  • 从设备树到应用层:手把手教你为Zynq Linux编写一个简单的I2C光模块监控驱动
  • 进口光照培养箱、植物/生物光照培养箱、低温/光照培养箱怎么选?普拉勒EG系列一台搞定多种实验需求 - 品牌推荐大师1
  • dbt核心原理与工程实践:从数据仓库定位到DAG血缘治理
  • 机器学习模型长期可持续性评估:从在线学习到碳排放权衡
  • TikTok评论数据采集神器:3分钟获取完整评论数据的零代码方案
  • 魔兽争霸3现代系统完美运行终极指南:告别闪退卡顿,畅享经典RTS
  • Cadence 17.4 Padstack Editor保姆级教程:从过孔到QFN,手把手教你画好10种常用焊盘
  • 【论文解读】从HEVC到VVC:首个实用VVC帧内编码器的实现之路
  • 游戏音频解密终极指南:如何用acbDecrypter一键提取加密音频文件
  • 几何透视图像校正处理软件 DxO ViewPoint
  • 从‘砖’到救砖:详解RK3399的MaskRom模式与eMMC硬件设计的关系