第四部分-Docker网络与存储——21. 高级存储
21. 高级存储1. 高级存储概述高级存储涵盖企业级存储方案包括分布式存储、云存储集成、存储性能优化等适用于大规模、高可用、高性能的生产环境。┌─────────────────────────────────────────────────────────────┐ │ 高级存储架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Docker 主机群 │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │ 容器A │ │ 容器B │ │ 容器C │ │ │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ │ │ │ │ │ │ │ │ └────────────┼────────────┘ │ │ │ │ │ │ │ │ │ 卷插件Volume Plugin │ │ │ └────────────────────┼─────────────────────────────────┘ │ │ │ │ │ ┌──────────────┼──────────────┐ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ NFS │ │ Ceph │ │ AWS │ │ │ │ Server │ │ Cluster │ │ EBS │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘2. NFS 存储2.1 配置 NFS 服务器# Ubuntu/Debian 安装 NFS 服务器sudoapt-getinstall-ynfs-kernel-server# 创建共享目录sudomkdir-p/srv/nfs/dockersudochownnobody:nogroup /srv/nfs/dockersudochmod777/srv/nfs/docker# 配置 exportssudotee-a/etc/exportsEOF /srv/nfs/docker *(rw,sync,no_subtree_check,no_root_squash) EOF# 重启 NFS 服务sudosystemctl restart nfs-kernel-server# 验证配置sudoexportfs-v2.2 Docker 使用 NFS 卷# 创建 NFS 卷dockervolume create--driverlocal\--opttypenfs\--optdevice:/srv/nfs/docker\--optoaddr192.168.1.100,rw,nfsvers4\nfs-volume# 使用 NFS 卷dockerrun-d\--nameapp\-vnfs-volume:/data\nginx# 验证数据持久化dockerexecapptouch/data/test.txt# 多主机共享dockerrun-d--nameapp2-vnfs-volume:/data nginxdockerexecapp2ls/data# 能看到 app 创建的文件2.3 NFS 性能优化# 优化 NFS 挂载参数dockervolume create--driverlocal\--opttypenfs\--optdevice:/srv/nfs/docker\--optoaddr192.168.1.100,rw,nfsvers4,rsize1048576,wsize1048576,hard,timeo600,retrans2\nfs-optimized3. Ceph 存储3.1 Ceph 卷插件# 安装 Ceph 客户端sudoapt-getinstall-yceph-common# 配置 Ceph 认证# /etc/ceph/ceph.conf[global]monhost192.168.1.10,192.168.1.11,192.168.1.12# 使用 RBD 卷dockervolume create--driverrbd\--optnamemyvolume\--optsize10G\--optpoolrbd\--optuseradmin\--optsecretAQB...\ceph-volume4. 云存储集成4.1 AWS EBS# 使用 REX-Ray 驱动dockerplugininstallrexray/ebsEBS_ACCESSKEYxxxEBS_SECRETKEYxxx# 创建 EBS 卷dockervolume create--driverrexray/ebs--optsize10--optvolumetypegp2 ebs-volume# 使用 EBS 卷dockerrun-d-vebs-volume:/data--nameapp nginx4.2 AWS EFS# 创建 EFS 卷dockervolume create\--driverlocal\--opttypenfs\--optdevice:/\--optoaddrfs-12345.efs.us-east-1.amazonaws.com,nfsvers4.1\efs-volume# 使用 EFS 卷dockerrun-d-vefs-volume:/data nginx4.3 Azure Disk# 使用 Azure 磁盘插件dockerplugininstallmysteriorus/azure-disk-plugin# 创建 Azure 磁盘卷dockervolume create-dmysteriorus/azure-disk-plugin\--optnamemydisk\--optresourcegroupmyrg\--optlocationeastus\--optsize10\azure-volume5. 存储性能优化5.1 性能参数调优# Docker 存储驱动优化# /etc/docker/daemon.json{storage-driver:overlay2,storage-opts:[overlay2.override_kernel_checktrue,overlay2.size20G],data-root:/ssd/docker,exec-root:/ssd/docker-exec,log-driver:json-file,log-opts:{max-size:10m,max-file:3,compress:true}}5.2 使用 SSD 加速# 将 Docker 数据目录移动到 SSDsudosystemctl stopdockersudomv/var/lib/docker /ssd/dockersudoln-s/ssd/docker /var/lib/dockersudosystemctl startdocker# 使用 tmpfs 加速临时文件dockerrun-d--tmpfs/app/cache:rw,noexec,nosuid,size1g myapp6. 存储监控6.1 卷使用监控# 监控卷使用情况#!/bin/bashforvolin$(dockervolumels-q);dosize$(dockerrun--rm-v$vol:/data alpinedu-sh/data2/dev/null|cut-f1)echo$vol:$sizedone# 查看 Docker 存储使用dockersystemdfdockersystemdf-v# 查看卷详情dockervolume inspect$(dockervolumels-q)|jq.[] | {Name: .Name, Mountpoint: .Mountpoint}6.2 存储告警# 设置卷大小告警#!/bin/bashTHRESHOLD80forvolin$(dockervolumels-q);dousage$(dockerrun--rm-v$vol:/data alpinedf-h/data|tail-1|awk{print $5}|tr-d%)if[$usage-gt$THRESHOLD];thenechoWarning: Volume$volis$usage% full# 发送告警fidone7. 存储安全7.1 卷加密# 使用 LUKS 加密卷# 创建加密设备sudoapt-getinstall-ycryptsetupsudocryptsetup luksFormat /dev/sdbsudocryptsetupopen/dev/sdb secret# 格式化并挂载sudomkfs.ext4 /dev/mapper/secretsudomkdir-p/data/encryptedsudomount/dev/mapper/secret /data/encrypted# Docker 使用加密目录dockerrun-d-v/data/encrypted:/data myapp7.2 存储访问控制# 限制卷访问权限# 使用只读挂载dockerrun-d\--mountsourceconfig-vol,target/app/config,readonly\myapp# 使用特定用户dockerrun-d--user1000:1000-vdata:/data myapp# SELinux 上下文chcon-Rtsvirt_sandbox_file_t /data/secure8. 高可用存储8.1 分布式存储# docker-compose.yml - GlusterFS 示例version:3.8services:gluster-server:image:gluster/gluster-centosvolumes:-/data/gluster:/datacommand:glusterd# 应用使用 GlusterFS 卷app:image:nginxvolumes:-gluster-volume:/usr/share/nginx/htmlvolumes:gluster-volume:driver:localdriver_opts:type:glusterfsdevice:gluster-server:/volumeo:backupvolfile-servergluster-server8.2 存储复制# 使用 DRBD 复制# 配置 DRBD 设备# 在 Docker 中使用 DRBD 卷9. 卷插件开发9.1 插件接口# 简单的卷插件示例fromflaskimportFlask,request,jsonifyimportos appFlask(__name__)app.route(/Plugin.Activate,methods[POST])defactivate():returnjsonify({Implements:[VolumeDriver]})app.route(/VolumeDriver.Create,methods[POST])defcreate():datarequest.json namedata[Name]os.makedirs(f/data/volumes/{name},exist_okTrue)returnjsonify({Mountpoint:f/data/volumes/{name}})app.route(/VolumeDriver.Remove,methods[POST])defremove():datarequest.json namedata[Name]os.rmdir(f/data/volumes/{name})returnjsonify({})if__name____main__:app.run(host0.0.0.0,port8080)9.2 安装插件# 构建插件镜像dockerbuild-tmy-volume-plugin.# 运行插件dockerrun-d-v/data/volumes:/data/volumes--nameplugin my-volume-plugin# 使用插件dockervolume create-dmy-volume-plugin myvol10. 存储方案选型方案性能可靠性成本适用场景本地 SSD最高中低缓存、临时数据NFS中中低共享配置Ceph高高中大规模集群AWS EBS高高高云原生AWS EFS中高中共享存储11. 最佳实践✅ 存储选型建议性能优先本地 SSD共享配置NFS大规模集群Ceph云环境云存储临时数据tmpfs✅ 运维建议定期监控存储使用实施备份策略测试恢复流程配置存储告警定期清理无用卷12. 常见问题Q1: NFS 卷在容器间不同步检查 NFS 服务器配置和网络连接。Q2: 卷删除后存储空间未释放需要手动清理或重启 Docker 服务。Q3: 高性能场景如何选择存储使用本地 SSD overlay2 驱动。13. 小结高级存储包括 NFS、Ceph、云存储NFS适合多主机共享配置Ceph适合大规模集群云存储与公有云集成卷插件可扩展存储类型存储监控和告警很重要根据性能需求选择合适方案