Docker27.3.1中安裝 PostgreSQL16的實(shí)現(xiàn)步驟
前言:為什么在 Docker 中部署 PostgreSQL?
在云原生時(shí)代,容器化部署已成為生產(chǎn)環(huán)境的首選方案。通過(guò) Docker 部署 PostgreSQL 具有以下顯著優(yōu)勢(shì):
- 環(huán)境一致性:消除“在我機(jī)器上能運(yùn)行”的問(wèn)題
- 快速部署:秒級(jí)啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例
- 資源隔離:精確控制 CPU、內(nèi)存等資源
- 簡(jiǎn)化運(yùn)維:版本升級(jí)、備份恢復(fù)更便捷
- 高可移植性:輕松遷移到任何支持 Docker 的環(huán)境
本文將以 Docker 27.3.1 和 PostgreSQL 16 為例,手把手教你完成部署。
一、環(huán)境準(zhǔn)備
1. 確認(rèn) Docker 版本
docker --version # Docker version 27.3.1, build a224086
?? 提示:如版本低于27.0,請(qǐng)先升級(jí):官方升級(jí)指南
2. 創(chuàng)建專用網(wǎng)絡(luò)(生產(chǎn)環(huán)境必備)
docker network create pg-network
作用:
- 隔離數(shù)據(jù)庫(kù)流量
- 避免端口沖突
- 方便后續(xù)擴(kuò)展(如連接應(yīng)用容器)
二、PostgreSQL 16 容器化部署
1. 拉取官方鏡像(指定版本)
docker pull postgres:16
為什么指定版本?
- 避免自動(dòng)升級(jí)導(dǎo)致兼容性問(wèn)題
- 確保生產(chǎn)環(huán)境穩(wěn)定性
- PostgreSQL 16 是最新LTS版本(支持至2031年)
2. 創(chuàng)建持久化數(shù)據(jù)卷
docker volume create pgdata
生產(chǎn)環(huán)境重要性:
- 容器重啟/刪除時(shí)數(shù)據(jù)不丟失
- 獨(dú)立于容器生命周期管理
- 方便備份遷移
3. 啟動(dòng) PostgreSQL 容器(生產(chǎn)優(yōu)化版)
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
參數(shù)詳解:
| 參數(shù) | 說(shuō)明 | 生產(chǎn)環(huán)境重要性 |
|---|---|---|
| --network pg-network | 加入專用網(wǎng)絡(luò) | ????? 網(wǎng)絡(luò)安全隔離 |
| -e POSTGRES_PASSWORD | 管理員密碼 | ????? 必須使用強(qiáng)密碼 |
| -e TZ=Asia/Shanghai | 設(shè)置時(shí)區(qū) | ???? 避免時(shí)間相關(guān)錯(cuò)誤 |
| -v pgdata:/var/... | 掛載數(shù)據(jù)卷 | ????? 數(shù)據(jù)持久化 |
| --restart=unless-stopped | 自動(dòng)重啟策略 | ???? 高可用保障 |
| --memory=4g --cpus=2 | 資源限制 | ???? 防止單容器耗盡資源 |
| --health-cmd | 健康檢查 | ??? 自動(dòng)故障檢測(cè) |
| -c max_connections=200 | 最大連接數(shù) | ??? 根據(jù)業(yè)務(wù)需求調(diào)整 |
| -c shared_buffers=1GB | 共享內(nèi)存大小 | ??? 性能優(yōu)化關(guān)鍵參數(shù) |
三、驗(yàn)證與連接
1. 檢查容器狀態(tài)
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
預(yù)期輸出:
CONTAINER ID NAMES STATUS PORTS a1b2c3d4e5f6 prod-postgres Up 2 minutes (healthy) 0.0.0.0:5432->5432/tcp
2. 查看實(shí)時(shí)日志
docker logs -f prod-postgres
關(guān)鍵日志確認(rèn):
PostgreSQL init process complete; ready for start up database system is ready to accept connections
3. 命令行連接測(cè)試
docker exec -it prod-postgres \ psql -U prod_admin -d production_db -c "SELECT version();"
預(yù)期輸出:
PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc...
4. 客戶端工具連接
使用 DBeaver/pgAdmin 連接:
- Host: 服務(wù)器IP
- Port: 5432
- Database: production_db
- Username: prod_admin
- Password: Str0ngP@ss!2025
四、生產(chǎn)環(huán)境高級(jí)配置
1. 配置文件自定義
# 創(chuàng)建配置目錄 mkdir -p /docker/pg-config # 生成默認(rèn)配置 docker run --rm postgres:16 \ cat /usr/share/postgresql/postgresql.conf.sample > /docker/pg-config/postgresql.conf # 編輯配置文件(優(yōu)化關(guān)鍵參數(shù)) nano /docker/pg-config/postgresql.conf
關(guān)鍵參數(shù)建議:
listen_addresses = '*' # 允許所有網(wǎng)絡(luò)接口 max_connections = 250 # 根據(jù)實(shí)際負(fù)載調(diào)整 shared_buffers = 1GB # 建議分配內(nèi)存的25% work_mem = 16MB # 每個(gè)操作的內(nèi)存 maintenance_work_mem = 512MB # 維護(hù)操作內(nèi)存 synchronous_commit = off # 異步提交提升性能
重新啟動(dòng)容器:
docker run ... \ -v /docker/pg-config/postgresql.conf:/etc/postgresql/postgresql.conf \ postgres:16 -c 'config_file=/etc/postgresql/postgresql.conf'
2. 定期備份方案
創(chuàng)建備份腳本 (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
設(shè)置定時(shí)任務(wù):
crontab -e # 每天凌晨2點(diǎn)備份 0 2 * * * /path/to/pg-backup.sh
3. 監(jiān)控配置
使用內(nèi)置統(tǒng)計(jì)收集器:
ALTER SYSTEM SET track_activities = on; ALTER SYSTEM SET track_counts = on; ALTER SYSTEM SET track_io_timing = on; SELECT pg_reload_conf();
推薦監(jiān)控工具:
- Prometheus + Grafana(配合 postgres_exporter)
- pgAdmin 4 監(jiān)控面板
- Datadog / New Relic
五、故障排查與維護(hù)
1. 常見問(wèn)題解決
問(wèn)題1:端口沖突
# 檢查占用5432端口的進(jìn)程 sudo lsof -i :5432 # 解決方案:改用其他端口 docker run ... -p 5433:5432 ...
問(wèn)題2:忘記管理員密碼
# 進(jìn)入容器bash docker exec -it prod-postgres bash # 以postgres用戶連接 psql -U postgres # 重置密碼 ALTER USER prod_admin WITH PASSWORD 'NewStrongP@ss!2025';
問(wèn)題3:磁盤空間不足
# 查看容器磁盤使用 docker system df # 清理無(wú)用容器/鏡像 docker system prune -f # 擴(kuò)展數(shù)據(jù)卷 docker volume inspect pgdata # 找到實(shí)際路徑 # 然后擴(kuò)展對(duì)應(yīng)磁盤分區(qū)
2. 關(guān)鍵維護(hù)命令
查看資源使用:
docker stats prod-postgres
進(jìn)入維護(hù)模式:
docker exec -it prod-postgres bash psql -U prod_admin -d production_db
日志分析:
docker logs --tail 100 prod-postgres | grep -i error
六、安全加固建議
網(wǎng)絡(luò)層安全
# 限制訪問(wèn)IP(僅允許應(yīng)用服務(wù)器) docker network create --subnet=10.1.0.0/16 pg-secure-network
SSL加密連接
# 啟動(dòng)容器時(shí)添加SSL參數(shù) -e POSTGRES_SSL=on \ -e POSTGRES_SSL_CERT_FILE=/etc/ssl/certs/server.crt \ -e POSTGRES_SSL_KEY_FILE=/etc/ssl/private/server.key
定期輪換憑證
# 每月更新密碼 ALTER USER prod_admin WITH PASSWORD 'NewP@ssw0rd_$(date +%Y%m)';
審計(jì)日志
ALTER SYSTEM SET log_statement = 'all'; SELECT pg_reload_conf();
結(jié)語(yǔ):容器化數(shù)據(jù)庫(kù)的未來(lái)
通過(guò) Docker 部署 PostgreSQL 不僅簡(jiǎn)化了運(yùn)維流程,還為現(xiàn)代化應(yīng)用架構(gòu)提供了堅(jiān)實(shí)基礎(chǔ)。
到此這篇關(guān)于Docker27.3.1中安裝 PostgreSQL16的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Docker 安裝 PostgreSQL16內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 在 Docker 中安裝和運(yùn)行 PostgreSQL的詳細(xì)步驟
- docker安裝Postgresql數(shù)據(jù)庫(kù)及基本操作
- Docker Compose安裝部署PostgreSQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟
- Docker安裝PostgreSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟
- Docker如何安裝PostgreSQL
- docker如何安裝帶postgis插件的postgresql數(shù)據(jù)庫(kù)
- docker安裝postgresql的圖文教程
- docker安裝并持久化postgresql數(shù)據(jù)庫(kù)的操作步驟
相關(guān)文章
常用的8個(gè)應(yīng)用和中間件的Docker運(yùn)行示例詳解
Portainer是一個(gè)輕量級(jí)的管理 UI ,可讓你輕松管理不同的 Docker 環(huán)境(Docker 主機(jī)或 Swarm 群集),這篇文章主要介紹了常用的8個(gè)應(yīng)用和中間件的Docker運(yùn)行示例,需要的朋友可以參考下2024-03-03
Windows?Server?2016中文版安裝docker的詳細(xì)步驟
因業(yè)務(wù)需要所以需要安裝Docker,但是在途中遇到了一些問(wèn)題,所以下面這篇文章主要給大家介紹了關(guān)于Windows?Server?2016中文版安裝docker的詳細(xì)步驟,需要的朋友可以參考下2022-07-07
Docker安裝MySQL集群全過(guò)程(主從復(fù)制)
本文介紹通過(guò)Docker實(shí)現(xiàn)數(shù)據(jù)庫(kù)主從集群部署,涵蓋網(wǎng)絡(luò)創(chuàng)建、my.cnf配置、復(fù)制設(shè)置及測(cè)試,解決防火墻等常見問(wèn)題,確保數(shù)據(jù)同步可靠2025-07-07

