腾讯云CVM服务器安装Docker后如何实现容器持久化存储?

在腾讯云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 实例,可挂载/卸载
  • 支持快照备份、跨可用区复制
  • 数据更安全可靠
📌 操作步骤:
  1. 在腾讯云控制台创建 CBS 云硬盘

    • 登录 腾讯云控制台
    • 进入「云硬盘」服务,创建一块硬盘(如 100GB SSD)
    • 将其挂载到你的 CVM 实例
  2. 在 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
  1. 在 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 + 快照 + 自动备份

五、注意事项

  1. 权限问题:确保容器进程对挂载目录有读写权限(如 MySQL 用户需要访问 /var/lib/mysql)。
  2. 备份策略:定期对 /mnt/data/var/lib/docker/volumes 做快照或 rsync 备份。
  3. 性能考量:CBS SSD 硬盘性能优于本地盘(尤其 IO 密集型应用)。
  4. 不要将 /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 部署示例),欢迎继续提问!