Docker镜像与容器的导入导出操作实践

目录
  • 一、前言
  • 二、docker镜像的导入和导出
    • 1、docker镜像的导出
    • 2、docker镜像的导入
  • 三、docker容器的导入和导出
    • 1、docker容器的导出
    • 2、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 [options] file|URL|- [REPOSITORY[:TAG]]

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

如下图所示

然后我们查看镜像:

可以看到这时有我们刚才导入的镜像了,导入的镜像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 load不能对导入的镜像重命名,而docker import导入可以为镜像指定新名称。例如,上面导入的时候指定dockerdeom:imp。

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

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

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

(0)

相关推荐

  • Docker容器的导入导出操作教程

    背景 Docker的流行与它对容器的易分享和易移植密不可分,用户不仅可以把容器提交到公共服务器上,还可以把容器导出到本地文件系统中.同样,我们也可以把导出的容器重新导入到Docker运行环境中. 方法1:容器的导入与导出(export和import) 1.查看需要导出的容器 docker ps -a 2.导出export 导出后的tar文件传输至待导入机器上 docker export 容器名或者容器ID > 导出的路径以及tar包的名字 docker export centos> cento

  • Docker镜像的导入导出代码实例

    Docker镜像的导入导出 本文介绍Docker镜像的导入导出,用于迁移.备份.升级等场景,准备环境如下: CentOS 7.0 Docker 1.18 导入导出命令介绍 涉及的命令有export.import.save.load save 命令 docker save [options] images [images...] 示例 docker save -o nginx.tar nginx:latest 或 docker save > nginx.tar nginx:latest 其中-o和

  • docker镜像导入导出备份迁移的操作

    导出: docker save -o centos.tar centos:latest #将centos:latest镜像导出为centos.tar文件 导入: docker load -i centos.tar #加载centos.tar,加载后的镜像各标签与原导出的镜像标签相同 补充知识:docker将镜像保存为tar文件 将单个文件保存为tar文件,并加载到本地 docker save ****.v1 > images.tar docker load < images.tar 将多个文件

  • 导出与导入Docker的容器实现示例

    目录 Docker容器的导出 Docker容器的导入 本文主要讲解Docker容器的导入与导出,可以用作容器快照的备份. Docker容器的导出 1.首先使用命令查看已经创建的Docker容器 docker ps -a 这个时候可以看到container id也就是容器ID,我们只要根据容器ID就能导出相应的容器 2.导出某个容器 导出某个容器,非常简单,使用docker export命令,语法:docker export $container_id > 容器快照名 3.查看导出的容器 ls 4

  • Docker镜像的导入导出的实现方法

    本文介绍Docker镜像的导入导出,用于迁移.备份.升级等场景,准备环境如下: CentOS 7.0 Docker 1.18 导入导出命令介绍 涉及的命令有export.import.save.load save 命令 docker save [options] images [images...] 示例 docker save -o nginx.tar nginx:latest 或 docker save > nginx.tar nginx:latest 其中-o和>表示输出到文件,ngin

  • docker实践之容器的导入与导出

    前言 Docker的流行与它对容器的易分享和易移植密不可分.用户不仅可以把容器提交到公共服务器上,还可以将容器导出到本地文件系统中.同样,我们也可以将导出的容器重新导入到Docker环境中去. 如果要导出本地某个容器,可以使用 Docker export 命令,可以使用 docker import 从容器快照文件中再导入为镜像 1.首先查找正在运行的容器ID 2.然后使用 docker export 命令将容器导出(这里以GWAS_HF容器为例) 3.查看导出结果,scp命令传输到另一台服务器

  • docker实现导出、导入和数据搬迁

    docker 导出 导入有二种,一种是备份镜像,一种备份容器.数据搬迁,最简单粗暴就是直接COPY,volume的路径就行了. 一,导出导入镜像 #导出为tar docker save #ID or #Name > /home/save.tar #导入tar docker load < /home/save.tar 二,导出导入容器 #导出为tar docker export #ID or #Name > /home/export.tar #导入tar cat /home/export.

  • docker镜像的导入和导出的实现

    gitlab 的docker使用 gitlab docker 启动命令 docker run -d -p 3000:80 twang2218/gitlab-ce-zh:9.0.3 docker run -d -p 8080:80 gitlab/gitlab-ce:latest 将容器修改提交到镜像 # 进入容器内部 [root@#localhost docker]# docker run -ti ubuntu:14.04 /bin/bash root@812a997f614a:/# id uid

  • Docker镜像导出与导入与拷贝实例分析

    第一种解决方案是,将镜像推送到公有的镜像仓库,然后pull下来 第二种,将镜像打包,然后拷贝到第二台服务器中 #将镜像存储 docker save gateway:latest > /home/gateway.tar 将gateway.tar复制到需要的服务器上,然后在服务器上导入该镜像文件 #导入镜像文件 docker load --input /root/docker-images/nginx.tar 或者通过符号的方式来导入 docker load < /root/docker-imag

  • 在 docker 之间导出导入镜像的方法

    很喜欢玩docker,但最新遇到一个问题,公司给的新机器的dns有问题,导致pull不下来镜像. 没办法了,没有镜像什么神马都干不了,又不能花很多时间去搭建私有的镜像库,只有另寻办法了. 废话少说,经过探究,发现 docker 提供把镜像导出export(保存save)为文件的机制,这样就可以把镜像copy到任意地方了. 1. 导出 export - 导入 import 格式:docker export CONTAINER(容器) 使用 docker ps -a 查看本机已有的容器,如: 我们使

随机推荐