目录

前言:

1.docker镜像的导入和导出

1.1 docker镜像的导出

1.2 docker镜像的导入

2.docker容器的导入和导出

2.1 docker容器的导出

2.2 docker容器的导入

3. 总结

4.使用建议

5.遇到问题


前言:

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

1.docker镜像的导入和导出

1.1 docker镜像的导出

  • 命令:
docker save [options] images [images……]
  • 使用命令:
docker  save  -o  /home/dockeruser/lgr/epower.tar   b10e

     或

docker save  >   /home/dockeruser/lgr/epower.tar    b10e
  • 解释:
-o(即output)或>表示输出到文件; 
/home/dockeruser/lgr/epower.tar指定导出的位置路径,如果不指定路径,默认为当前文件夹;

b10e为源镜像id;

1.2 docker镜像的导入

首先需要使用xftp或其他工具将上面的.tar文件上传到需要导入镜像的服务器中。

  • 命令:
docker load [options]
  • 使用命令:
docker l oad  -i   epower.tar

 或

docker  load   <  epower.tar
  • 解释:

-i(即input)或<表示从文件输入;

使用docker images命令可以查看是否导入成功,导入成功就可以根据镜像运行容器;

由于load命令不能对镜像重命名,我们可以使用docker tag 镜像id  镜像新名称:新tag

2.docker容器的导入和导出

2.1 docker容器的导出

  • 命令:
docker export [options] container
  • 使用命令:
docker export -o /home/dockeruser/lgr/econtainer.tar 0a64dafa5db9
  • 解释:

-o表示输出到文件;

/home/dockeruser/lgr/econtainer.tar指定导出的位置路径;

0a64dafa5db9为容器id;

2.2 docker容器的导入

首先需要使用xftp或其他工具将上面的.tar文件上传到需要导入镜像的服务器中。

  • 命令:
docker import [options] file|url| -[repository[:tag]]
  • 使用命令:

 docker  import  econtainer.tar  epower:latest 

  • 解释:

econtainer.tar表示导入的容器;

epower:latest表示给导入后的镜像进行重命名,latest表示给导入的镜像打tag;

使用docker images命令可以查看是否导入成功,导入成功就可以根据镜像运行容器;

3. 总结

  • 镜像导入是一个复制的过程;容器的导入是将当前容器变成一个新的镜像
  • docker save命令保存的是镜像;docker export命令保存的是容器;
  • export命令导出的tar文件略小于save命令导出的;
  • export命令导出的是容器,export导出的文件在import导入时,无法保留镜像的所有历史(即每一层layer信息),也就不能进行回滚操作。而save命令导出的是镜像,所以导入时可以完整保留每一层layer信息。docker history 镜像id命令可以查询每一层layer信息。
  • load命令不能对镜像重命名;import命令可以对镜像重命名;

4.使用建议

如果只是为了备份镜像,则使用save和load命令;

如果在启动容器后,容器内容有变化之后需要备用,则使用export和import命令;

5.遇到问题

  • 问题:

在使用export命令导出容器,import导入为镜像后,使用命令

docker run -p 8812:8889 --name xxx -d 753

报错如下:

docker: Error response from daemon: No command specified.
See 'docker run --help'.

错误提示缺少明确的命令;

  • 解决方法: 

在导出容器的服务器使用docker ps ---no-trunc命令查看具体的command,然后将command加入到启动命令最后即可。

docker run -p 8812:8889 --name xxx -d 753 /bin/sh  -c 'java -Duser.timezone=Asia/Shanghai -cp /app/resources:/app/classes:/app/libs/* com.fp.epower.EpowerApplication'