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

【Docker】一键将运行中的容器打包成镜像并导出

Docker 将启动的容器打包为镜像并导出

在日常使用 Docker 过程中,我们常常会遇到这样一个场景:
启动了一个容器,在里面做了一些环境配置、安装了依赖、调试好了应用,现在想把它的当前状态保存下来,以便以后再次使用,或者迁移到其他服务器上。

这篇文章将手把手教你如何把一个运行中的容器保存成镜像,并导出到文件。


一、背景知识

在 Docker 中,几个容易混淆的命令:

  • docker commit
    将容器当前状态“快照”成一个新的镜像。
  • docker save
    将镜像导出成 tar 文件(保留镜像层信息和 metadata)。
  • docker export
    将容器的文件系统导出为 tar(不保留历史层和元数据)。
  • docker load
    docker save 导出的 tar 文件导入镜像。
  • docker import
    docker export 导出的 tar 文件创建新镜像(无历史层)。

简单理解:

保留镜像信息用 commit + save,只想导出文件系统就用 export


二、操作流程

1. 启动并运行容器

例如,我们先启动一个临时容器:

docker run -it --name mycontainer ubuntu:20.04 /bin/bash

进入容器后,你可能会执行:

apt update && apt install -y vim curl

现在容器状态已经发生了变化。


2. 将容器保存为镜像

当你想保存当前容器状态时:

docker commit mycontainer myimage:latest

这里的含义是:

  • 将容器 mycontainer 生成一个新镜像 myimage:latest
  • 镜像会记录当时的文件系统、环境变量等。

可以验证一下:

docker images

输出类似:

REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
myimage            latest    a1b2c3d4e5f6   5 seconds ago    250MB

3. 导出镜像为 tar 文件

docker save -o myimage.tar myimage:latest

这样会生成一个 myimage.tar 文件,你可以发送给别人或存档。


4. 在另一台机器导入镜像

复制 myimage.tar 到另一台服务器后执行:

docker load -i myimage.tar

导入成功后:

docker images

就可以看到 myimage:latest 出现在新环境中了。


三、完整命令汇总

# 将容器保存成镜像
docker commit mycontainer myimage:latest  # 将镜像导出成 tar 包
docker save -o myimage.tar myimage:latest  # 传输到另一台机器
scp myimage.tar user@remote:/path  # 另一台机器加载镜像
docker load -i myimage.tar

四、docker commit vs docker export 的区别

功能docker commit + docker savedocker export
保留历史层
保留镜像 metadata(如 CMD、ENV)
导出内容镜像(包括层和配置)容器文件系统快照
导入方式docker loaddocker import

如果你是为了迁移或复用镜像,请选择 commit + save
如果只是想要容器的纯文件系统数据,才用 export


五、总结

通过 docker commitdocker save,我们可以轻松地将运行中的容器状态保存下来并导出成镜像文件,方便在不同环境中部署。
这是在开发调试阶段、迁移环境或者快速备份时非常实用的技巧。

小建议:如果是长期维护的项目,建议将重要配置写到 Dockerfile 中,从源代码构建镜像,而不是依赖 commit 生成镜像。这样更易于版本管理和复现。


📌 参考命令速查表

docker commit <容器名/ID> <镜像名:标签>      # 保存容器为镜像
docker save -o <文件名.tar> <镜像名:标签>     # 导出镜像
docker load -i <文件名.tar>                  # 导入镜像
docker export <容器名/ID> > <文件名.tar>      # 导出容器文件系统
docker import <文件名.tar> <镜像名:标签>      # 从文件系统生成镜像

文章转载自:

http://0cDHT81D.nkdmd.cn
http://OFekeZsc.nkdmd.cn
http://6x5pj2oh.nkdmd.cn
http://cYSd0QHa.nkdmd.cn
http://6iRg1kcV.nkdmd.cn
http://lEFnm8vq.nkdmd.cn
http://jcoeUO52.nkdmd.cn
http://MlXDNYr8.nkdmd.cn
http://gcULc4GW.nkdmd.cn
http://rRvNSWrL.nkdmd.cn
http://aPYa3mKS.nkdmd.cn
http://yYpXtScJ.nkdmd.cn
http://APOrdWiE.nkdmd.cn
http://pw593zsI.nkdmd.cn
http://BU8cxTcb.nkdmd.cn
http://prHZc9qK.nkdmd.cn
http://XlQHsB4W.nkdmd.cn
http://hlEeQqpC.nkdmd.cn
http://ri293jUo.nkdmd.cn
http://iSqGtYbr.nkdmd.cn
http://uHlBjjt8.nkdmd.cn
http://N0JFhnST.nkdmd.cn
http://x9Osxkf8.nkdmd.cn
http://BOqPD1jG.nkdmd.cn
http://1Hslcdcn.nkdmd.cn
http://Fyn1tSg5.nkdmd.cn
http://z9bjNevh.nkdmd.cn
http://ptSrbBGi.nkdmd.cn
http://rC9yhC7k.nkdmd.cn
http://zFz5zvDy.nkdmd.cn
http://www.dtcms.com/a/374397.html

相关文章:

  • LLVM 数据结构简介
  • MCP与http、websocket的关系
  • 【modbus学习】
  • 【linux】sed/awk命令检索区间日志
  • 瑞派虹泰环城总院 | 打造“一站式宠物诊疗空间”,定义全国宠物医疗新高度
  • 数据分析画图显示中文
  • 嵌入式ARM架构学习3——启动代码
  • 2025云计算趋势:Serverless与AI大模型如何赋能中小企业
  • 如何利用 AWS 服务器优化跨境电商和 SEO 战略?
  • 大数据毕业设计-基于Python的中文起点网小说数据分析平台(高分计算机毕业设计选题·定制开发·真正大数据)
  • 小程序开发单行日历可滑动
  • 项目日记 -日志系统 -搭建基础框架
  • 计算机网络第四章(4)——网络层《ARP协议》
  • 探迹SalesGPT
  • 带有 Attention 机制的 Encoder-Decoder 架构模型分析
  • 利用易语言编写,逻辑为按照数字越大抽取率越前
  • leetcode 219 存在重复元素II
  • Redis(缓存)
  • ARP 协议
  • 169.在Vue3中使用OpenLayers + D3实现地图区块呈现不同颜色的效果
  • 【C++】递归与迭代:两种编程范式的对比与实践
  • 【Java】设计模式——单例、工厂、代理模式
  • C++ ——一文读懂:Valgrind 检测内存泄漏
  • 代码随想录算法训练营第三十一天 | 合并区间、单调递增的数字
  • Redis核心通用命令深度解析:结合C++ redis-plus-plus 实战指南
  • 三防手机的三防是指什么?推荐一款实用机型
  • 请求库-axios
  • Python 2025:AI工程化与智能代理开发实战
  • 聚铭网络入选数世咨询《中国数字安全价值图谱》“日志审计”推荐企业
  • 【56页PPT】数字化智能工厂总体设计SRMWCSWMSMESEMS系统建设方案(附下载方式)