首页主机资讯Ubuntu Docker存储卷如何配置

Ubuntu Docker存储卷如何配置

时间2025-12-22 20:21:03发布访客分类主机资讯浏览694
导读:Ubuntu Docker 存储卷配置指南 一 核心概念与选择 数据卷 Volumes:由 Docker 管理,默认位于宿主机的 /var/lib/docker/volumes/,适合数据库、日志等需要跨容器共享与备份的数据,升级容器时数...

Ubuntu Docker 存储卷配置指南

一 核心概念与选择

  • 数据卷 Volumes:由 Docker 管理,默认位于宿主机的 /var/lib/docker/volumes/,适合数据库、日志等需要跨容器共享与备份的数据,升级容器时数据不受影响。
  • 绑定挂载 Bind Mounts:将宿主机的任意目录或文件挂载到容器内,适合开发调试、配置文件注入等场景,路径必须在宿主机上真实存在。
  • tmpfs 挂载:仅存于内存,适合临时敏感数据,容器停止后数据消失。
  • 权限与安全:绑定挂载需注意目录权限与属主;卷由 Docker 管理,更利于隔离与迁移。

二 快速上手常用命令

  • 创建与管理卷
    • 创建:docker volume create my_volume
    • 列出:docker volume ls
    • 查看详情:docker volume inspect my_volume(关注 Mountpoint
    • 删除:docker volume rm my_volume
  • 运行容器并挂载
    • 使用卷:
      • docker run -d --name app -v my_volume:/data my_image
      • 或显式指定类型:docker run -d --name app --mount type=volume,source=my_volume,target=/data my_image
    • 使用绑定挂载:
      • docker run -d --name app -v /host/data:/data:ro my_image(只读)
      • 或:docker run -d --name app --mount type=bind,source=/host/data,target=/data,readonly my_image
  • 验证挂载
    • 查看:docker inspect app(在 Mounts 段核对 Source/Type/Mode
  • 数据迁移(备份与恢复)
    • 备份卷到宿主机目录:
      • docker run --rm --volume=my_volume:/volume --volume=/backup:/backup alpine tar cvf /backup/my_volume.tar /volume
    • 从备份恢复卷:
      • docker run --rm --volume=my_volume:/volume --volume=/backup:/backup alpine tar xvf /backup/my_volume.tar -C /
  • 清理
    • 删除容器同时删除其匿名卷:docker rm -v < 容器名>
    • 注意:具名卷不会随容器删除自动清理,需要手动 docker volume rm

三 多主机共享与网络存储

  • NFS 共享卷(推荐用于多主机/集群)
    • 服务端(Ubuntu)示例:
      • 安装:sudo apt install nfs-kernel-server -y
      • 共享目录:sudo mkdir -p /data/docker_volumes & & sudo chown nobody:nogroup /data/docker_volumes
      • 导出:*echo '/data/docker_volumes (rw,sync,no_subtree_check,no_root_squash)’ | sudo tee -a /etc/exports
      • 生效:sudo exportfs -a & & sudo systemctl restart nfs-kernel-server & & sudo systemctl enable nfs-kernel-server
    • 客户端:
      • 安装:sudo apt install nfs-common -y
      • 测试挂载:sudo mount -t nfs < NFS_SERVER_IP> :/data/docker_volumes /mnt/docker_volumes
      • 开机自动挂载(/etc/fstab):< NFS_SERVER_IP> :/data/docker_volumes /mnt/docker_volumes nfs rw,hard,intr,noatime,vers=4.1 0 0
    • 在 Docker 中使用 NFS 卷(两种方式)
      • 直接绑定挂载:
        • docker run -d --name mysql -v /mnt/docker_volumes/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret mysql:8.0
      • 创建 NFS 驱动卷:
        • docker volume create --driver local --opt type=nfs --opt o=addr=< NFS_SERVER_IP> ,rw --opt device=:/data/docker_volumes/mysql mysql_volume
        • 使用:docker run -d --name mysql -v mysql_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret mysql:8.0
      • docker-compose 示例:
        • volumes:
          • mysql_data:
            • driver: local
            • driver_opts:
              • type: nfs
              • o: addr=< NFS_SERVER_IP> ,rw,nfsvers=4.1
              • device: “:/data/docker_volumes/mysql”

四 磁盘配额与容量控制

  • 场景:对某个卷或目录设置用户/组配额,限制容器写入上限。
  • 基本思路:将卷对应到宿主机的某个目录,在该目录所在文件系统上启用 usrquota/grpquota,然后对指定用户设置配额。
  • 步骤
    • 安装配额工具:sudo apt install quota
    • 编辑 /etc/fstab,为目标挂载点添加 usrquota,grpquota(示例:/dev/sda1 /data ext4 defaults,usrquota,grpquota 0 2)
    • 重新挂载:sudo mount -o remount /data
    • 设置配额(以用户 appuser 为例,软限制 1000MB、硬限制 1200MB):
      • sudo setquota -u appuser 1000 1200 0 0 /data
    • 验证:quota -u appuser
  • 说明:若使用 NFS,配额通常在 NFS 服务器侧配置;若使用 Docker 卷插件(如云盘/文件存储插件),配额能力取决于具体驱动与后端。

五 常见问题与最佳实践

  • 路径与权限
    • 绑定挂载的宿主机路径必须存在;使用 -v 宿主机绝对路径:容器路径[:ro]–mount type=bind
    • 卷不存在时会自动创建(命名卷);使用 –mount 时路径不存在会报错。
    • 生产环境避免使用 root:root 直写,建议为容器进程设置合适的 UID/GID 与目录属主。
  • 升级与迁移
    • 升级容器时挂载同一卷即可保留数据;跨主机迁移优先使用 NFS/对象存储插件 等共享存储方案。
  • 备份与恢复
    • 定期备份关键卷(如数据库数据目录),使用 tar 在容器内打包/解包到宿主机备份目录,简单可靠。
  • 监控与排错
    • 查看挂载:docker inspect < 容器名> ;查看卷列表与详情:docker volume ls/inspect
    • NFS 排错:服务端 showmount -e ,客户端 nfsstat -c/-s 查看统计与连接状态。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu Docker存储卷如何配置
本文地址: https://pptw.com/jishu/777728.html
如何在Ubuntu上使用Docker镜像 如何在Ubuntu上监控Docker资源使用

游客 回复需填写必要信息