首頁  >  文章  >  運維  >  docker鏡像匯入和匯出是什麼意思

docker鏡像匯入和匯出是什麼意思

WBOY
WBOY原創
2022-03-08 10:47:556241瀏覽

在docker中,映像導入是利用「load [options]」指令,將目前映像複製出一個新的映像;鏡像匯出是利用「save [options]  images」指令,保存包含歷史在內的鏡像所有的訊息。

docker鏡像匯入和匯出是什麼意思

本教學操作環境:linux7.3系統、docker-1.13.1版、Dell G3電腦。

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映像

可以看到:現在只有兩個.net core的映像。我們產生鏡像:

 docker build -t dockerdemo .

如下圖所示:

#查看生成後的映像

# #然後我們根據生成的鏡像來運行容器,首先查看現有的容器:

#可以看到這時沒有任何容器。我們運行容器:

可以看到:容器已經運行成功了。

二、docker映像的匯入和匯出

1、docker映像的匯出

涉及的命令:

docker save [options]  images [images...]
我們使用上面的映像來演示鏡像的導出:

docker save -o dockerdemo.tar  dockerdemo
如下圖所示:

這裡導出的時候指定了導出後文件的路徑,如果不指定路徑,默認是目前資料夾。 

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

docker save > dockerdemo.tar dockerdemo
其中-o和>表示輸出到文件,dockerdemo.tar為導出的目標文件,dockerdemo為來源映像名。

我們查看本機是否有了匯出的檔案:

可以看到目錄下面已經有了剛剛匯出的檔案。

2、docker映像的導入

我們先使用XFtp把上​​面匯出的映像檔上傳到阿里雲伺服器

然後進入檔案所在的目錄 

我們檢視阿里雲端伺服器上面有哪些鏡像:

##從上圖看出:現在阿里雲伺服器上面沒有任何的鏡像。

涉及的導入指令load

docker load [options]

接下來我們導入剛才上傳的鏡像。

docker load -i dockerdemo.tar

如下圖所示:

或也可以使用下面的命令

docker load < dockerdemo.tar

其中-i(i即imput)和<表示從文件輸入。上面的兩個指令都會成功導入鏡像以及相關元數據,包括tag資訊。

導入後查看鏡像:

可以看到有了我們剛剛導入的鏡像。導入了鏡像以後就可以根據鏡像運行容器,最後運行應用程式。

三、docker容器的匯入和匯出

接下來我們示範容器的匯入和匯出。

1、docker容器的匯出

所涉及的指令export。

docker export [options]  container

我們把上面產生的容器匯出:

docker export -o D:\containers\dockerdemocontainer.tar dockerdemo

如下圖所示:

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

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

2、docker容器的导入

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

涉及到的导入命令import。

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

如下图所示

我们导入刚才上传的容器

docker import dockerdemocontainer.tar dockerdemo:imp

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

如下图所示

然后我们查看镜像:

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

四、总结

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

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

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

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

推荐学习:《docker视频教程

以上是docker鏡像匯入和匯出是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn