Docker容器迁移之导入和导出容器方式

 更新时间:2023年05月30日 09:28:15   作者:leoe_  
这篇文章主要介绍了Docker容器迁移之导入和导出容器方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Docker容器迁移导入和导出容器

因为本地物理机配置完了,所以要把服务器上的容器移到本机中,此时可以使用docker的导入导出功能,这也是docker自身提供的一个重要特征。

1、导出容器

导出容器可以导出一个已经创建的容器到一个文件,不管容器处于什么状态,可以使用docker export 命令。

命令格式为:

docker export [-o|--output[=""]] CONTATINER

其中可以通过-o来指定导出的tar文件名,也可以直接通过重定向来实现。

看下我的容器列表:

这里写图片描述

这里我将ubuntu 的容器导出到文件ubuntu_run.tar中:

这里写图片描述

注:这里可以填容器的name ,也可以填容器id的前三位

另一种格式为:

docker export 容器id/name >文件名.tar

可以使用scp 指令将文件进行传送:

scp ubuntu_run.tar root@124.207.96.94:/root/

2、导入容器

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

docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:YAG]]

其中-c 选项可以在导入的同时执行对容器进行修改的Dockerfile指令(网络等修改)

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

这里写图片描述

导入成功

另外 docker load 命令也可以导入一个镜像存储文件,但是跟docker import 命令是有区别的:

  • docker import:丢弃了所有的历史记录和元数据信息,仅保存容器当时的快照状态。在导入的时候可以重新制定标签等元数据信息。
  • docker load:将保存完整记录,体积较大。

Docker镜像导出导入以及和容器导出导入的区别

镜像导出

命令

docker save -o output.tar ID/NAME:VERSION
或
docker save > output.tar ID/NAME:VERSION

其中-o和>表示输出到文件,output.tar为导出的文件的名称(通常导出为.tar文件),ID为镜像id,NAME表示镜像名,VERSION为版本号

注意:以ID和以NAME的方式导出,它们在导入的时候的效果是不一样的,详细看下面导入的时候的演示。

eg:

C:\Users\32631>docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
newubuntu           latest              d60aa43d53cf        11 minutes ago      73.9MB
<none>              <none>              e816e4dc14d5        12 minutes ago      73.9MB
ubuntu              latest              4e2eef94cd6b        10 days ago         73.9MB
C:\Users\32631>docker save -o outputimage.tar 4e2eef94cd6b

镜像导入

命令:

docker load -i output.tar
或
docker load < output.tar

其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

eg1 :演示了导入前,查看现存的镜像的信息,然后删除该镜像,再导入之前该镜像以name方式被导出的文件,再查看现存的镜像信息。

会发现:导入的镜像ID和导入前的镜像ID是一样的

C:\Users\32631>docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
newubuntu           latest              d60aa43d53cf        21 minutes ago      73.9MB
C:\Users\32631>docker image rm d60aa43d53cf
Untagged: newubuntu:latest
Deleted: sha256:d60aa43d53cfdd69615366b5eb9bdd88f76b78648e0ca57be8851355037f7200
Deleted: sha256:d7c2a25e228ad914795f8f4f1110dcd738819461090bdb27558fc533056a187c
C:\Users\32631>docker load -i outputimage1.tar
d7c2a25e228a: Loading layer [==================================================>]  76.25MB/76.25MB  
Loaded image: newubuntu:latest
C:\Users\32631>docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
newubuntu           latest              d60aa43d53cf        22 minutes ago      73.9MB

eg2 :演示了以id形式导出的文件被导入后的镜像信息:

会发现镜像信息里头缺失了name和tag的信息

C:\Users\32631>docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
newubuntu           latest              d60aa43d53cf        22 minutes ago      73.9MB
C:\Users\32631>docker load -i outputimage.tar
2ce3c188c38d: Loading layer [==================================================>]  75.23MB/75.23MB
ad44aa179b33: Loading layer [==================================================>]  1.011MB/1.011MB
35a91a75d24b: Loading layer [==================================================>]  15.36kB/15.36kB
a4399aeb9a0e: Loading layer [==================================================>]  3.072kB/3.072kB
Loaded image ID: sha256:4e2eef94cd6b93dd4d794c18b45c763f72edc22858e0da5b6e63a4566a54c03c
C:\Users\32631>docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
newubuntu           latest              d60aa43d53cf        23 minutes ago      73.9MB
<none>              <none>              4e2eef94cd6b        10 days ago         73.9MB

 容器导入导出和镜像导入导出的区别

1、export命令导出的tar文件略小于save命令导出的

2、export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出

3、基于第二点,export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,这块内容在讲解Dockerfile的时候会细说),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。通过命令docker history name:tag可以查看  

建议

可以依据具体使用场景来选择命令

若是只想备份images,使用save、load即可

若是在启动容器后,容器内容有变化,需要备份,则使用export、import

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • Windows/Mac系统Docker方式安装Mysql(包含utf8)

    Windows/Mac系统Docker方式安装Mysql(包含utf8)

    本文主要介绍了Windows/Mac系统Docker方式安装Mysql(包含utf8),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • docker私有库的搭建实现

    docker私有库的搭建实现

    这篇文章主要介绍了docker私有库的搭建实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • docker离线安装并导入镜像过程

    docker离线安装并导入镜像过程

    这篇文章主要介绍了docker离线安装并导入镜像过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 解决使用Docker Compose管理容器的问题

    解决使用Docker Compose管理容器的问题

    在Docker Compose中,根据一个配置文件,将所有与应用系统相关的应用和对应的容器进行配置,再根据Docker Compose提供的命令进行启动,就可以解决上面说的多容器之间的复杂问题,感兴趣的朋友跟随小编一起看看吧
    2021-09-09
  • 私有云存储Minio Docker镜像无法启动,提示:Adding local Minio host to 'mc' configuration

    私有云存储Minio Docker镜像无法启动,提示:Adding local Minio

    使用Minio在本地搭建私有云存储时出现无法启动,查看日志频繁输出“Adding local Minio host to 'mc' configuration...”,然后停止了,本文给大家分享私有云存储Minio Docker镜像无法启动,提示:Adding local Minio host to 'mc' configuration,感兴趣的朋友一起看看吧
    2023-11-11
  • 详细讲解Docker虚拟化

    详细讲解Docker虚拟化

    本文详细讲解了Docker的虚拟化,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Docker网络IP地址冲突的解决方法

    Docker网络IP地址冲突的解决方法

    本文主要介绍了Docker网络IP地址冲突的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 再见 Docker如何5分钟转型 containerd

    再见 Docker如何5分钟转型 containerd

    这篇文章主要介绍了再见 Docker如何5分钟转型 containerd,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • docker network create命令的具体使用

    docker network create命令的具体使用

    docker network create命令用于创建一个新的网络连接,本文就来详细的介绍一下docker network create命令的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • docker容器时区错误问题

    docker容器时区错误问题

    常出现docker中运行的容器获取到的时间与北京时间相差8小时的问题,其实是因为容器运行的时区不正确。本文主要介绍了docker容器时区错误问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12

最新评论