使用 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
,然后 Y
和 Enter
保存):
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
高级配置(可选)
- 时区设置: 若需调整时区(如亚洲/上海)
ALTER DATABASE appdb SET timezone TO 'Asia/Shanghai';
- 远程访问配置
# 进入容器编辑配置
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
注意事项
- 生产环境中应使用更强的密码替换
securepassword
- 数据会持久化在
./data
目录中 - 默认配置适合开发环境,生产环境可能需要调整参数
- 如果需要自定义配置,可以挂载
postgresql.conf
文件
这样您就在 Ubuntu 24.04 上成功部署了 PostgreSQL 15 数据库,并将数据持久化到本地目录。