前言:为什么在 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系列之字符串和列表_开着拖拉机回家的博客…