通過Dockerfile構(gòu)建Postgres集成鏡像(包含postgis康聂、timescaledb以及pg_cron插件)

由于業(yè)務(wù)需要,需要使用到postgres數(shù)據(jù)庫的postgis胞四、timescaledb以及pg_cron插件恬汁,又因線上環(huán)境數(shù)據(jù)庫使用docker部署,故需要部署手動構(gòu)建鏡像辜伟。

  1. 編寫Dockerfile
# 使用 PostgreSQL 16.2 作為基礎(chǔ)鏡像
FROM postgres:16.2

# 安裝必要的依賴
RUN apt-get update && \
    apt-get install -y gnupg postgresql-common apt-transport-https lsb-release wget && \
    rm -rf /var/lib/apt/lists/*

# 使用清華大學(xué)的 Debian 鏡像源
RUN echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main non-free contrib" > /etc/apt/sources.list && \
    echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian-security/ bookworm-security main" >> /etc/apt/sources.list && \
    echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main" >> /etc/apt/sources.list

# 添加 TimescaleDB 倉庫
RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/timescale.keyring] https://packagecloud.io/timescale/timescaledb/debian/ $(lsb_release -c -s) main' > /etc/apt/sources.list.d/timescaledb.list" && \
    wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | gpg --dearmor -o /usr/share/keyrings/timescale.keyring

# 添加 pg_cron 倉庫
RUN sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main' > /etc/apt/sources.list.d/pgdg.list" && \
    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql.gpg

# 導(dǎo)入缺失的公鑰
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7FCC7D46ACCC4CF8

# 更新包列表并安裝插件
RUN apt-get update && \
    apt-get install -y timescaledb-2-postgresql-16 postgresql-16-postgis-3 postgresql-16-cron && \
    rm -rf /var/lib/apt/lists/*

# 修改 PostgreSQL 配置以加載 TimescaleDB 和 pg_cron
RUN echo "shared_preload_libraries = 'timescaledb,pg_cron'" >> /usr/share/postgresql/postgresql.conf.sample

# 設(shè)置數(shù)據(jù)庫初始化腳本
COPY init-db.sh /docker-entrypoint-initdb.d/

# 設(shè)定容器啟動時的默認(rèn)命令
CMD ["postgres"]
  1. 編寫啟動腳本
#!/bin/bash
set -e

# 創(chuàng)建數(shù)據(jù)庫擴(kuò)展
echo "Creating extensions..."
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
    CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
    CREATE EXTENSION IF NOT EXISTS postgis;
    CREATE EXTENSION IF NOT EXISTS postgis_topology;
    CREATE EXTENSION IF NOT EXISTS pg_cron;
EOSQL

echo "Extensions created successfully."
  1. 將上面兩個文件放在同一個目錄下氓侧,并在該目錄下構(gòu)建鏡像
docker build -t wesafer-postgres:v2 .
  1. 啟動容器
docker run -d \
  --name postgres_db \
  -v /data/postgres_data:/var/lib/postgresql/data \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/timezone:/etc/timezone:ro \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=your_password\
  -e POSTGRES_DB=postgres \
  -p 5432:5432 \
  wesafer-postgres:v2
  1. 驗(yàn)證安裝
SELECT * FROM pg_extension;
image.png
  1. 導(dǎo)出及導(dǎo)入鏡像
# 導(dǎo)出鏡像導(dǎo)出為tar文件
docker save -o wesafer-postgres.tar wesafer-postgres:v2
# 在需要部署的環(huán)境導(dǎo)入該鏡像tar文件
docker load -i wesafer-postgres.tar

注意,pg_cron插件需要指定數(shù)據(jù)庫安裝导狡,默認(rèn)只能在postgres數(shù)據(jù)庫安裝约巷,如需變更需要修改postgresql.conf:

cron.database_name = 'your_database_name'  -- 這里需要指定一個數(shù)據(jù)庫名
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市旱捧,隨后出現(xiàn)的幾起案子独郎,更是在濱河造成了極大的恐慌,老刑警劉巖枚赡,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氓癌,死亡現(xiàn)場離奇詭異,居然都是意外死亡标锄,警方通過查閱死者的電腦和手機(jī)顽铸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來料皇,“玉大人谓松,你說我怎么就攤上這事星压。” “怎么了鬼譬?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵娜膘,是天一觀的道長。 經(jīng)常有香客問我优质,道長竣贪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任巩螃,我火速辦了婚禮演怎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘避乏。我一直安慰自己爷耀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布拍皮。 她就那樣靜靜地躺著歹叮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铆帽。 梳的紋絲不亂的頭發(fā)上咆耿,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機(jī)與錄音爹橱,去河邊找鬼萨螺。 笑死,一個胖子當(dāng)著我的面吹牛愧驱,可吹牛的內(nèi)容都是我干的屑迂。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼冯键,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了庸汗?” 一聲冷哼從身側(cè)響起惫确,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚯舱,沒想到半個月后改化,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枉昏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年陈肛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兄裂。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡句旱,死狀恐怖阳藻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谈撒,我是刑警寧澤腥泥,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站啃匿,受9級特大地震影響蛔外,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溯乒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一夹厌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧裆悄,春花似錦矛纹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钟哥,卻和暖如春迎献,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腻贰。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工吁恍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人播演。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓扇救,卻偏偏與公主長得像蔽氨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350