一、问题

创建了一些镜像,或者有一些容器,我们希望它能够保存下来并且与其他小伙伴共享。怎么搞?

二、解决方案

对于已有镜像,可以使用docker save和docker load命令来创建一个压缩包(tarball);
而对于容器可以使用docker import 和 docker export进行导入导出操作。


让我们从一个容器开始,将它导出为一个新的压缩包文件,如下所示。

  1. $ docker export quizzical_mestorf > update.tar
  2. $ ls
  3. update.tar

在这一章第1个例子中,我们将容器提交为镜像使用commit命令,同样的我们也可以使用export将容器打包成tar文件,再通过import命令导入为新的镜像。如下所示。

  1. $ docker import - update < update.tar
  2. sha256:c198ffd4bb6108c80a7······
  3. $ docker images
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. update latest c198ffd4bb61 12 seconds ago 167MB

接着如果想通过操作创建的镜像进行导入导出,可以使用load和save命令,如下所示

  1. $ docker save -o ubuntu.tar ubuntu:update_vim
  2. $ ll
  3. total 336424
  4. -rw-r--r--. 1 root root 0 Jan 22 17:30 orange
  5. -rw-------. 1 root root 172656128 Jan 23 15:53 ubuntu.tar
  6. -rw-r--r--. 1 root root 171838976 Jan 23 15:38 update.tar
  7. $ docker rmi ubuntu:update_vim
  8. Untagged: ubuntu:update_vim
  9. Deleted: sha256:2719f793123708b7087bc9f07c4e8671d316410fc31184eb281420e60cf863ae
  10. Deleted: sha256:ce90e1c19269851ef897fcfc8c3ecc4cf5ad480d0236b8ee9ad08fbd2f9d4c58
  11. $ docker load < ubuntu.tar
  12. ad01e27575dd: Loading layer [==================================================>] 97.37MB/97.37MB
  13. Loaded image: ubuntu:update_vim

三、讨论

这个两组方法差别不大,有一个小细节就是,保存镜像会保留历史,而导出容器将会对它的历史进行压缩。