4.5 导入和导出容器

某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用Docker的导入和导出功能。这也是Docker自身提供的一个重要特性。

1.导出容器

导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令,该命令的格式为docker export[-o|—output[=""]]CONTAINER。其中,可以通过-o选项来指定导出的tar文件名,也可以直接通过重定向来实现。

首先查看所有的容器,如下所示:


  1. $ docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. ce554267d7a4 ubuntu:latest "/bin/sh -c 'while t" 3 minutes ago
  4. Exited (-1) 13 seconds ago determined_pike
  5. d58050081fe3 ubuntu:latest "/bin/bash" About an hour ago
  6. Exited (0) About an hour ago berserk_brattain
  7. e812617b41f6 ubuntu:latest "echo 'hello! I am h" 2 hours ago
  8. Exited (0) 3 minutes ago silly_leakey

分别导出ce554267d7a4容器和e812617b41f6容器到文件test_for_run.tar文件和test_for_stop.tar文件:


  1. $ docker export -o test_for_run.tar ce5
  2. $ ls
  3. test_for_run.tar
  4. $ docker export e81 >test_for_stop.tar
  5. $ ls
  6. test_for_run.tar test_for_stop.tar

之后,可将导出的tar文件传输到其他机器上,然后再通过导入命令导入到系统中,从而实现容器的迁移。

2.导入容器

导出的文件又可以使用docker import命令导入变成镜像,该命令格式为:


  1. docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY
  2. [:TAG]]

用户可以通过-c,—change=[]选项在导入的同时执行对容器进行修改的Dockerfile指令(可参考第8章内容)。

下面将导出的test_for_run.tar文件导入到系统中:


  1. $ docker import test_for_run.tar - test/ubuntu:v1.0
  2. $ docker images
  3. REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
  4. test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB

之前镜像章节中笔者曾介绍过使用docker load命令来导入一个镜像文件,与docker import命令十分类似。

实际上,既可以使用docker load命令来导入镜像存储文件到本地镜像库,也可以使用docker import命令来导入一个容器快照到本地镜像库。

这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。