Docker 安装数据库
本章将介绍如何使用 Docker 快速部署 MySQL、PostgreSQL、MongoDB 和 Redis 数据库。
MySQL
快速启动
bash
docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
mysql:8.0完整配置
bash
docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=mydb \
-e MYSQL_USER=myuser \
-e MYSQL_PASSWORD=mypassword \
-v mysql-data:/var/lib/mysql \
-v $(pwd)/my.cnf:/etc/mysql/conf.d/my.cnf \
mysql:8.0环境变量
| 变量 | 说明 |
|---|---|
MYSQL_ROOT_PASSWORD | root 密码(必填) |
MYSQL_DATABASE | 初始化数据库名 |
MYSQL_USER | 创建普通用户 |
MYSQL_PASSWORD | 普通用户密码 |
MYSQL_ALLOW_EMPTY_PASSWORD | 允许空密码 |
连接数据库
bash
# 使用 Docker exec 连接
docker exec -it mysql mysql -uroot -p
# 从宿主机连接
mysql -h 127.0.0.1 -P 3306 -uroot -p
# 导入 SQL 文件
docker exec -i mysql mysql -uroot -pmy-secret-pw mydb < dump.sql
# 导出数据库
docker exec mysql mysqldump -uroot -pmy-secret-pw mydb > backup.sqlPostgreSQL
快速启动
bash
docker run -d \
--name postgres \
-p 5432:5432 \
-e POSTGRES_PASSWORD=my-secret-pw \
postgres:16完整配置
bash
docker run -d \
--name postgres \
-p 5432:5432 \
-e POSTGRES_PASSWORD=my-secret-pw \
-e POSTGRES_USER=myuser \
-e POSTGRES_DB=mydb \
-v postgres-data:/var/lib/postgresql/data \
postgres:16环境变量
| 变量 | 说明 |
|---|---|
POSTGRES_PASSWORD | 超级用户密码(必填) |
POSTGRES_USER | 超级用户名(默认 postgres) |
POSTGRES_DB | 初始化数据库名 |
连接数据库
bash
# 使用 Docker exec 连接
docker exec -it postgres psql -U myuser -d mydb
# 从宿主机连接
psql -h 127.0.0.1 -p 5432 -U myuser -d mydb
# 导入 SQL 文件
docker exec -i postgres psql -U myuser -d mydb < dump.sql
# 导出数据库
docker exec postgres pg_dump -U myuser mydb > backup.sqlMongoDB
快速启动
bash
docker run -d \
--name mongodb \
-p 27017:27017 \
mongo:7带认证启动
bash
docker run -d \
--name mongodb \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=my-secret-pw \
-e MONGO_INITDB_DATABASE=mydb \
-v mongo-data:/data/db \
mongo:7环境变量
| 变量 | 说明 |
|---|---|
MONGO_INITDB_ROOT_USERNAME | 管理员用户名 |
MONGO_INITDB_ROOT_PASSWORD | 管理员密码 |
MONGO_INITDB_DATABASE | 初始化数据库名 |
连接数据库
bash
# 使用 Docker exec 连接
docker exec -it mongodb mongosh
# 带认证连接
docker exec -it mongodb mongosh -u admin -p my-secret-pw
# 从宿主机连接
mongosh "mongodb://admin:my-secret-pw@127.0.0.1:27017"
# 导出数据库
docker exec mongodb mongodump --out /dump
docker cp mongodb:/dump ./backup
# 导入数据库
docker cp ./backup mongodb:/dump
docker exec mongodb mongorestore /dumpRedis
快速启动
bash
docker run -d \
--name redis \
-p 6379:6379 \
redis:7带密码和持久化
bash
docker run -d \
--name redis \
-p 6379:6379 \
-v redis-data:/data \
redis:7 redis-server --requirepass my-secret-pw --appendonly yes使用自定义配置文件
bash
docker run -d \
--name redis \
-p 6379:6379 \
-v redis-data:/data \
-v $(pwd)/redis.conf:/usr/local/etc/redis/redis.conf \
redis:7 redis-server /usr/local/etc/redis/redis.conf连接 Redis
bash
# 使用 Docker exec 连接
docker exec -it redis redis-cli
# 带密码连接
docker exec -it redis redis-cli -a my-secret-pw
# 从宿主机连接
redis-cli -h 127.0.0.1 -p 6379 -a my-secret-pw
# 测试连接
docker exec -it redis redis-cli ping
# 输出: PONGDocker Compose 多数据库部署
yaml
# docker-compose.yml
services:
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: mydb
volumes:
- mysql-data:/var/lib/mysql
postgres:
image: postgres:16
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: secret
POSTGRES_DB: mydb
volumes:
- postgres-data:/var/lib/postgresql/data
mongodb:
image: mongo:7
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: secret
volumes:
- mongo-data:/data/db
redis:
image: redis:7
ports:
- "6379:6379"
command: redis-server --requirepass secret --appendonly yes
volumes:
- redis-data:/data
volumes:
mysql-data:
postgres-data:
mongo-data:
redis-data:bash
# 启动所有数据库
docker compose up -d
# 查看状态
docker compose ps
# 停止所有数据库
docker compose down
# 停止并删除数据
docker compose down -v数据备份与恢复
通用备份策略
bash
# 使用数据卷备份
docker run --rm \
-v mysql-data:/source \
-v $(pwd)/backup:/backup \
alpine tar czf /backup/mysql-backup.tar.gz -C /source .
# 恢复数据卷
docker run --rm \
-v mysql-data:/target \
-v $(pwd)/backup:/backup \
alpine tar xzf /backup/mysql-backup.tar.gz -C /target本章小结
Docker 让数据库的部署和管理变得非常简单。通过数据卷持久化数据,使用环境变量配置参数,可以在几秒钟内启动一个完整的数据库服务。
关键要点:
- 始终使用数据卷持久化数据库数据
- 通过环境变量设置密码和初始配置
- 定期备份数据卷中的数据
- 生产环境注意安全配置