记录一次docker-postgres数据库迁移
开发
Dockerfile 多阶段构建
最近在手撕Gitea
源码的时候,发现项目的Dockerfile
里有这样的片段:
经过一些搜索,发现docker
支持多阶段构建。 所谓的多阶段构建就是在一个Dockerfile
里面,可以通过构建中间镜像,方便的利用各种现成的集成环境来编译最终运行环境需要的文件。
最终环境里面可以做到非常干净,只有最终运行需要的文件,而不需要安装编译环境。
Docker版本过低和CentOS系统停止维护
我修改完我的Dockerfile
,同时重构了一下我的网站项目结构,把前端和后端放进一个代码仓库里。 在推送到服务器后,意外的发现由于我的Docker
版本过低,导致我的项目无法正常构建。
而且从我的版本更新到最新的Docker
版本需要卸载就版本再装新版本,我的网站的数据都在Docker
数据卷里,直接重装不太可能会有好结果。 正好最近CentOS
系统宣布停止维护。一个停止维护的系统bug一定会越来越多,软件支持率也会越来越低。 所以我决定不如换一个Ubuntu
服务器吧。
野生运维之路
更换服务器意味着数据备份与恢复,不像在普通的系统里,将数据拖进拖出U盘里就叫备份和恢复。 在Docker
里,数据是放在Docker
数据卷里,并在容器启动时动态挂载到指定的容器上。 如何将它从数据卷里取出来再放回去,是一门艺术。
大致的过程可以分为,先将静态的文件打包并压缩,
backup.sh
对于数据库文件,不要直接拷贝,而是利用用数据库对应的备份恢复命令。我使用的是PostgreSQL
。
备份完了文件,可以使用scp
命令直接将文件传输到新服务器
不放心也可以先拷到自己电脑里一份
当然要运行这两条命令,你需要先设置好登陆密钥对。
传输好了备份文件,终于可以在新服务器上恢复数据了。 在新服务器上构建好容器之后,先不急启动容器。 容器启动之后难免有新数据产生,特别是数据库,容器启动之后再恢复很有可能起冲突。
restore.sh
这时候再启动容器,就跟在旧服务器上感觉一模一样啦!
优化过程,享受生活
在实际情况下,这些脚本都保存在文件里,可以直接执行,也可以利用GNUMake
的Makefile
编写脚本的具体行逻辑。
有人会说Makefile
又是什么东西?如果说.sh
文件的作用是把linux shell
命令扎堆执行,那么Makefile
就是更加花里胡哨的shell
命令执行器。
你可以编写文件让一系列又臭又长的shell
命令只用一两个单词就按你的要求执行。这时候终于可以喝杯咖啡了。
标签:
上一篇
下一篇