Docker 镜像导出导入

2022-03-16 1611点热度 0条评论

说到导出再导入其实并不是容易用到,但某些时候还真就避免不了,例如服务器封禁了国外的端口。

今天我就遇到了,政府机构的系统直接封禁了全部国外的端口,以至于完全无法从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 importcontainer导入后会成为一个image,而不是恢复为一个container

另:docker import可以指定导入的image:[tag],说明我们可以为镜像指定新的名称。如果本地库已存在同名的镜像,则原有镜像的名称会被剥夺,赋给新的镜像。此时原有的镜像只能通过ID进行操作。

dockers export 的应用场景主要用来制作基础镜像,比如你用Alpine作为OS,然后安装一堆软件并进行设置后,使用docker export 将其保存为一个基础镜像。然后将这个镜像发给其他人使用。例如:开发中的基础开发环境

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

两种方案的差异

  1. 文件大小不同
    export导出的镜像体积小于save保存的镜像
  2. 是否可以对镜像重命名
    docker import 可以为镜像重新指定新名称
    docker load 不能对载入的镜像重命名
  3. 多镜像同时导出
    docker export 不支持
    docker save 支持
  4. 是否包含历史
    export 不支持
    save 支持(包含历史,可以回滚layer)
两种方案不可混用,使用import导入save产生的文件,虽然可以导入成功。但是启动容器会失败。

Jalena

原创内容,转载请注明出处! 部分内容来自网络,请遵守法律适用!

文章评论