# 容器核心指令解析与数据库容器化部署实践
Docker容器化技术正在重塑应用部署的方式。掌握容器生命周期管理的关键指令,并理解数据库这类有状态服务在容器环境中的运行要点,是构建现代化应用的基础。本文将从核心命令入手,逐步深入到MySQL和Redis的容器化实践。
## 容器生命周期管理指令
容器的运行状态管理是日常操作最频繁的部分。以下指令构成了容器操作的基础:
```bash
# 创建并启动容器
docker run -d --name webapp -p 8080:80 nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止)
docker ps -a
# 停止容器
docker stop webapp
# 启动已停止的容器
docker start webapp
# 重启容器
docker restart webapp
# 进入容器内部(调试用)
docker exec -it webapp bash
# 查看容器日志
docker logs -f webapp
# 删除容器
docker rm webapp
```
`docker run`是最复杂的指令,常用选项包括:`-d`后台运行、`-p`端口映射、`-v`数据卷挂载、`-e`环境变量设置、`--network`指定网络、`--restart`设置重启策略。
## 镜像管理基础
容器运行依赖于镜像,镜像管理同样重要:
```bash
# 拉取镜像
docker pull mysql:5.7
# 列出本地镜像
docker images
# 构建镜像
docker build -t myapp:1.0 .
# 删除镜像
docker rmi myapp:1.0
# 镜像标签
docker tag myapp:1.0 myapp:latest
```
## MySQL容器化实践
数据库容器化需要考虑数据持久化、配置管理和网络访问。以下是一个完整的MySQL部署示例:
```bash
# 创建数据卷(持久化数据)
docker volume create mysql-data
# 启动MySQL容器
docker run -d \
--name mysql-prod \
-p 3306:3306 \
-v mysql-data:/var/lib/mysql \
-v /etc/mysql/conf.d:/etc/mysql/conf.d:ro \
-e MYSQL_ROOT_PASSWORD=SecurePass123 \
-e MYSQL_DATABASE=myapp \
-e MYSQL_USER=appuser \
-e MYSQL_PASSWORD=apppass \
--restart always \
mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
<"ovo.p5k3.org.cn"><"bvd.p5k3.org.cn"><"tab.p5k3.org.cn">
```
参数说明:
- `-v mysql-data:/var/lib/mysql`:使用独立卷存储数据文件
- `-v /etc/mysql/conf.d:/etc/mysql/conf.d:ro`:挂载自定义配置文件
- 环境变量设置数据库初始化信息
- `--restart always`:容器异常退出时自动重启
- 最后附加的命令行参数覆盖MySQL默认配置
验证数据库运行状态:
```bash
# 查看日志
docker logs mysql-prod
# 进入容器连接数据库
docker exec -it mysql-prod mysql -u root -p
# 在宿主机连接(需安装mysql客户端)
mysql -h 127.0.0.1 -P 3306 -u root -p
```
## Redis容器化实践
Redis作为内存数据库,部署相对简单但需注意持久化配置:
```bash
# 创建Redis数据卷
docker volume create redis-data
# 启动Redis容器
docker run -d \
--name redis-cache \
-p 6379:6379 \
-v redis-data:/data \
-v /etc/redis/redis.conf:/usr/local/etc/redis/redis.conf:ro \
--restart unless-stopped \
redis:6.2 \
redis-server /usr/local/etc/redis/redis.conf \
--appendonly yes
```
若不需要自定义配置,可简化启动:
```bash
docker run -d \
--name redis-cache \
-p 6379:6379 \
-v redis-data:/data \
redis:6.2 \
redis-server --appendonly yes
```
验证Redis服务:
```bash
# 通过redis-cli连接
docker exec -it redis-cache redis-cli
# 测试读写
127.0.0.1:6379> set key "Hello Docker"
OK
127.0.0.1:6379> get key
"Hello Docker"
```
## 主从复制架构部署
以Redis主从复制为例,展示多容器协作模式:
```bash
# 创建网络
docker network create redis-cluster
# 启动主节点
docker run -d \
--name redis-master \
--network redis-cluster \
redis:6.2 \
redis-server --appendonly yes
# 启动从节点(连接到主节点)
docker run -d \
--name redis-slave \
--network redis-cluster \
redis:6.2 \
redis-server --appendonly yes --slaveof redis-master 6379
```
验证主从状态:
```bash
docker exec redis-master redis-cli info replication
docker exec redis-slave redis-cli info replication
```
<"cec.p5k3.org.cn"><"vds.p5k3.org.cn"><"kfc.p5k3.org.cn">
## 备份与恢复策略
数据库容器化后,备份方式需要相应调整:
```bash
# MySQL备份
docker exec mysql-prod mysqldump -u root -pSecurePass123 --all-databases > backup.sql
# 恢复MySQL备份
cat backup.sql | docker exec -i mysql-prod mysql -u root -pSecurePass123
# Redis备份(RDB文件)
docker run --rm -v redis-data:/data -v $(pwd):/backup alpine cp /data/dump.rdb /backup/
```
## 性能监控与资源限制
为数据库容器设置资源限制,避免影响宿主机稳定性:
```bash
# 限制MySQL内存和CPU
docker run -d \
--name mysql-limited \
-p 3306:3306 \
-v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=SecurePass123 \
--memory="2g" \
--memory-swap="3g" \
--cpus="2" \
mysql:5.7
```
监控容器资源使用:
```bash
# 实时查看资源占用
docker stats mysql-prod redis-cache
# 查看容器进程
docker top mysql-prod
```
从基础指令到数据库容器化实践,Docker提供了一套完整的工具链。掌握容器生命周期管理、理解数据持久化要点、熟悉主从复制部署,能够帮助开发者在生产环境中自信地运行有状态服务。实际应用中还需结合监控告警和备份恢复策略,构建高可用的容器化数据库平台。