Docker27.3.1中安装 PostgreSQL16的实现步骤

 更新时间:2025年07月28日 09:00:13   作者:吴启维  
本文主要介绍了Docker27.3.1中安装 PostgreSQL16的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言:为什么在 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

六、安全加固建议

网络层安全

# 限制访问IP(仅允许应用服务器)
docker network create --subnet=10.1.0.0/16 pg-secure-network

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

定期轮换凭证

# 每月更新密码
ALTER USER prod_admin WITH PASSWORD 'NewP@ssw0rd_$(date +%Y%m)';

审计日志

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

结语:容器化数据库的未来

通过 Docker 部署 PostgreSQL 不仅简化了运维流程,还为现代化应用架构提供了坚实基础。

到此这篇关于Docker27.3.1中安装 PostgreSQL16的实现步骤的文章就介绍到这了,更多相关Docker 安装 PostgreSQL16内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker-cli源码窥探(推荐)

    docker-cli源码窥探(推荐)

    最近一直在使用docker,在这做下记录,本文我将以docker ps -a 命令为例探究docker命令在 client侧的执行过程,源码的版本为20.10,对docker-cli源码知识感兴趣的朋友一起学习下吧
    2022-11-11
  • 深入浅析Docker容器中的Patroni

    深入浅析Docker容器中的Patroni

    今天将向大家介绍,如何搭建容器下的Patroni集群环境,Patroni作为开箱即用PG高可用工具,越来越多的被各个厂商用于云环境下使用
    2021-11-11
  • Idea部署远程Docker并配置文件

    Idea部署远程Docker并配置文件

    这篇文章给大家介绍Idea部署远程Docker并添加配置文件的方法及修改项目pom文件的代码解析,对idea部署远程docker相关知识感兴趣的朋友一起看看吧
    2021-06-06
  • 详解Windows下运用Docker部署Node.js开发环境

    详解Windows下运用Docker部署Node.js开发环境

    这篇文章主要介绍了详解Windows下运用Docker部署Node.js开发环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 使用Docker部署JSON Crack的流程步骤

    使用Docker部署JSON Crack的流程步骤

    本文将给大家详细介绍了如何使用Docker部署JSON Crack,JSON Crack 是一款免费的开源数据可视化应用程序,能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互式图表,文中通过代码和图片给大家讲解的非常详细,需要的朋友可以参考下
    2024-02-02
  • Docker部署MinIO对象存储服务器结合Cpolar实现远程访问的操作方法

    Docker部署MinIO对象存储服务器结合Cpolar实现远程访问的操作方法

    MinIO是一个开源的软件,可以免费使用,还可以在普通硬件上运行,降低了存储成本,本文介绍在本地Docker中部署MinIO服务,并实现远程访问管理界面,节约云服务器运行成本,感兴趣的朋友一起看看吧
    2023-12-12
  • Docker容器交互之docker exec -it、Shell与容器运行环境详解

    Docker容器交互之docker exec -it、Shell与容器运行环境详解

    docker exec是Docker提供的一个命令,用于在已经运行的容器中执行一个新的命令,这篇文章主要介绍了Docker容器交互之docker exec -it、Shell与容器运行环境的相关资料,需要的朋友可以参考下
    2026-04-04
  • Docker删除某个镜像的实现方法

    Docker删除某个镜像的实现方法

    在使用 Docker 时,经常需要删除不再需要的镜像、容器和卷,以释放存储空间,本文主要介绍了Docker删除某个镜像的实现方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • docker构建并启动前端完整流程

    docker构建并启动前端完整流程

    使用 Docker 部署前端项目是一种高效且可靠的方法,可以确保项目在不同环境中的一致性,这篇文章主要介绍了docker构建并启动前端的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-07-07
  • Docker使用镜像仓库的方法

    Docker使用镜像仓库的方法

    这篇文章介绍了Docker使用镜像仓库的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01

最新评论