这篇文章介绍了Docker镜像与容器的导入导出操作,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
一、前言
随着容器技术的发展,现在很多应用系统都选择使用Docker容器进行部署,但是有时候使用Docker容器进行部署会出现问题。例如,我们的应用程序需要依赖其他第三方的图像。如果此时服务器没有连接到外部网络,则无法部署它。基于这种情况,docker官方支持docker镜像和容器的导入和导出。我们可以在联网的机器上编译图像,然后导出图像或容器,最后将导出的图像或容器上传到内部网服务器,然后导入图像或容器。就是这样。
而图像容器的导入导出操作主要涉及到以下命令:保存、加载、导出、导入。
演示过程中,我们在本地生成图片或容器,然后导出图片或容器,最后上传到阿里云服务器演示导入功能。
我们使用VS 2019创建一个ASP.NET核心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 build -t dockerdemo .
如下图所示:
查看生成的图像。
然后我们根据生成的图像运行容器,首先看看现有的容器:
您可以看到此时没有容器。我们运行容器:
如您所见,容器已经成功运行。
二、docker镜像的导入和导出
1、docker镜像的导出
涉及的命令:
docker save [options] images [images...]
我们使用上面的图像来演示图像的导出:
docker save -o dockerdemo.tar dockerdemo
如下图所示:
在此导出时,会指定导出文件的路径。如果未指定路径,则默认为当前文件夹。
或者您可以使用以下命令将其导出:
docker save gt; dockerdemo.tar dockerdemo
其中-o和gt;输出到文件,dockerdemo.tar是导出的目标文件,dockerdemo是源图像名称。
让我们看看本地是否有导出的文件:
可以看到目录下已经有了刚刚导出的文件。
2、docker镜像的导入
首先,我们使用XFtp将上面导出的图片文件上传到阿里云服务器。
然后输入文件所在的目录。
我们来看看阿里云服务器上有哪些图片:
从上图可以看出,阿里云服务器上没有图像。
涉及的导入命令加载
docker load [options]
接下来,我们导入刚刚上传的图像。
docker load -i dockerdemo.tar
如下图所示:
或者您可以使用下面的命令。
docker load lt; dockerdemo.tar
其中-i(i为输入)和lt;指示来自文件的输入。以上两个命令将成功导入图像和相关元数据,包括标记信息。
导入后查看图像:
您可以看到这是我们刚刚导入的图像。导入映像后,可以根据映像运行容器,最后运行应用程序。
三、Docker容器的导入和导出
接下来,我们将演示容器的导入和导出。
1、Docker容器的导出
涉及的命令导出。
docker export [options] container
我们导出上面生成的容器:
docker export -o D:\containers\dockerdemocontainer.tar dockerdemo
如下图所示:
其中-o表示输出文件,输出路径在这里指定。如果没有指定路径,默认情况下会生成到当前文件夹。Dockerdemocontainer.tar是目标文件,dockerdemo是源容器名。
让我们看看导出的容器是否是在目录下生成的:
2、Docker容器的导入
首先,我们使用XFTP将导出的容器上传到阿里云服务器。
涉及导入命令导入。
docker import [options] file|URL|- [REPOSITORY[:TAG]]
如下图所示
我们导入刚刚上传的容器。
docker import [options] file|URL|- [REPOSITORY[:TAG]]
Dockerdemocontainer.tar表示要导入的容器,dockerdemo:imp表示导入的图像的名称,imp表示标记导入的图像。
如下图所示
然后我们看着镜子:
可以看到有我们刚刚导入的图片,导入的图片标签是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 load无法重命名导入的镜像,而Dockerload import可以为镜像指定新名称。例如,上面在导入时指定了dockerdeom:imp。
如何选择是用镜像还是用容器导入导出?有两个建议:
若是只想备份image,使用save和load。若是在启动容器后,容器内容有变化,需要备份,则使用export和import。
这就是本文的全部内容。希望对大家的学习有帮助,也希望大家能支持一下搜源网。
精彩评论