说到导出再导入其实并不是容易用到,但某些时候还真就避免不了,例如服务器封禁了国外的端口。
今天我就遇到了,政府机构的系统直接封禁了全部国外的端口,以至于完全无法从docker hub拉取到镜像,这里就只能先在可以使用docker hub的环境导出再导入这边。
容器导入及导出
docker的容器导出可以使用export
或者 save
来进行。
export
在docker中可以使用export
来导出容器镜像,它其实是将文件系统作为一个tar归档文件导出到STDOUT。从帮助中可以看出它其实就是将 container 的文件系统进行打包。
因此,在使用export
进行导出时,需要指定 container
,不能像docker save
那样指定Image。
# 查看运行的容器
docker ps -a
# 导出容器
docer export -o nginx.tar nginx
import
# 导入容器
docker import nginx.tar nginx:latest
docker import
将container
导入后会成为一个image
,而不是恢复为一个container
。
另:docker import
可以指定导入的image:[tag]
,说明我们可以为镜像指定新的名称。如果本地库已存在同名的镜像,则原有镜像的名称会被剥夺,赋给新的镜像。此时原有的镜像只能通过ID
进行操作。
save
前面说到了export
,其实还有save
,它也是一个导出命令(默认输出到 STDOUT),因此需要使用>
管道符将其传入文件,亦可以使用-o file.tar
方式。
它的目的是将一个或多个 image
保存到tar
docker save [OPTIONS] IMAGE [IMAGE...]
docker save busybox > busybox.tar
# or
docker save -o busybox.tar busybox:tag
load
从文件或STDIN加载tar存档(即使使用gzip、bzip2、xz压缩)中的图像或者存储库。将其恢复至image中。
docker load [OPTIONS]
docker load < busybox.tar.gz
# or
docker load -i fedora.tar
两种方案的差异
- 文件大小不同
export导出的镜像体积小于save保存的镜像 - 是否可以对镜像重命名
docker import 可以为镜像重新指定新名称
docker load 不能对载入的镜像重命名 - 多镜像同时导出
docker export 不支持
docker save 支持 - 是否包含历史
export 不支持
save 支持(包含历史,可以回滚layer)
文章评论