除了标准的使用Dockerfile
生成镜像的方法以外,由于各种特殊需求和历史原因,还提供了其他方法用以生成镜像。
从rootfs压缩包导入
压缩包可以是本地文件、远程web文件,甚至是从标准输入中得到。压缩包会在镜像/
目录展开,并直接作为镜像第一层提交。
比如,我们想要创建一个OpenZV的Ubuntu:14.04模板的镜像,如下:
root@ubuntu:~# docker import http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz openzv:14.04
这条命令会自动下载ubuntu-14.04-x86_64-minimal.tar.gz
压缩包,并以根文件系统展开导入,保存镜像为openzv:14.04
。我们可以使用docker image ls
命令进行查看我们刚刚导入的镜像,如下:
root@ubuntu:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
openzv 14.04 c3c4a1360689 4 minutes ago 215MB
如果我们查看镜像的历史的话,仍然可以看到镜像的导入连接,如下:
root@ubuntu:~# docker history openzv:14.04
IMAGE CREATED CREATED BY SIZE COMMENT
c3c4a1360689 5 minutes ago 215MB Imported from http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz
docker save和docker load
Docker还提供了docker load
和docker save
命令,用以将镜像保存为一个tar
文件,然后传输到另外一个位置上,而后加载进来。这是在没有Docker Registry时的做法,现在已经不推荐,镜像迁移应该直接使用Docker Registry,无乱是使用Docker Hub还是使用内网私有的Docker Registry都可以!
比如,我的镜像列表中有一个名为ubuntu:16.04
的镜像,如下:
root@ubuntu:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
openzv 14.04 c3c4a1360689 4 minutes ago 215MB
ubuntu 16.04 5e8b97a2a082 6 weeks ago 114MB
我们将ubuntu:16.04
的镜像保存为test-16.04.tar.gz
,如下:
root@ubuntu:~# docker save ubuntu:16.04 | gzip > test-16.04.tar.gz
如果你的镜像很大的话,这个操作可能会需要等待几秒,执行完毕之后,会在当前目录下生成一个名为test-16.04.tar.gz
的文件
然后我们可以将此文件复制到了另外一个机器上,可以使用下面的命令进行加载镜像,如下:
docker load -i test-16.04.tar.gz
此外,我们还可以使用docker save
命令将其保存为普通文件,而后通过docker load
命令进行加载,如下:
docker save ubuntu:16.04 -o ubuntu
我们可以将此文件复制到了另外一个机器上,可以使用下面的命令进行加载镜像,如下:
cat ubuntu | docker load -q