docker save
可以通过以下步骤将Docker镜像导出到另一台计算机上:
-
在本地计算机上使用以下命令将Docker镜像保存为tar文件:
docker save -o <image-name>.tar <image-name>
其中,<image-name>是要导出的Docker镜像的名称。
-
将保存的tar文件传输到另一台计算机上,可以使用scp命令或其他文件传输工具。
-
在目标计算机上使用以下命令将tar文件加载为Docker镜像:
docker load -i image-name.tar
其中,<image-name>是要导入的Docker镜像的名称。
-
确认镜像已成功导入,可以使用以下命令查看:
docker images
如果成功导入,将会看到导入的Docker镜像的名称和版本号。
注意:在导出和导入Docker镜像时,需要确保两台计算机上的Docker版本相同或兼容。
docker export
Docker可以使用docker export
命令来导出一个container。具体命令如下:
docker export container_id > file_name.tar
docker import - new_hangger_server < file_name.tar
这个命令会将container的文件系统打包成一个tar文件,并输出到标准输出流中。我们可以使用重定向符号将其保存到一个文件中。
导出的内容与导出images有以下区别:
- 导出的是container,而不是image。导出的内容包含了container的文件系统,但不包含Docker镜像的元数据和配置信息。
- 导出的内容是一个tar文件,而不是Docker镜像。导出的内容可以被导入到其他Docker环境中,但需要手动创建一个新的container。
- 导出的内容不包含container的元数据和配置信息。如果需要导出container的元数据和配置信息,可以使用
docker inspect
命令。
因此,导出container和导出images的目的和使用场景是不同的。导出container主要用于备份和迁移container的文件系统,而导出images主要用于分享和分发Docker镜像。
附:两种方案的差别
特别注意:两种方法不可混用。
如果使用 import 导入 save 产生的文件,虽然导入不提示错误,但是启动容器时会提示失败,会出现类似"docker: Error response from daemon: Container command not found or does not exist"的错误。
1,文件大小不同
export 导出的镜像文件体积小于 save 保存的镜像
2,是否可以对镜像重命名
- docker import 可以为镜像指定新名称
- docker load 不能对载入的镜像重命名
3,是否可以同时将多个镜像打包到一个文件中
- docker export 不支持
- docker save 支持
4,是否包含镜像历史
- export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。
- 而 save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。
5,应用场景不同
- docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
- docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。