上QQ阅读APP看书,第一时间看更新
4.5 导入和导出容器
某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用Docker的导入和导出功能,这也是Docker自身提供的一个重要特性。
1.导出容器
导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态。可以使用docker [container] export命令,该命令格式为:
docker [container] export [-o|--output[=""]] CONTAINER
其中,可以通过-o选项来指定导出的tar文件名,也可以直接通过重定向来实现。
首先,查看所有的容器,如下所示:
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ce554267d7a4 ubuntu:latest "/bin/sh -c 'while t" 3 minutes ago Exited (-1) 13 seconds ago determined_pike d58050081fe3 ubuntu:latest "/bin/bash" About an hour ago Exited (0) About an hour ago berserk_brattain e812617b41f6 ubuntu:latest "echo 'hello! I am h" 2 hours ago Exited (0) 3 minutes ago silly_leakey
分别导出ce554267d7a4容器和e812617b41f6容器到文件test_for_run.tar文件和test_for_stop.tar文件:
$ docker export -o test_for_run.tar ce5 $ ls test_for_run.tar $ docker export e81 >test_for_stop.tar $ ls test_for_run.tar test_for_stop.tar
之后,可将导出的tar文件传输到其他机器上,然后再通过导入命令导入到系统中,实现容器的迁移。
2.导入容器
导出的文件又可以使用docker [container] import命令导入变成镜像,该命令格式为:
docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|- [REPOSITORY[:TAG]]
用户可以通过-c, --change=[]选项在导入的同时执行对容器进行修改的Dockerfile指令(可参考后续相关章节)。
下面将导出的test_for_run.tar文件导入到系统中:
$ docker import test_for_run.tar - test/ubuntu:v1.0 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB
之前的镜像章节(第3章)中,笔者曾介绍过使用docker load命令来导入一个镜像文件,与docker [container] import命令十分类似。
实际上,既可以使用docker load命令来导入镜像存储文件到本地镜像库,也可以使用docker [container] import命令来导入一个容器快照到本地镜像库。这两者的区别在于:容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。