Ubuntu Docker存储卷如何配置
导读: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”
- mysql_data:
- volumes:
- 直接绑定挂载:
- 服务端(Ubuntu)示例:
四 磁盘配额与容量控制
- 场景:对某个卷或目录设置用户/组配额,限制容器写入上限。
- 基本思路:将卷对应到宿主机的某个目录,在该目录所在文件系统上启用 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
