Skip to main content

使用 Docker Compose 安装 PostgreSQL 15

以下是完整的步骤指南,在 Ubuntu 24.04 上使用 Docker Compose 安装稳定版的 PostgreSQL 15 数据库,并将数据持久化到本地。

1. 安装 Docker 和 Docker Compose

如果尚未安装,请先安装 Docker 和 Docker Compose:

# 更新软件包索引
sudo apt update

# 安装必要的依赖
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# 添加 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=$(dpkg --print-architecture) 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 -y docker-ce docker-ce-cli containerd.io

# 安装 Docker Compose
sudo apt install -y docker-compose-plugin

# 验证安装
docker --version
docker compose version

2. 创建项目目录

mkdir ~/postgres-docker && cd ~/postgres-docker

3. 创建 docker-compose.yml 文件

nano docker-compose.yml

粘贴以下内容(按 Ctrl+X,然后 YEnter 保存):

version: '3.8'

services:
postgres:
image: postgres:15
container_name: postgres15
environment:
POSTGRES_USER: pgadmin
POSTGRES_PASSWORD: securepassword
POSTGRES_DB: mydatabase
volumes:
- ./data:/var/lib/postgresql/data
- ./init:/docker-entrypoint-initdb.d # 可选:初始化脚本目录
ports:
- "5432:5432"
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U pgadmin -d mydatabase"]
interval: 5s
timeout: 5s
retries: 5

4. 创建数据目录并设置权限

mkdir data
sudo chown -R 999:999 data # PostgreSQL 在容器内以 postgres 用户(UID 999)运行

5. 启动 PostgreSQL 容器

docker compose up -d

6. 验证安装

检查容器状态:

docker compose ps

查看日志:

docker compose logs

测试数据库连接:

docker exec -it postgres15 psql -U pgadmin -d mydatabase

在 PostgreSQL 提示符下,可以运行 \l 查看数据库列表,或 \q 退出。

7. 可选:初始化脚本

如果需要初始数据,可以创建 SQL 脚本:

mkdir init
nano init/01-init.sql

添加 SQL 命令,例如:

CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO users (username, email) VALUES ('admin', 'admin@example.com');

然后重新启动容器以应用更改:

docker compose down && docker compose up -d

8. 管理命令

停止服务:

docker compose down

完全删除(包括数据):

docker compose down -v

高级配置(可选)

  1. 时区设置: 若需调整时区(如亚洲/上海)
ALTER DATABASE appdb SET timezone TO 'Asia/Shanghai';
  1. 远程访问配置​
# 进入容器编辑配置
docker exec -it postgres15 bash
echo "listen_addresses = '*'" >> /var/lib/postgresql/data/postgresql.conf
echo "host all all 0.0.0.0/0 scram-sha-256" >> /var/lib/postgresql/data/pg_hba.conf
exit
docker restart postgres15 # 重启生效

数据备份与恢复

# 备份数据库
docker exec postgres15 pg_dump -U admin appdb > /opt/backup/appdb_$(date +%F).sql
# 恢复数据
docker exec -i postgres15 psql -U admin -d appdb < /opt/backup/appdb_backup.sql

注意事项

  1. 生产环境中应使用更强的密码替换 securepassword
  2. 数据会持久化在 ./data 目录中
  3. 默认配置适合开发环境,生产环境可能需要调整参数
  4. 如果需要自定义配置,可以挂载 postgresql.conf 文件

这样您就在 Ubuntu 24.04 上成功部署了 PostgreSQL 15 数据库,并将数据持久化到本地目录。