把 Docker 里的"整个容器"打包出来,其实有两种常见需求:
① 把正在运行的容器保存成镜像(image)
② 把镜像导出成一个可携带的文件(tar 包)
下面给你一个最干净、最可复现的流程,完全符合你一贯喜欢的"显式、可重建"风格。
🧱 一、将容器保存成镜像(commit)
如果你在容器里做了修改(安装软件、改配置),想把它固化下来:
docker commit <容器名或ID> myimage:latest
示例:
docker commit openvoice_container openvoice_backup:1.0
这样你就得到了一个新的镜像。
📦 二、将镜像导出为 tar 包(save)
把镜像打包成一个文件,方便迁移、备份、离线部署:
docker save -o myimage.tar myimage:latest
示例:
docker save -o openvoice_backup.tar openvoice_backup:1.0
得到的 openvoice_backup.tar 就是完整可移植的镜像文件。
🔄 三、在另一台机器导入(load)
把 tar 包复制到另一台机器后:
docker load -i openvoice_backup.tar
导入后镜像就能直接运行:
docker run -it --rm openvoice_backup:1.0
🧰 四、如果你想导出容器文件系统(export)
这是另一种方式,只导出容器的文件系统,不包含镜像层信息:
docker export -o container_fs.tar <容器名或ID>
但一般不推荐用于可重建部署,因为它丢失镜像层信息、元数据、环境变量等。
🧭 你应该用哪种方式?
| 需求 | 推荐方式 |
|---|---|
| 完整备份、迁移、可重建 | commit + save(最稳妥) |
| 只要容器文件系统,不关心镜像层 | export |
| 想保持 Dockerfile 可维护性 | 重新构建镜像,而不是 commit |