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

Docker 镜像拉取与离线分发实践

Docker 镜像拉取与离线分发实践

背景

在内网部署、离线交付、跨环境迁移时,常见需求不是直接运行容器,而是先把镜像拉到本地,再导出成文件发给其他人。

这类场景下,最稳妥的流程通常是:

  1. docker pull将目标镜像拉到本地
  2. docker save将镜像导出为.tar
  3. 按统一命名规则整理文件
  4. 将导出的包分发给目标环境
  5. 对方使用docker load导入

本文整理一套可直接复用的操作方式。

核心命令

拉取镜像:

dockerpull 镜像名:tag

导出镜像:

dockersave-omyimage.tar 镜像名:tag

例如:

dockerpull nginx:latestdockersave-onginx--latest.tar nginx:latest

为什么用docker save

docker save导出的是镜像本身,适合做离线分发。

它和下面几种方式的区别需要分清:

  • docker save
    导出镜像,适合发送给别人导入。
  • docker export
    导出容器文件系统,不保留镜像层和元数据,通常不适合镜像分发。
  • 直接拷贝 Docker Desktop 的底层磁盘文件
    不适合单镜像交付,文件大且不可控。

如果目标是“把某个镜像发给别人用”,优先选docker save

命名规则

为了便于识别和批量管理,可以将导出文件命名为:

镜像名最后一个 path--tag.tar

例如:

docker.io/library/nginx:latest

导出后命名为:

nginx--latest.tar

再例如:

docker.io/library/mysql:8.0

导出后命名为:

mysql--8.0.tar

这个规则的优点很直接:

  • 文件名短,适合分发
  • 能保留服务名和版本号
  • 比把完整仓库路径塞进文件名更清晰

单个镜像导出

下面是一套最小操作:

image="nginx:latest"repo="${image%:*}"tag="${image##*:}"name="${repo##*/}"dockerpull"$image"dockersave-o"${name}--${tag}.tar""$image"

执行后会生成:

nginx--latest.tar

批量导出镜像

如果镜像很多,手工执行容易出错。更实用的做法是写一个简单脚本。

#!/usr/bin/env bashset-uout_dir="./web-images"mkdir-p"$out_dir"images=("nginx:latest""mysql:8.0""redis:7.2")forimagein"${images[@]}";dorepo="${image%:*}"tag="${image##*:}"name="${repo##*/}"tar_path="${out_dir}/${name}--${tag}.tar"echo"===$image==="dockerpull"$image"||continuedockersave-o"$tar_path""$image"||continueecho"SAVED ->$tar_path"done

这个脚本的特点是:

  • 逻辑简单,便于维护
  • 目录按用途分开,比如web-imagesdb-images
  • 文件名统一
  • 某个镜像失败不会阻塞后续镜像

实际整理方式

如果项目里存在多套业务镜像,建议按目录区分:

web-images/ nginx--latest.tar redis--7.2.tar db-images/ mysql--8.0.tar postgres--16.tar

这样比全部堆在一个目录里更好管理,尤其适合:

  • 按系统交付
  • 按环境备份
  • 按项目归档

常见问题

1.docker save生成的是不是“压缩包”

严格来说,docker save生成的是.tar包,不一定是压缩过的。

如果你还想进一步压缩,可以再执行:

gzipnginx--latest.tar

压缩后会变成:

nginx--latest.tar.gz

但很多场景下,直接保留.tar就已经够用了。

2. 为什么docker pull会提示unauthorized

这通常不是命令写错,而是仓库权限问题。常见原因有:

  • 没有执行docker login
  • 当前账号没有目标仓库拉取权限
  • 镜像路径写错
  • tag 不存在

遇到这种情况,先确认:

dockerlogin

然后再重试docker pull

3.docker save会不会带上容器运行时的数据

不会。

docker save只导出镜像,不包含容器运行过程中写入的数据卷内容。

如果你需要一起迁移业务数据,还要额外处理:

  • Docker volume
  • 挂载目录
  • 数据库备份

4. 对方如何使用导出的镜像

对方收到.tar后,直接执行:

dockerload-inginx--latest.tar

导入完成后,可通过下面命令确认:

dockerimages

推荐的交付流程

比较稳妥的一套流程如下:

  1. 整理镜像清单
  2. 创建分类目录,例如web-imagesdb-images
  3. 批量执行docker pull
  4. 服务名--版本.tar导出
  5. 校验导出文件是否齐全
  6. 如有需要,再统一压缩或打总包
  7. 交付对方使用docker load导入

一套可直接复用的模板

#!/usr/bin/env bashset-uout_dir="./images"mkdir-p"$out_dir"images=("镜像1:tag""镜像2:tag""镜像3:tag")forimagein"${images[@]}";dorepo="${image%:*}"tag="${image##*:}"name="${repo##*/}"tar_path="${out_dir}/${name}--${tag}.tar"echo"pull ->$image"dockerpull"$image"||{echo"pull failed:$image"continue}echo"save ->$tar_path"dockersave-o"$tar_path""$image"||{echo"save failed:$image"continue}done

总结

如果目标是做离线交付,最实用的办法就是:

docker pull -> docker save -> 统一命名 -> 分类归档 -> docker load

这里最关键的不是命令本身,而是两点:

  • 命名规则要统一
  • 目录结构要清晰

当镜像数量一多,规范化管理比单次执行更重要。

http://www.gsyq.cn/news/1613872.html

相关文章:

  • 大模型MoE架构揭秘:参数规模与激活比例的工程平衡
  • 深度解析pk3DS:打造专属宝可梦3DS游戏的终极编辑器
  • Twitter营销如何获取精准流量?技巧分析
  • 11 收发数据的正确姿势
  • Keep:如何用开源AIOps平台终结运维团队的“警报疲劳“噩梦?
  • 企业级部署必看,ChatGPT Memory配置陷阱清单,7类致命错误正在 silently corrupt your history
  • 数据库日志显示系统
  • 080、DCNv2 插入 Neck 的 P3 和 P4 层:对多尺度目标形状变化的鲁棒性测试
  • HS2-HF Patch:一站式解决方案,让HoneySelect2汉化与MOD管理变得简单高效
  • Kafka-UI权限最小化实战:3种企业级安全部署模式深度解析
  • Select-Additive Learning:小数据多模态情感分析里的“身份捷径”怎么拆掉
  • OpenAI产品生态暗藏的5个未公开能力(含即将下线的Legacy Endpoint预警)
  • 网站做不好?因为你忽略了这最关键的一步:顶层设计
  • 基于KMR221与PIC18LF4620的嵌入式电压管理系统设计
  • vLLM 与 SGLang 推理框架性能横评
  • B站视频备份神器:m4s-converter轻松实现缓存视频永久保存
  • 免费哔咔漫画下载器完整指南:3步打造个人永久漫画库
  • 如何快速构建个人漫画图书馆:哔咔漫画下载器完整指南
  • 技术享元中的对象共享与状态外部化
  • 基于ICM-42605和PIC18的6DOF运动追踪系统设计
  • 6DoF运动跟踪技术:从IMU到STM32实现
  • ChatGPT Memory功能实战避坑指南,12个真实生产环境崩溃案例(含OpenAI官方未公开日志片段)
  • 【限时技术预警】ChatGPT Memory Beta版已悄然关闭旧会话自动清理——你的对话数据正被永久留存?
  • TDMS格式查看
  • FLAME 技术详解:3D 人脸模型里的“骨架、身份和表情”到底怎么拆开
  • E-Hentai下载器完整指南:如何快速批量下载并打包为ZIP文件
  • 泛微E-Office文件上传漏洞复现与安全加固指南
  • 上海长宁区有实体样板间可参观的老房翻新装修公司
  • 终极空洞骑士模组管理器Scarab:为什么你需要这款免费开源工具?
  • 暗黑2存档编辑器终极指南:10分钟掌握角色定制秘籍