其它生成镜像的方法
即除了标准地使用Dockerfile来生成镜像外,还有一些其他的方法
1)从 rootfs 压缩包导入
格式:docker import [选项] <文件>|<URL>|- [<仓库名>[:<标签>]]
压缩包可以是本地文件、远程 Web 文件,甚至是从标准输入中得到。压缩包将会在镜像 / 目录展开,并直接作为镜像第一层提交。
比如我们想要创建一个 OpenVZ 的 Ubuntu 14.04 模板的镜像:
docker import http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz openvz/ubuntu:14.04
2)docker save 和 docker load ——不推荐使用
用以将镜像保存(docker)为一个tar文件,然后传输到另一个位置上,在加载(docker load)进来
⚠️不推荐,现在镜像迁移应该直接使用Docker Registry,无论是直接使用Docker Hub还是使用内网私有Registry都可以
1> 保存镜像
使用docker save命令可以将镜像保存为归档文件。
比如我们希望保存这个alpine镜像
userdeMBP:~ user$ docker images alpine
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest 196d12cf6ab1 months ago .41MB
保存镜像的命令为:
userdeMBP:~ user$ docker save alpine | gzip > alpine-latest.tar.gz
这个命令的意思就是先保存alpine镜像 ,然后再使用gzip进行压缩
最后就在~目录下生成了一个alpine-latest.tar.gz压缩文件
2> 加载镜像
然后我们将 alpine-latest.tar.gz文件复制到了到了另一个机器上,可以用下面这个命令加载镜像:
$ docker load -i alpine-latest.tar.gz
-i, --input string Read from tar archive file, instead of STDIN 从tar归档文件中读入,替代STDIN输入
3>结合
如果我们结合这两个命令以及 ssh甚至 pv的话,利用 Linux 强大的管道,我 们可以写一个命令完成从一个机器将镜像迁移到另一个机器,并且带进度条的功 能:
docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | docker load'