docker保存和加载镜像
前言
最近我需要将一台电脑的docker镜像直接搬到另一台上,因为另一台服务器没有接入互联网,所以无法直接下载,经过查看,docker有两种导出镜像的方式,分别说一下
export和import
首先查看所有的容器
1 | docker ps -a |
导出镜像,使用如下命令
1 | docker export ds2abda > a.tar |
命名执行完成后,会在宿主机当前目录下看到有一个a.tar的文件
然后我们把tar拷贝到另一台机器上,使用如下命名执行导入
1 | docker import - new_a_server < a.tar |
导入后,使用如下命令查看是否导入成功
1 | docker images |
save和load
首先使用以下命令查看本机的镜像,和export不通过,export是查看容器
1 | docker images |
保存镜像
1 | docker save abcde > a.tar |
导入镜像
1 | docker load < a.tar |
两种方式对比
特别注意:两种方法不可混用。
如果使用 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 载入。
重名名镜像
1 | docker tag [镜像id] [新镜像名称]:[新镜像标签] |