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容器实例的数据卷

  1. 运行一个ubuntu镜像(当然也可以运行别的镜像, 能运行tar命令就行), 利用volumes-from继承运行的名称为pg12.4_2.5.5容器的数据卷, 运行完自动删除ubuntu镜像实例
  2. 继承pg12.4_2.5.5容器的数据卷后就会在运行的容器内部自动挂载pg12.4_2.5.5容器所有的数据卷, 就可以访问/var/lib/postgresql/data目录了
  3. $(pwd)指代当前命令行位置, 将当前位置挂载为容器里的/backup目录, 执行完成后会在当前目录下生成备份包
  4. 最终会将容器内的/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包解压出来, 这里假设是恢复到另一台新的服务器上
步骤:

  1. 创建一个数据卷,名称叫做 lv_data, 名称可以改成别的, 看业务需求
docker volume create --name lv_data

可以通过命令查看创建的数据卷信息

docker volume inspect lv_data

image.png
删除命令(谨慎使用):

docker volume rm lv_data
  1. cd到data.tar包所在目录
  2. 执行恢复命令, 这里同样借助了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/)给去掉

  1. 数据卷恢复完毕后就可以运行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
  1. 测试连接

image.png

posted @ 2022-03-23 10:27  iminifly  阅读(640)  评论(0编辑  收藏  举报