2016年11月20日星期日

Docker_011:在节点之间导出容器/镜像和导入镜像

1. 找到要导出的容器 ID
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f4b0d7285fec        ubuntu:14.04        /bin/bash           38 minutes ago      Exit 0                                  hungry_thompson
8ae64c0faa34        ubuntu:14.04        /bin/bash           41 minutes ago      Exit 0                                  jovial_hawking
3a09b2588478        ubuntu:14.04        /bin/bash           45 minutes ago      Exit 0                                  kickass_lovelace

以 3a09b2588478 这个容器 ID 作为示例。

2. 使用 docker commit + docker save + docker load 命令导出容器和导入镜像

2.1 提交变更,并且把容器保存成镜像,命名为 mynewimage。
$ docker commit 3a09b2588478 mynewimage
$ docker images

2.2 把镜像保存为 tar 文件
$ docker save mynewimage > /tmp/mynewimage.tar
把 mynewimage.tar 拷贝到新的 Docker 实例中,比如 FTP、SCP 或者直接使用 NFS 共享。

2.3 从 tar 文件导入为镜像
$ docker load < /tmp/mynewimage.tar

2.4 检查镜像是否导入成功
$ docker images

3. 使用 docker export + docker import 命令导出容器和导入镜像

3.1 导出容器快照为 tar 文件
$ docker export 3a09b2588478 > mynewimage.tar

3.2 导入容器快照为镜像
$ cat mynewimage.tar | docker import test/mynewimage:v1.0
此外,也可以通过指定 URL 或者某个目录来导入,例如
$ docker import http://example.com/exampleimage.tgz example/imagerepo
$ tar -c .| docker import exampleimagedir

小结:既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。
两者区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。
此外,从容器快照文件导入时,可以重新指定标签等元数据信息。

没有评论: