docker 部署postgresql服务

在这里插入图片描述

以下是一个完整的 **docker-compose.yml** 文件示例,用于部署 PostgreSQL 11 数据库,满足以下要求:

  1. 同步宿主机系统时间到容器内
  2. 挂载数据卷、日志目录和配置文件
  3. 支持外部连接访问数据库
  4. 将宿主机的端口 **15432** 映射到容器的 **5432** 端口

docker-compose.yml

##这里面写了多个版本的配置,选用其一即可,相关的目录结构 按照配置的映射目录设置即可
version: “3.9” # 版本号
services:
postgres_db: # 服务名称
image: postgres:15.7 # 指定镜像及其版本
container_name: postgres # 指定容器的名称
restart: always # 容器重启策略
environment: # 环境变量
POSTGRES_USER: root # 数据库用户名
POSTGRES_PASSWORD: admin123456 # 数据库密码
POSTGRES_DB: ceshi # 数据库名称
TZ: Asia/Shanghai # 设置容器时区为上海
LANG: zh_CN.UTF-8 # 设置语言支持中文
ports: # 端口映射
- “15432:5432”
volumes: # 数据持久化的配置
- /etc/localtime:/etc/localtime # 时区同步
- /opt/docker-volumes/postgresql/data:/var/lib/postgresql/data # 数据文件
- /opt/docker-volumes/postgresql/log:/var/log/postgresql # 日志文件
- /opt/docker-volumes/postgresql/config/postgresql.conf:/etc/postgresql/postgresql.conf # 配置文件
- /opt/docker-volumes/postgresql/config/pg_hba.conf:/etc/postgresql/pg_hba.conf # 访问控制文件
networks: # 网络配置
- default_net # 加入到 default_net 网络
command: [“postgres”, “-c”, “config_file=/etc/postgresql/postgresql.conf”] # 指定配置文件位置

networks:  # 网络
  default_net:
      external: true


version: "3.9"

services:
  postgres:
    image: postgres:15.7
    container_name: postgres
    restart: always # 容器重启策略
    ports:
      - "15432:5432"                 # 映射本地的 5432 端口到容器的 15432 端口
    environment:
      POSTGRES_DB: postgres        # 默认数据库
      POSTGRES_USER: root          # 数据库用户名
      POSTGRES_PASSWORD: admin123456   # 数据库密码
      PGDATA: /var/lib/postgresql/data/pgdata # 数据文件位置
    volumes:
      - ./data:/var/lib/postgresql/data  # 挂载数据卷,持久化存储
      - ./logs:/var/log/postgresql       # 挂载日志
      - ./config/postgresql.conf:/etc/postgresql/postgresql.conf # 挂载配置文件
      - ./config/pg_hba.conf:/etc/postgresql/pg_hba.conf         # 挂载访问控制配置
      - /etc/localtime:/etc/localtime  # 时区同步
    command: ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"] # 指定配置文件位置
    networks:  # 网络配置
      - default_net  # 加入到 default_net 网络

networks:  # 网络
  default_net:
      external: true

version: "3.9"

services:
  postgres:
    image: postgres:11                      # 使用 PostgreSQL 11 官方镜像
    container_name: postgres11
    restart: always
    ports:
      - "15432:5432"                        # 宿主机 15432 端口映射到容器 5432
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: admin123456
      POSTGRES_DB: testdb                    # 默认数据库
    volumes:
      - ./data:/var/lib/postgresql/data     # 挂载数据卷
      - ./logs:/var/log/postgresql          # 挂载日志目录
      - ./config/postgresql.conf:/etc/postgresql/postgresql.conf # 配置文件
      - ./config/pg_hba.conf:/etc/postgresql/pg_hba.conf         # 访问控制配置
      - /etc/localtime:/etc/localtime:ro    # 同步宿主机系统时间
      - /etc/timezone:/etc/timezone:ro      # 同步时区信息
    command: ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]
    networks:  # 网络配置
      - default_net  # 加入到 default_net 网络

networks:  # 网络
  default_net:
      external: true

目录结构

project/
├── docker-compose.yml
├── config/
│   ├── postgresql.conf  # PostgreSQL 配置文件
│   └── pg_hba.conf      # 访问控制配置文件
├── data/                # 数据卷存储目录
├── logs/                # 日志存储目录

配置文件内容

**config/postgresql.conf**

自定义 PostgreSQL 配置文件,设置外部连接及优化参数。

# Connection Settings
listen_addresses = '*'             # 监听所有 IP 地址
port = 5432                        # 容器内 PostgreSQL 端口

# Encoding and Locale
lc_messages = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'
client_encoding = 'UTF8'
default_text_search_config = 'pg_catalog.simple'

# Logging
logging_collector = on             # 启用日志收集
log_directory = '/var/log/postgresql'
log_filename = 'postgresql.log'
log_statement = 'all'              # 记录所有 SQL 语句
log_min_duration_statement = 2000  # 慢查询日志阈值为 2 秒

# Resource Management
shared_buffers = 128MB
work_mem = 4MB
maintenance_work_mem = 64MB

**config/pg_hba.conf**

控制数据库连接权限,允许外部连接。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# 本地连接
local   all             all                                     trust

# 外部连接
host    all             all             0.0.0.0/0               md5
host    all             all             ::/0                    md5

启动服务

  1. 启动服务:

    docker-compose up -d

  2. 检查服务状态:

    docker ps

  3. 验证容器日志是否正常:

    docker logs postgres11


测试外部连接

使用 PostgreSQL 客户端(如 psql)连接:

psql -h localhost -U admin -d mydb -p 15432

输入密码 admin123 后,即可访问数据库。


说明

  1. 时间同步:
  • 挂载 /etc/localtime/etc/timezone,确保容器与宿主机时间一致。
  1. 日志存储:
  • 宿主机 ./logs 目录会保存 PostgreSQL 的运行日志。
  1. 权限管理:
  • 配置文件 pg_hba.conf 控制外部连接,确保 IP 地址范围和验证方式符合需求。
  1. 端口映射:
  • 宿主机 15432 映射到容器的 5432,支持外部访问。

此配置适用于开发和生产环境,满足 PostgreSQL 11 的基础功能需求以及外部连接访问需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卜锦元

白嫖是人类的终极快乐,我也是

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值