Docker技术入门与实战(第3版)
上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命令来导入一个容器快照到本地镜像库。这两者的区别在于:容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。