?本系列主要是介紹基于pg10版本的日志備份技術(shù),如何實現(xiàn)自動日志備份(主要是筆者業(yè)務(wù)上有這種功能,嘗試了幾天幾夜,特此記錄下),本篇文章是docker篇,主要介紹如何配置pg官方提供的鏡像,為后面的自動備份做準(zhǔn)備。
?如果你還不了解pg的備份,請看pg單機自動化日志備份系列一
?自動備份最終效果:

? 就是要支持手動/自動進行全量備份和差異備份。
?一、基礎(chǔ)準(zhǔn)備
?1、由于pg數(shù)據(jù)庫和server端程序?qū)⑹褂胐ocker進行部署,pg使用鏡像:docker pull postgres:10。
?2、根據(jù)1的描述,相當(dāng)于數(shù)據(jù)庫pg和server程序在不同的機器上,所以server端需要在數(shù)據(jù)庫pg端進行某些shell命令,這里我們使用ssh進行。
?二、待解決的難點問題
?1、在pg鏡像和server端鏡像里都要內(nèi)置ssh(后續(xù)我們只討論pg鏡像里的環(huán)境準(zhǔn)備)。
?2、配置ssh免登錄。
?3、從pg單機自動化日志備份系列一文章里,可以知道執(zhí)行備份時,會需要postgres的權(quán)限,以及pg數(shù)據(jù)庫的一些配置文件的權(quán)限也需要正確配置。
?以上大概算是本篇文章將要討論的一些東西。在進行解決具體問題前,需要先和大伙稍微了解一下docker里的ENTRYPOINT和CMD兩條指令。
通常一個docker鏡像只會有一個后臺守護進程,通俗來說,就是一個鏡像對應(yīng)一個程序。所以通常我們在制作鏡像時,都會在Dockerfile里最后一行加一條CMD指令,CMD的內(nèi)容便是我們通常啟動某個服務(wù)的shell命令。

如上圖所示,就是在使用鏡像時,通過紅框的命令啟動pg數(shù)據(jù)庫。
但是可以看到這個Dockerfile同時還有ENTRYPOINT指令,這個指令也是啟動程序,與CMD不同點在于,當(dāng)我們啟動一個鏡像時,其實最終是ENTRYPOINT指定的shell命令去決定這個鏡像會啟動什么樣的服務(wù),而CMD的shell命令會做為參數(shù)傳給ENTRYPOINT指定的shell。
而從圖中可以看到pg鏡像最終由docker-entrypoint.sh這個shell腳本來確定pg數(shù)據(jù)庫啟動數(shù)據(jù)庫時,對數(shù)據(jù)庫的一些初始化流程,而上面的問題也會圍繞這個腳本來進行解決。(當(dāng)然這個不一定是最好的解決辦法,所以都只是拋磚引玉)
?一、pg鏡像里內(nèi)置ssh,以及配置ssh在數(shù)據(jù)庫啟動時進行ssh啟動。
未完待續(xù)。。。