小知识:Docker镜像与容器的导入导出操作实践

一、前言

随着容器技术的发展,现在很多的应用程序系统都会选择使用docker容器进行部署,但是有时候使用docker容器进行部署的时候会遇到问题,比如说我们的应用程序里面需要依赖其他第三方的镜像,如果这时候服务器是在内网不能连接外网的情况下,那么就无法部署了。基于这种情况,docker官方支持docker镜像和容器的导入和导出,我们可以在一台能够联网的机器上面编译镜像,然后导出镜像或者容器,最后把导出的镜像或者容器上传到内网服务器,然后在导入镜像或者容器,这样就可以了。

镜像和容器的导入、导出操作主要涉及到下面的几个命令:save、load、export、import。

演示过程中我们是在本地生成镜像或者容器,然后把镜像或者容器导出,最后上传到阿里云服务器演示导入功能。

我们使用VS 2019创建一个ASP.NET Core MVC的项目,添加Dockerfile文件:

# 使用运行时镜像 FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim # 设置工作目录 WORKDIR /app # 把目录下的内容都复制到当前目录下 COPY . . # 暴露80端口 EXPOSE 80 # 运行镜像入口命令和可执行文件名称 ENTRYPOINT [“dotnet”, “DockerDemo.dll”]

然后发布项目。我们查看现有的docker镜像

%小知识:Docker镜像与容器的导入导出操作实践-猿站网-插图

可以看到:现在只有两个.net core的镜像。我们生成镜像:

docker build -t dockerdemo .

如下图所示:

%小知识:Docker镜像与容器的导入导出操作实践-1猿站网-插图

查看生成后的镜像

%小知识:Docker镜像与容器的导入导出操作实践-2猿站网-插图

然后我们根据生成的镜像来运行容器,首先查看现有的容器:

%小知识:Docker镜像与容器的导入导出操作实践-3猿站网-插图

可以看到这时没有任何容器。我们运行容器:

%小知识:Docker镜像与容器的导入导出操作实践-4猿站网-插图

可以看到:容器已经运行成功了。

二、docker镜像的导入和导出

1、docker镜像的导出

涉及到的命令:

docker save [options] images [images…]

我们使用上面的镜像来演示镜像的导出:

docker save -o dockerdemo.tar dockerdemo

如下图所示:

%小知识:Docker镜像与容器的导入导出操作实践-5猿站网-插图

这里导出的时候指定了导出后文件的路径,如果不指定路径,默认是当前文件夹。

或者也可以使用下面的命令导出:

docker save > dockerdemo.tar dockerdemo

其中-o和>表示输出到文件,dockerdemo.tar为导出的目标文件,dockerdemo为源镜像名。

我们查看本地是否有了导出后的文件:

%小知识:Docker镜像与容器的导入导出操作实践-6猿站网-插图

可以看到目录下面已经有了刚才导出的文件。

2、docker镜像的导入

我们首先使用XFtp把上面导出的镜像文件上传到阿里云服务器

%小知识:Docker镜像与容器的导入导出操作实践-7猿站网-插图

然后进入文件所在的目录

%小知识:Docker镜像与容器的导入导出操作实践-8猿站网-插图

我们查看阿里云服务器上面有哪些镜像:

%小知识:Docker镜像与容器的导入导出操作实践-9猿站网-插图

从上图中看出:现在阿里云服务器上面没有任何的镜像。

涉及到的导入命令load

docker load [options]

接下来我们导入刚才上传的镜像。

docker load -i dockerdemo.tar

如下图所示:

%小知识:Docker镜像与容器的导入导出操作实践-10猿站网-插图

或者也可以使用下面的命令

docker load < dockerdemo.tar

其中-i(i即imput)和<表示从文件输入。上面的两个命令都会成功导入镜像以及相关元数据,包括tag信息。

导入后查看镜像:

%小知识:Docker镜像与容器的导入导出操作实践-11猿站网-插图

可以看到有了我们刚才导入的镜像。导入了镜像以后就可以根据镜像运行容器,最后运行应用程序。

三、docker容器的导入和导出

接下来我们演示容器的导入和导出。

1、docker容器的导出

涉及到的命令export。

docker export [options] container

我们把上面生成的容器导出:

docker export -o D:containersdockerdemocontainer.tar dockerdemo

如下图所示:

%小知识:Docker镜像与容器的导入导出操作实践-12猿站网-插图

其中,-o表示输出的文件,这里指定了输出的路径,如果没有指定路径,则默认生成到当前文件夹。dockerdemocontainer.tar为目标文件,dockerdemo为源容器名。

我们查看目录下面是否生成了导出的容器:

%小知识:Docker镜像与容器的导入导出操作实践-13猿站网-插图

2、docker容器的导入

我们首先把导出的容器使用XFTP上传到阿里云服务器。

%小知识:Docker镜像与容器的导入导出操作实践-14猿站网-插图

涉及到的导入命令import。

docker import [options] file|URL|- [REPOSITORY[:TAG]]

如下图所示

%小知识:Docker镜像与容器的导入导出操作实践-15猿站网-插图

我们导入刚才上传的容器

docker import [options] file|URL|- [REPOSITORY[:TAG]]

dockerdemocontainer.tar表示要导入的容器,dockerdemo:imp表示导入后的镜像名称,imp表示给导入的镜像打tag。

如下图所示

%小知识:Docker镜像与容器的导入导出操作实践-16猿站网-插图

然后我们查看镜像:

%小知识:Docker镜像与容器的导入导出操作实践-17猿站网-插图

可以看到这时有我们刚才导入的镜像了,导入的镜像tag为imp。

四、总结

下面我们来总结一下镜像和容器导入导出的区别:

镜像导入是一个复制的过程,容器导入是将当前容器变成一个新的镜像。 docker save命令保存的是镜像(image),docker export命令保存的是容器(container)。 export命令导出的tar文件略小于save命令导出的。 因为export导出的是容器,export导出的文件在import导入时,无法保留镜像所有的历史(即每一层layer信息),不能进行回滚操作。而save是根据镜像来的,所以导入时可以完整保留下每一层layer信息。如下图所示:dockerdemo:latest是save导出load导入的,dockerdemo:imp是export导出import导入的。

%小知识:Docker镜像与容器的导入导出操作实践-18猿站网-插图

docker load不能对导入的镜像重命名,而docker import导入可以为镜像指定新名称。例如,上面导入的时候指定dockerdeom:imp。

对于是使用镜像导入导出还是使用容器导入导出该如何选择呢?有下面两点建议:

若是只想备份image,使用save和load。 若是在启动容器后,容器内容有变化,需要备份,则使用export和import。 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文地址:https://www.cnblogs.com/dotnet261010/p/13283176.html

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:关于k8s 使用 Service 控制器对外暴露服务的问题

2023-3-8 18:14:33

建站知识

小知识:Docker向数据卷Volume写入数据

2023-3-8 18:29:31

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索