目录
前言:
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'