本系列主要是介绍基于pg10版本的日志备份技术,如何实现自动日志备份(主要是笔者业务上有这种功能,尝试了几天几夜,特此记录下),本篇文章是docker篇,主要介绍如何配置pg官方提供的镜像,为后面的自动备份做准备。
如果你还不了解pg的备份,请看pg单机自动化日志备份系列一
自动备份最终效果:
就是要支持手动/自动进行全量备份和差异备份。
一、基础准备
1、由于pg数据库和server端程序将使用docker进行部署,pg使用镜像:docker pull postgres:10
。
2、根据1的描述,相当于数据库pg和server程序在不同的机器上,所以server端需要在数据库pg端进行某些shell命令,这里我们使用ssh进行。
二、待解决的难点问题
1、在pg镜像和server端镜像里都要内置ssh(后续我们只讨论pg镜像里的环境准备)。
2、配置ssh免登录。
3、从pg单机自动化日志备份系列一文章里,可以知道执行备份时,会需要postgres的权限,以及pg数据库的一些配置文件的权限也需要正确配置。
以上大概算是本篇文章将要讨论的一些东西。在进行解决具体问题前,需要先和大伙稍微了解一下docker里的ENTRYPOINT
和CMD
两条指令。
通常一个docker镜像只会有一个后台守护进程,通俗来说,就是一个镜像对应一个程序。所以通常我们在制作镜像时,都会在Dockerfile
里最后一行加一条CMD
指令,CMD
的内容便是我们通常启动某个服务的shell
命令。
如上图所示,就是在使用镜像时,通过红框的命令启动pg数据库。
但是可以看到这个Dockerfile同时还有ENTRYPOINT
指令,这个指令也是启动程序,与CMD
不同点在于,当我们启动一个镜像时,其实最终是ENTRYPOINT
指定的shell
命令去决定这个镜像会启动什么样的服务,而CMD
的shell
命令会做为参数传给ENTRYPOINT
指定的shell
。
而从图中可以看到pg镜像最终由docker-entrypoint.sh
这个shell
脚本来确定pg数据库启动数据库时,对数据库的一些初始化流程,而上面的问题也会围绕这个脚本来进行解决。(当然这个不一定是最好的解决办法,所以都只是抛砖引玉)
一、pg镜像里内置ssh,以及配置ssh在数据库启动时进行ssh启动。
未完待续。。。