运维开发网

码头工人形象与集装箱进出口操作实务

运维开发网 https://www.qedev.com 2022-04-29 15:05 出处:网络
这篇文章介绍了Docker镜像与容器的导入导出操作,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

这篇文章介绍了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。

这就是本文的全部内容。希望对大家的学习有帮助,也希望大家能支持一下搜源网。


0

精彩评论

暂无评论...
验证码 换一张
取 消