docker启动postgis(arm和x86通用)以及整体备份恢复的方法
镜像版本
arm64版本
镜像版本
duvel/postgis:12-2.5-arm64
创建docker数据卷, 名称为pg_data
docker volume create --name pg_data
运行pg镜像, 挂载数据卷
docker run -itd --name pg12.4_2.5.5 --restart always -e POSTGRES_USER='postgres' -e POSTGRES_PASSWORD=123456 -e ALLOW_IP_RANGE=0.0.0.0/0 -p 5432:5432 -v pg_data:/var/lib/postgresql/data duvel/postgis:12-2.5-arm64
x86_64版本(步骤跟arm版本一样)
镜像版本
kartoza/postgis:9.6-2.4
创建docker数据卷, 名称为pg_data
docker volume create --name pg_data
运行pg镜像, 挂载数据卷
docker run -itd --name postgresql --restart always -e POSTGRES_USER='postgres' -e POSTGRES_PASSWORD=123456 -e ALLOW_IP_RANGE=0.0.0.0/0 -p 5432:5432 -v pg_data:/var/lib/postgresql/data kartoza/postgis:9.6-2.4
数据卷备份与恢复
备份pg数据库的数据库体
备份pg容器实例的数据卷
- 运行一个ubuntu镜像(当然也可以运行别的镜像, 能运行tar命令就行), 利用volumes-from继承运行的名称为pg12.4_2.5.5容器的数据卷, 运行完自动删除ubuntu镜像实例
- 继承pg12.4_2.5.5容器的数据卷后就会在运行的容器内部自动挂载pg12.4_2.5.5容器所有的数据卷, 就可以访问/var/lib/postgresql/data目录了
- $(pwd)指代当前命令行位置, 将当前位置挂载为容器里的/backup目录, 执行完成后会在当前目录下生成备份包
- 最终会将容器内的/var/lib/postgresql/data目录压缩成tar包放在容器内的/backup/data.tar, 也就物理机上当前命令行所在目录下的data.tar(这里并没有做压缩 仅仅是打包)
具体命令如下
docker run --rm --volumes-from pg12.4_2.5.5 -v $(pwd):/backup ubuntu tar cvf /backup/data.tar /var/lib/postgresql/data/ -N 2000
-N 2000 设置pg最大连接数, -N必须放在命令最后
--rm 运行完自动删除
--volumes-from数据卷继承
-v挂载目录
数据卷恢复
通过备份数据卷最终得到了一个data.tar包
现在我们要恢复tar包数据, 原理很简单, 就是将data.tar包解压出来, 这里假设是恢复到另一台新的服务器上
步骤:
- 创建一个数据卷,名称叫做 lv_data, 名称可以改成别的, 看业务需求
docker volume create --name lv_data
可以通过命令查看创建的数据卷信息
docker volume inspect lv_data
删除命令(谨慎使用):
docker volume rm lv_data
- cd到data.tar包所在目录
- 执行恢复命令, 这里同样借助了Ubuntu镜像作为临时容器
docker run --rm -v $(pwd):/backup -v lv_data:/data_dir ubuntu tar xvf /backup/data.tar --strip-components 4 -C /data_dir/
说明:
将当前命令行所在目录映射为容器的/backup目录
将创建的空数据卷lv_data映射为容器的/data_dir目录
将 /backup/data.tar解压到/data_dir也就是lv_data里
--strip-components 4是指解压的时候要把备份时带的这四级目录(var/lib/postgresql/data/)给去掉
- 数据卷恢复完毕后就可以运行pg镜像了, 关键操作就是将lv_data挂载成pg的/var/lib/postgresql/data目录, 并且备份的和要恢复时执行的镜像版本要一致
测试命令:
docker run -itd --name test_pg -e POSTGRES_USER='postgres' -e POSTGRES_PASSWORD=123456 -e ALLOW_IP_RANGE=0.0.0.0/0 -p 5433:5432 -v lv_data:/var/lib/postgresql/data duvel/postgis:12-2.5-arm64
- 测试连接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现