Ubuntu系统通过Docker安装和部署PostgreSQL的保姆级教程

该文章已生成可运行项目,

一、环境准备

  1. 系统要求

    • 操作系统:Ubuntu 22.04(或其他版本,需适配Docker)。

    • 确保已安装 DockerDocker Compose(可选)。

    • 确保系统网络正常,能访问 Docker Hub。

  2. 更新系统软件包

    sudo apt update && sudo apt upgrade -y
  3. 安装Docker 如果未安装Docker,请按以下步骤操作:

    # 安装Docker依赖包
    sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
    ​
    # 添加Docker官方GPG密钥
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    ​
    # 添加Docker源
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    ​
    # 更新软件包列表并安装Docker
    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io -y
    ​
    # 启动Docker服务并设置开机自启
    sudo systemctl start docker
    sudo systemctl enable docker
    ​
    # 验证Docker是否安装成功
    docker --version

二、安装PostgreSQL

步骤1:拉取PostgreSQL镜像
# 拉取最新版本的PostgreSQL镜像(或指定版本,如17.4)
docker pull postgres:latest
步骤2:创建数据存储目录

PostgreSQL数据需要持久化存储,避免容器删除后数据丢失。

# 创建数据目录(例如:/home/postgres/data)
mkdir -p /home/postgres/data
​
# 设置目录权限(开发环境可简化为777,生产环境需调整所有权)
chmod 777 -R /home/postgres/data
步骤3:运行PostgreSQL容器
docker run -d \
  --name postgres \
  -e POSTGRES_USER=myuser \          # 设置数据库用户名(替换为你的用户名)
  -e POSTGRES_PASSWORD=mypassword \ # 设置数据库密码(替换为你的密码)
  -e POSTGRES_DB=mydatabase \       # 设置初始数据库名称(可选)
  -p 5432:5432 \                    # 映射容器端口5432到宿主机端口5432
  -v /home/postgres/data:/var/lib/postgresql/data \  # 数据持久化挂载
  postgres:latest

参数说明

  • -d:后台运行容器。

  • --name:容器名称(便于管理)。

  • -e:设置环境变量(用户名、密码、数据库名)。

  • -p:端口映射(容器端口:宿主机端口)。

  • -v:将宿主机目录挂载到容器内,实现数据持久化。

步骤4:验证容器运行状态
# 查看容器是否运行
docker ps -a
​
# 预期输出:
# CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS          PORTS                    NAMES
# xxxxxxxxxxxx   postgres     "docker-entrypoint.s…"   X minutes ago    Up X minutes    0.0.0.0:5432->5432/tcp   postgres

三、连接PostgreSQL数据库

方法1:通过容器内连接
  1. 进入容器终端:

    docker exec -it postgres bash
  2. 使用 psql 工具连接数据库:

    psql -U myuser -d mydatabase
  3. 输入密码后,进入 PostgreSQL 命令行界面:

    -- 示例:查看所有数据库
    \l
    ​
    -- 示例:查看当前数据库的表
    \dt
    ​
    -- 退出 PostgreSQL
    \q
方法2:通过宿主机连接

使用 psql 或客户端工具(如 DBeaver、pgAdmin)连接:

psql -h localhost -U myuser -d mydatabase

四、常见问题及解决方案

1. 端口冲突
  • 现象:启动容器时报错 port 5432 is already allocated

  • 解决:修改映射端口(例如 -p 5433:5432),并更新连接时的端口号。

2. 权限问题
  • 现象:容器启动失败,日志显示权限错误(如 could not open directory)。

  • 解决

    1. 检查数据目录权限:

      ls -ld /home/postgres/data
    2. 修改目录所有权为当前用户(更安全):

      sudo chown -R $USER:$USER /home/postgres/data
3. 连接失败
  • 现象:无法通过 psql 连接数据库。

  • 解决

    1. 检查容器是否运行:

      docker ps
    2. 检查 PostgreSQL 日志:

      docker logs postgres
    3. 检查防火墙规则(确保宿主机开放5432端口):

      sudo ufw status
      sudo ufw allow 5432

五、高级配置(可选)

1. 使用 docker-compose.yml 管理容器

创建 docker-compose.yml 文件:

version: '3'
services:
  postgres:
    image: postgres:latest
    container_name: postgres
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
      POSTGRES_DB: mydatabase
    ports:
      - "5432:5432"
    volumes:
      - /home/postgres/data:/var/lib/postgresql/data
    restart: always

启动容器:

docker-compose up -d
2. 配置远程访问

默认情况下,PostgreSQL容器仅允许本地连接。若需远程访问:

  1. 修改容器内配置文件:

    docker exec -it postgres bash
    nano /var/lib/postgresql/data/postgresql.conf

    找到并修改:

    listen_addresses = '*'
  2. 修改 pg_hba.conf

    nano /var/lib/postgresql/data/pg_hba.conf

    添加以下内容(允许所有IP访问):

    host all all 0.0.0.0/0 md5
  3. 重启容器:

    docker restart postgres

六、生产环境建议

  1. 避免使用 chmod 777 生产环境中应调整目录所有权,而非开放全部权限:

    sudo chown -R 999:999 /home/postgres/data  # 999 是 PostgreSQL 容器内的用户ID
  2. 定期备份数据 使用脚本或工具(如 pg_dump)定期备份数据库:

    docker exec -it postgres pg_dump -U myuser -Fc mydatabase > backup.dump
  3. 监控与日志 使用 docker logs 或第三方工具(如 Prometheus + Grafana)监控 PostgreSQL 性能。


七、总结

通过以上步骤,你已在 Ubuntu 上通过 Docker 成功部署了 PostgreSQL,并实现了数据持久化和连接验证。如果需要进一步优化(如高可用、集群部署),可以结合 Kubernetes 或 Docker Swarm 进行扩展。

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值