在 Docker 27.3.1 中安裝 PostgreSQL 16 的實踐

前言:為什么在 Docker 中部署 PostgreSQL?

在云原生時代,容器化部署已成為生產環境的首選方案。通過 Docker 部署 PostgreSQL 具有以下顯著優勢:

  • 環境一致性:消除“在我機器上能運行”的問題
  • 快速部署:秒級啟動數據庫實例
  • 資源隔離:精確控制 CPU、內存等資源
  • 簡化運維:版本升級、備份恢復更便捷
  • 高可移植性:輕松遷移到任何支持 Docker 的環境

本文將以 Docker 27.3.1PostgreSQL 16 為例,手把手教你完成部署。


一、環境準備

1. 確認 Docker 版本

docker --version
# Docker version 27.3.1, build a224086

💡 提示:如版本低于27.0,請先升級:官方升級指南

2. 創建專用網絡(生產環境必備)

docker network create pg-network

作用

  • 隔離數據庫流量
  • 避免端口沖突
  • 方便后續擴展(如連接應用容器)

二、PostgreSQL 16 容器化部署

1. 拉取官方鏡像(指定版本)

docker pull postgres:16

為什么指定版本?

  • 避免自動升級導致兼容性問題
  • 確保生產環境穩定性
  • PostgreSQL 16 是最新LTS版本(支持至2031年)

2. 創建持久化數據卷

docker volume create pgdata

生產環境重要性

  • 容器重啟/刪除時數據不丟失
  • 獨立于容器生命周期管理
  • 方便備份遷移

3. 啟動 PostgreSQL 容器(生產優化版)

docker run -d \--name prod-postgres \--network pg-network \-p 5432:5432 \-e POSTGRES_PASSWORD=Str0ngP@ss!2025 \-e POSTGRES_USER=prod_admin \-e POSTGRES_DB=production_db \-e TZ=Asia/Shanghai \-e POSTGRES_INITDB_ARGS="--data-checksums" \-v pgdata:/var/lib/postgresql/data \-v /etc/localtime:/etc/localtime:ro \--restart=unless-stopped \--memory=4g \--cpus=2 \--health-cmd="pg_isready -U prod_admin" \--health-interval=30s \--health-timeout=5s \--health-retries=3 \postgres:16 \-c max_connections=200 \-c shared_buffers=1GB

參數詳解

參數說明生產環境重要性
--network pg-network加入專用網絡????? 網絡安全隔離
-e POSTGRES_PASSWORD管理員密碼????? 必須使用強密碼
-e TZ=Asia/Shanghai設置時區???? 避免時間相關錯誤
-v pgdata:/var/...掛載數據卷????? 數據持久化
--restart=unless-stopped自動重啟策略???? 高可用保障
--memory=4g --cpus=2資源限制???? 防止單容器耗盡資源
--health-cmd健康檢查??? 自動故障檢測
-c max_connections=200最大連接數??? 根據業務需求調整
-c shared_buffers=1GB共享內存大小??? 性能優化關鍵參數

三、驗證與連接

1. 檢查容器狀態

docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"

預期輸出

CONTAINER ID  NAMES          STATUS                    PORTS
a1b2c3d4e5f6  prod-postgres  Up 2 minutes (healthy)   0.0.0.0:5432->5432/tcp

2. 查看實時日志

docker logs -f prod-postgres

關鍵日志確認

PostgreSQL init process complete; ready for start up
database system is ready to accept connections

3. 命令行連接測試

docker exec -it prod-postgres \psql -U prod_admin -d production_db -c "SELECT version();"

預期輸出

PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc...

4. 客戶端工具連接

使用 DBeaver/pgAdmin 連接:

  • Host: 服務器IP
  • Port: 5432
  • Database: production_db
  • Username: prod_admin
  • Password: Str0ngP@ss!2025

四、生產環境高級配置

1. 配置文件自定義

# 創建配置目錄
mkdir -p /docker/pg-config# 生成默認配置
docker run --rm postgres:16 \cat /usr/share/postgresql/postgresql.conf.sample > /docker/pg-config/postgresql.conf# 編輯配置文件(優化關鍵參數)
nano /docker/pg-config/postgresql.conf

關鍵參數建議

listen_addresses = '*'  # 允許所有網絡接口
max_connections = 250   # 根據實際負載調整
shared_buffers = 1GB    # 建議分配內存的25%
work_mem = 16MB         # 每個操作的內存
maintenance_work_mem = 512MB  # 維護操作內存
synchronous_commit = off  # 異步提交提升性能

重新啟動容器

docker run ... \-v /docker/pg-config/postgresql.conf:/etc/postgresql/postgresql.conf \postgres:16 -c 'config_file=/etc/postgresql/postgresql.conf'

2. 定期備份方案

創建備份腳本 (pg-backup.sh):

#!/bin/bash
BACKUP_DIR=/backups/pg
DATE=$(date +%Y%m%d_%H%M%S)docker exec prod-postgres \pg_dump -U prod_admin -Fc production_db > $BACKUP_DIR/prod_db_$DATE.dump# 保留最近7天備份
find $BACKUP_DIR -mtime +7 -delete

設置定時任務

crontab -e
# 每天凌晨2點備份
0 2 * * * /path/to/pg-backup.sh

3. 監控配置

使用內置統計收集器:

ALTER SYSTEM SET track_activities = on;
ALTER SYSTEM SET track_counts = on;
ALTER SYSTEM SET track_io_timing = on;
SELECT pg_reload_conf();

推薦監控工具:

  • Prometheus + Grafana(配合 postgres_exporter)
  • pgAdmin 4 監控面板
  • Datadog / New Relic

五、故障排查與維護

1. 常見問題解決

問題1:端口沖突

# 檢查占用5432端口的進程
sudo lsof -i :5432# 解決方案:改用其他端口
docker run ... -p 5433:5432 ...

問題2:忘記管理員密碼

# 進入容器bash
docker exec -it prod-postgres bash# 以postgres用戶連接
psql -U postgres# 重置密碼
ALTER USER prod_admin WITH PASSWORD 'NewStrongP@ss!2025';

問題3:磁盤空間不足

# 查看容器磁盤使用
docker system df# 清理無用容器/鏡像
docker system prune -f# 擴展數據卷
docker volume inspect pgdata # 找到實際路徑
# 然后擴展對應磁盤分區

2. 關鍵維護命令

查看資源使用

docker stats prod-postgres

進入維護模式

docker exec -it prod-postgres bash
psql -U prod_admin -d production_db

日志分析

docker logs --tail 100 prod-postgres | grep -i error

六、安全加固建議

  1. 網絡層安全

    # 限制訪問IP(僅允許應用服務器)
    docker network create --subnet=10.1.0.0/16 pg-secure-network
    
  2. SSL加密連接

    # 啟動容器時添加SSL參數
    -e POSTGRES_SSL=on \
    -e POSTGRES_SSL_CERT_FILE=/etc/ssl/certs/server.crt \
    -e POSTGRES_SSL_KEY_FILE=/etc/ssl/private/server.key
    
  3. 定期輪換憑證

    # 每月更新密碼
    ALTER USER prod_admin WITH PASSWORD 'NewP@ssw0rd_$(date +%Y%m)';
    
  4. 審計日志

    ALTER SYSTEM SET log_statement = 'all';
    SELECT pg_reload_conf();
    

結語:容器化數據庫的未來

通過 Docker 部署 PostgreSQL 不僅簡化了運維流程,還為現代化應用架構提供了堅實基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84311.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84311.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84311.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

日志混亂與數據不一致問題實戰排查:工具協同調試記錄(含克魔使用點)

日志調試、狀態驗證和數據一致性排查,是iOS開發中最費時間、最易出錯的工作之一。尤其是在模塊之間異步通信頻繁、本地緩存與遠程狀態需保持同步時,如果缺乏一套合適的流程與工具,開發人員極容易陷入“盲查狀態”。 在一次跨部門聯合開發的A…

Redis底層數據結構與內部實現

目錄 一、RedisDB結構 1、RedisDB在Redis實例中的位置 2、RedisDB結構與核心組件 二、RedisObject結構 1、核心數據結構 1.1 簡單動態字符串 (Simple Dynamic String - SDS) 1.2 字典 (Dict / Hash Table) 1.3 雙端鏈表 (Linked List) 1.4 跳躍表 (Skip List) 1.5 壓…

【項目實訓】【項目博客#07】HarmonySmartCodingSystem系統前端開發技術詳解(5.12-6.15)

【項目實訓】【項目博客#07】HarmonySmartCodingSystem系統前端開發技術詳解(5.12-6.15) 一、項目概述與目標 HarmonySmartCodingSystem是一個面向HarmonyOS開發者的智能編碼輔助平臺,旨在通過自然語言交互簡化開發流程,提供智能…

系統性能優化-2 CPU

系統性能優化-2 CPU 其實除了 CPU 的頻率,多核架構以及多 CPU 架構對系統運行的性能也是很大影響的,那么該如何充分利用 CPU 呢? CPU 架構 首先介紹一下當前主流的 CPU 架構,現在的系統基本都是多 CPU,一個 CPU 處理…

Docker Pull 相關配置指南

在Docker環境中,docker pull命令用于從Docker鏡像倉庫拉取鏡像。為了確保Docker鏡像能夠快速、穩定地拉取,配置 docker pull相關的設置是非常重要的。本文將詳細介紹如何配置Docker以優化 docker pull操作,涵蓋鏡像源配置、登錄私有倉庫、網絡…

Python的Matplotlib庫:從入門到精通的數據可視化實戰指南

💝💝💝歡迎蒞臨我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 持續學習,不斷…

CentOS查日志

在 CentOS 系統中,查看日志是系統維護和故障排查的重要技能。以下是常用的日志查看方法和工具: 1. 基本日志位置 CentOS 使用systemd管理服務,主要日志存儲在: /var/log/messages:系統主日志/var/log/secure&#x…

Linux運維新人自用筆記(用虛擬機Ubuntu部署lamp環境,搭建WordPress博客)

內容全為個人理解和自查資料梳理,歡迎各位大神指點! 每天學習較為零散。 day20 一、./configure 腳本命令 ./configure 是 Unix/Linux 系統中用于配置軟件源代碼的腳本命令,通常用于為后續的 make 和 make install 準備編譯環境。 選項作…

JetBrains 2025 全家桶 包含 IDEA、WebStorm、DataGrip、Pycharm、CLion、GoLand、PhpStorm

JetBrains 2025 全家桶 11合1 包含:IDEA、WebStorm、DataSpell、DataGrip、Pycharm、RustRover、CLion、Rider、PhpStorm、RubyMine、GoLand。 原文地址:JetBrains 2025 全家桶 11合1 含 IDEA、PyCharm、DataGrip、WebStrom、GoLand、CLion、PhpStorm、D…

【一手實測】字節豆包 1.6 + Trae + 火山 MCP + FaaS:AI云原生 Agent 開發部署全流程體驗!

原創 Aitrainee AI進修生 2025年06月13日 16:42 湖南 標題已修改 緣起 —— 火山引擎在 2025 原動力大會上,也端出了自家的豆包大模型:Doubao-Seed-1.6 系列。 這三兄弟都支持文本、圖片、視頻輸入,都帶著 256K 的長上下文。 Doubao-Seed-…

Vulkan學習筆記8—頂點輸入描述與頂點緩沖

一、著色器代碼更新及構建時自動編譯著色器腳本 用內存中的頂點緩沖區替換頂點著色器中硬編碼的頂點數據 之前的頂點著色器: #version 450layout(location 0) out vec3 fragColor;// 頂點數據硬編碼 vec2 positions[3] vec2[](vec2(0.0, -0.5),vec2(0.5, 0.5),…

Day04_數據結構(棧鏈棧循環隊列)

01.棧 main.c #include "stack.h" int main() { stack_p S(stack_p)create_stack(); //1.入棧 …

PyTorch 的 CUDA GPU 支持 · 安裝五條鐵律(最新版 2025 修訂)(適用于所有用戶)

相關參考資料(往期博客): 是否需要預先安裝 CUDA Toolkit?——按使用場景分級推薦及進階說明-CSDN博客 太方便,WIN系統CUDA12.4下使用conda便捷管理虛擬環境中的不同版本的CUDA、cuDNN、PyTorch-CSDN博客 好消息&#…

Django構建簡易視頻編輯管理系統

Django構建簡易視頻編輯管理系統 以下是基于Django構建簡易視頻編輯管理系統的可運行代碼框架,包含核心功能模塊和實現邏輯。該系統支持視頻上傳、基本剪輯操作和管理功能。 環境準備 安裝必要依賴包: pip install django pillow moviepy django-cri…

Java求職者面試題詳解:計算機網絡、操作系統、設計模式與數據結構

Java求職者面試題詳解:計算機網絡、操作系統、設計模式與數據結構 第一輪:基礎概念問題 1. 請解釋TCP和UDP的區別。 2. 什么是操作系統?它的主要功能是什么? 3. 請解釋設計模式中的單例模式,并給出一個實際應用的例…

【mysql】docker運行mysql8.0

背景 mariadb10.5.8報錯:Error 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘LIMIT ?’ at line 1 所以更換為mysql8.0.39試試 docker run啟動…

C#實現語音預處理:降噪/靜音檢測/自動增益

無論是在音視頻錄制系統,還是音視頻通話系統、或視頻會議系統中,對從麥克風采集到的說話的聲音數據進行預處理,都是是非常必要的。 語音數據預處理主要包括:??降噪(Noise Reduction)、靜音檢測&#xff0…

組合模式Composite Pattern

模式定義 又稱整體-部分模式 組合多個對象形成 樹形結構 以表示“整體-部分”的結構層次 組合模式對單個對象(即葉子對象)和組合對象(即容器對象)的使用具有一致性對象結構型模式 模式結構 Component:抽象構件Leaf&a…

商代大模型:智能重構下的文明曙光與青銅密碼

引言:技術奇點的歷史想象 在人類文明的長河中,技術的進步始終是推動社會變革的核心動力。從青銅冶煉到文字發明,從農業革命到工業革命,每一次技術飛躍都重塑了人類對世界的認知與生存方式。而如今,人工智能的崛起正以…

【Python】python系列之函數作用域

Python 系列文章學習記錄: Python系列之Windows環境安裝配置_開著拖拉機回家的博客-CSDN博客 Python系列之變量和運算符_開著拖拉機回家的博客-CSDN博客 Python系列之判斷和循環_開著拖拉機回家的博客-CSDN博客 Python系列之字符串和列表_開著拖拉機回家的博客…