Post
Docker/Podman 启动 MySQL/PostgreSQL 等数据库容器实战
使用 Podman/Docker 启动常见数据库容器的完整指南
概述
容器化数据库部署已成为现代开发和运维的标准实践。本文聚焦于使用 Podman 和 Docker 启动 MySQL、PostgreSQL、MongoDB、Redis 等常见数据库容器的完整操作流程,涵盖环境变量配置、卷挂载、端口映射及数据持久化方法。适用于需要快速搭建测试环境或生产数据库服务的场景。
核心概念
容器启动参数解析
| 参数 | 作用 | 示例 |
|---|---|---|
-d |
后台运行容器 | podman run -d |
--name |
自定义容器名称 | --name mysql-container |
-e |
设置环境变量(如密码、数据库名) | -e MYSQL_ROOT_PASSWORD=123456 |
-v |
挂载本地目录实现数据持久化 | -v /host/path:/container/path |
-p |
端口映射(宿主机:容器) | -p 3306:3306 |
注意:Podman 与 Docker 的命令语法高度兼容,但 Podman 默认无需守护进程(无
dockerd),更适合无服务场景。
使用方法
1. 启动数据库容器
MySQL/MariaDB 示例
podman run -d \
--name mysql-container \
-e MYSQL_ROOT_PASSWORD=your_password \
-e MYSQL_DATABASE=testdb \
-v /data/mysql:/var/lib/mysql \
-p 3306:3306 \
mysql:8.0
MYSQL_ROOT_PASSWORD:设置 root 用户密码MYSQL_DATABASE:自动创建数据库-v挂载路径需提前创建(如/data/mysql)
PostgreSQL 示例
podman run -d \
--name postgres-container \
-e POSTGRES_PASSWORD=your_password \
-e POSTGRES_DB=testdb \
-v /data/postgres:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:13
POSTGRES_PASSWORD:设置默认用户密码POSTGRES_DB:自动创建数据库
MongoDB 示例
podman run -d \
--name mongo-container \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=your_password \
-v /data/mongo:/data/db \
-p 27017:27017 \
mongo:4.4
MONGO_INITDB_*环境变量用于初始化管理员账户
Redis 示例
podman run -d \
--name redis-container \
-e REDIS_PASSWORD=your_password \
-v /data/redis:/data \
-p 6379:6379 \
redis:6.2
REDIS_PASSWORD:启用密码保护时设置
数据持久化:卷管理
本地目录挂载
podman run -d \
-v /host/data:/container/data \
<image>
- 优点:直接访问宿主机文件系统
- 缺点:路径需手动创建,跨容器共享不便
命名卷(推荐)
podman volume create myvolume
podman run -d \
-v myvolume:/container/data \
<image>
- 优点:支持多容器共享,独立于文件系统路径
- 查看卷信息:
podman volume ls
注意:命名卷的数据在容器删除后仍保留,需手动清理。
端口映射与访问
| 数据库 | 默认端口 | 映射示例 | 说明 |
|---|---|---|---|
| MySQL | 3306 | -p 3306:3306 |
客户端通过 localhost:3306 连接 |
| PostgreSQL | 5432 | -p 5432:5432 |
与 MySQL 类似 |
| MongoDB | 27017 | -p 27017:27017 |
需注意防火墙规则 |
| Redis | 6379 | -p 6379:6379 |
默认无密码保护 |
冲突处理:若宿主机已有进程占用目标端口,需修改映射(如
-p 3307:3306)或终止占用进程。
日志查看与容器交互
查看日志
podman logs mysql-container
- 实时查看:
podman logs -f mysql-container
进入容器
podman exec -it mysql-container bash
- MySQL 客户端:
mysql -u root -p - PostgreSQL 客户端:
psql -U postgres
容器管理
停止与删除
podman stop mysql-container
podman rm mysql-container
- 强制删除:
podman rm -f <container>
清理所有停止容器
podman rm $(podman ps -a -q)
高级配置与注意事项
环境变量扩展
- MySQL 支持
MYSQL_MAX_CONNECTIONS等参数 - PostgreSQL 可通过
POSTGRES_SHARED_BUFFERS调整内存配置
Docker Compose 集成(可选)
若需管理多容器服务,可使用 Docker Compose(Podman 也支持 podman play):
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- ./data:/var/lib/mysql
ports:
- "3306:3306"
注意:
docker-compose与podman play的配置语法略有差异,需注意兼容性。
权限与安全
- 避免使用
root用户运行容器(可通过--user指定) - 敏感信息(如密码)应通过环境变量传递,而非写入 Dockerfile
总结
本文系统讲解了使用 Podman/Docker 启动常见数据库容器的完整流程,重点包括:
- 通过
-e环境变量配置数据库用户和密码 - 使用
-v挂载卷实现数据持久化(推荐命名卷) - 端口映射规则与常见数据库默认端口
- 容器日志查看和交互方法
- 容器生命周期管理(启动/停止/删除)
适用边界说明:本文基于 Podman 4.x 和 Docker 20.10 测试,部分旧版本参数可能略有差异。对于生产环境,建议结合
docker-compose或kubernetes实现更复杂的编排。