在腾讯云CVM服务器上安装Docker后,实现容器的持久化存储是保障数据安全、避免因容器重启或删除导致数据丢失的关键。以下是几种常见的持久化存储方案及具体操作方法:
一、为什么需要持久化存储?
默认情况下,Docker容器内的文件系统是临时的,一旦容器被删除,其内部的数据也会随之消失。因此,对于数据库、日志、配置文件等重要数据,必须使用持久化存储。
二、实现持久化存储的三种主要方式
1. 数据卷(Volumes)——推荐方式
这是 Docker 官方推荐的持久化方式,由 Docker 管理,独立于容器生命周期。
✅ 优点:
- 跨平台兼容性好
- 可以被多个容器共享
- 支持备份和迁移
- 性能较好
🛠️ 操作示例:
# 创建一个命名数据卷
docker volume create mydata
# 启动容器并挂载数据卷
docker run -d
--name mynginx
-v mydata:/usr/share/nginx/html
nginx
# 查看数据卷位置(通常位于 /var/lib/docker/volumes/)
docker volume inspect mydata
数据实际存储在 CVM 的
/var/lib/docker/volumes/mydata/_data目录下。
2. 绑定挂载(Bind Mounts)
将宿主机的目录或文件直接挂载到容器中。
✅ 优点:
- 直接访问宿主机文件系统,便于调试和管理
- 适合开发环境或固定路径需求
⚠️ 注意:
- 需确保宿主机路径存在且权限正确
- 不受 Docker 管理,容易出错
🛠️ 示例:
# 在宿主机创建目录
mkdir -p /data/mysql
# 启动 MySQL 容器并挂载
docker run -d
--name mysql-container
-v /data/mysql:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=yourpassword
mysql:8.0
此时 MySQL 数据将持久保存在 CVM 的
/data/mysql目录中。
3. 使用腾讯云 CBS(云硬盘)实现持久化
适用于生产环境,尤其是需要高可用、高性能、可扩展的场景。
✅ 优势:
- 数据独立于 CVM 实例,可挂载/卸载
- 支持快照备份、跨可用区复制
- 数据更安全可靠
📌 操作步骤:
-
在腾讯云控制台创建 CBS 云硬盘
- 登录 腾讯云控制台
- 进入「云硬盘」服务,创建一块硬盘(如 100GB SSD)
- 将其挂载到你的 CVM 实例
-
在 CVM 上格式化并挂载硬盘
# 查看新挂载的磁盘(如 /dev/vdb)
lsblk
# 格式化(首次使用)
mkfs.ext4 /dev/vdb
# 创建挂载点并挂载
mkdir /mnt/data
mount /dev/vdb /mnt/data
# 设置开机自动挂载(编辑 /etc/fstab)
echo '/dev/vdb /mnt/data ext4 defaults 0 0' >> /etc/fstab
- 在 Docker 中使用该路径作为持久化目录
docker run -d
--name postgres
-v /mnt/data/postgres:/var/lib/postgresql/data
-e POSTGRES_PASSWORD=secret
postgres:15
所有数据库数据将存储在 CBS 云硬盘中,即使 CVM 损坏也可通过重新挂载恢复。
三、高级方案:使用 CSI 插件或 Kubernetes PV/PVC(适用于集群)
如果你使用的是 TKE(腾讯云容器服务),可以结合 CBS 提供的 CSI 插件,通过 PVC(PersistentVolumeClaim)动态申请持久化存储。
但这适用于 Kubernetes 环境,不在单机 CVM + Docker 场景范围内。
四、最佳实践建议
| 场景 | 推荐方式 |
|---|---|
| 开发测试 | Bind Mount 或 Volume |
| 生产环境 | CBS 云硬盘 + Bind Mount |
| 多容器共享数据 | Named Volume |
| 高可用需求 | CBS + 快照 + 自动备份 |
五、注意事项
- 权限问题:确保容器进程对挂载目录有读写权限(如 MySQL 用户需要访问
/var/lib/mysql)。 - 备份策略:定期对
/mnt/data或/var/lib/docker/volumes做快照或 rsync 备份。 - 性能考量:CBS SSD 硬盘性能优于本地盘(尤其 IO 密集型应用)。
- 不要将 /var/lib/docker 存放在系统盘:建议将整个 Docker 根目录迁移到 CBS 磁盘。
六、迁移 Docker 根目录到 CBS(可选)
若希望所有 Docker 数据(包括镜像、容器、卷)都存放在 CBS 上:
# 停止 Docker
systemctl stop docker
# 编辑 daemon.json
vim /etc/docker/daemon.json
添加内容:
{
"data-root": "/mnt/data/docker"
}
然后启动 Docker:
systemctl start docker
之后所有 Docker 数据将存储在 CBS 磁盘中。
总结
在腾讯云 CVM 上使用 Docker 实现持久化存储,最稳妥的方式是:
✅ 使用 CBS 云硬盘挂载到 CVM,再通过 -v 挂载到容器中
👉 既保证了数据持久性,又具备高可用性和可扩展性。
如有进一步需求(如自动化脚本、MySQL + CBS 部署示例),欢迎继续提问!
PHPWP博客