【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. 启动并运行容器

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

bash 复制代码
docker run -it --name mycontainer ubuntu:20.04 /bin/bash

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

bash 复制代码
apt update && apt install -y vim curl

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


2. 将容器保存为镜像

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

bash 复制代码
docker commit mycontainer myimage:latest

这里的含义是:

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

可以验证一下:

bash 复制代码
docker images

输出类似:

复制代码
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
myimage            latest    a1b2c3d4e5f6   5 seconds ago    250MB

3. 导出镜像为 tar 文件

bash 复制代码
docker save -o myimage.tar myimage:latest

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


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

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

bash 复制代码
docker load -i myimage.tar

导入成功后:

bash 复制代码
docker images

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


三、完整命令汇总

bash 复制代码
# 将容器保存成镜像
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 save docker export
保留历史层
保留镜像 metadata(如 CMD、ENV)
导出内容 镜像(包括层和配置) 容器文件系统快照
导入方式 docker load docker import

如果你是为了迁移或复用镜像 ,请选择 commit + save

如果只是想要容器的纯文件系统数据,才用 export


五、总结

通过 docker commitdocker save,我们可以轻松地将运行中的容器状态保存下来并导出成镜像文件,方便在不同环境中部署。

这是在开发调试阶段、迁移环境或者快速备份时非常实用的技巧。

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


📌 参考命令速查表

bash 复制代码
docker commit <容器名/ID> <镜像名:标签>      # 保存容器为镜像
docker save -o <文件名.tar> <镜像名:标签>     # 导出镜像
docker load -i <文件名.tar>                  # 导入镜像
docker export <容器名/ID> > <文件名.tar>      # 导出容器文件系统
docker import <文件名.tar> <镜像名:标签>      # 从文件系统生成镜像
相关推荐
大树881 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工1 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn861 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智1 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_1 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉2 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦2 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
2601_961875242 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant