目录
场景
项目针对一家传统企业,服务器环境采用docker配置。企业的网络管理非常严格,对服务器对外的带宽也有限制,使用下载镜像images非常慢。想必使用docker部署环境都是常有docker pull去拉镜像,但是镜像有小有大,大的就不敢恭维了,迫于网络环境的影响,就发起了一个疑问,能不能通过安装包的形式装在images?
答案是肯定的,docker已经为我们考虑到了。
怎么做?
这里的基本步骤就是
1、将一台服务器的镜像或者容器打包成文件
2、上传至需要安装环境的服务器,通过存储介质或者FTP 还可以通过scp传输
例如scp mysql.tar.gz [email protected]:/backup/
3、装在docker打包的文件
经过以上步骤,镜像文件就可以通过docker images看到了
文中我会以mysql8进行举例
实战
docker的备份方式有export和save两种。
export是当前的状态,针对的是容器,docker save 是针对镜像images。
export
- docker ps 查看容器 查看哪个容器需要备份
- docker export 58ad41c4b855 >/lfback/mysql8.tar "lfback是我备份的路径,必须先创建,或者先进入这个目录"
- du -sh mysql8.tar "查看备份文件"
- 将备份文件传送到指定的服务器上
- cat mysql8.tar | docker import - mysql:8.0.13 "恢复备份"
save
- docker images "查看需要备份的镜像"
- docker save c0031e8d29df >mysql8.tar "备份mysql8镜像 docker save [imageId] >[备份文件名]
- 将备份文件传送到指定的服务器上
- docker load <mysql8.tar "加载备份"
- docker images "查看镜像列表"
区别
导出后再导入(exported-imported)的镜像会丢失所有的历史,而保存后再加载(saveed-loaded)的镜像没有丢失历史和层 (layer)。这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回 滚(可以执行docker tag <LAYER ID> <IMAGE NAME>来回滚之前的层)。
注意事项
- 前提是服务器必须按照docker环境 这里可以
参考 https://www.runoob.com/docker/centos-docker-install.html - 创建目录 mkdir -p /lfback 自定义,注意文件目录权限 可用chmod -R 777 /lfback
参考 https://www.runoob.com/linux/linux-comm-chmod.html - docker save &export
参考 https://www.runoob.com/docker/docker-save-command.html
参考 https://docs.docker.com/engine/reference/commandline/save/ - FTP安装
参考 https://www.cnblogs.com/leoxuan/p/8329998.html - 防火墙端口配置
参考 https://blog.csdn.net/qq_29102545/article/details/82381400
推荐