问题
最近为了更好的使用云端的AI资源,在探索基于docker的工作流。期间遇到一个问题,就是为docker挂载了限制大小的卷,但是无效。这该如何处理呢?
探索
经过搜索和ChatGPT询问,我得到了默认的本地卷驱动是无法限制容量的,即使你使用如下命令
1 2 |
docker volume create --name my_volume -d local -o size=50g |
也是不管用的。关键在于需要换一个driver。于是我问了下ChatGPT,它给了我一些选项
- local:默认的本地存储驱动程序,与 Docker 容器运行在同一台主机上。在命令行中,可以使用 -d local 选项指定本地存储驱动程序。
- glusterfs:支持将存储卷安装到分布式文件系统 GlusterFS 上。在命令行中,可以使用 -d glusterfs 选项指定 GlusterFS 存储驱动程序。
- nfs:NFS (Network File System)存储驱动程序可允许您将存储卷挂载到远程 NFS 共享上。在命令行中,可以使用 -d nfs 选项指定 NFS 存储驱动程序。
- rexray:一个接口型存储卷插件,可扩展 Docker 存储,支持多种云存储提供商和本地后端存储系统。与其他插件不同,rexray 可以同时管理磁盘卷和 Docker 卷,并可与开源或商业的存储方案整合。
- flocker:开源存储编排和容器数据卷管理,可使数据易于移动并在容器间共享。flocker 可以将块设备挂载到容器中作为数据卷。
- portworx:企业级数据服务平台,可以在任何基础设施上实现云原生应用程序和数据。portworx 支持 MySQL,PostgreSQL,MongoDB,Cassandra,Hadoop 等数据服务。
洋洋洒洒挺多。然后我就开始甄别和选择。首先企业级方案就不考虑了,我只是希望本地能单机运行的时候可以限制下卷容量就好。所以portworx和glusterfs就不看了。nfs本身只是一个存储工具,我不相信它带容量限制功能,所以也跳过。接下来剩下的glusterfs和rexray和flocker。不看不知道,这几个项目都处于死亡状态了,github基本上好多年都没有更新了,主页也跳转到广告网站去了。看来容器解决方案的热潮过去之后,相关项目都死的差不多了。
看到最后一个能用的都没有。╮(╯_╰)╭
还是要回到搜索上来。经过搜索,我找到了一个reddit上讲限制卷容量的帖子,里面提供了一个解决方案,使用docker-volume-loopback这个docker插件。
试用了下,还挺好用,虽然这个插件也是4年没更新了。看起来这个插件将特定的卷容量创建成文件,再使用loopback进行挂载。从原理上讲,性能损失是Hi比较小的。
从本机进行安装
1 2 |
docker plugin install --alias loopback ashald/docker-volume-loopback |
这样后续就可以使用-d loopback
来指定volume driver了。
验证
指定大小创建卷并挂载来进行验证
1 2 3 |
docker volume create -d loopback my-vol -o size=50g docker run -it --rm -v my-vol:/workspace alpine /bin/ash |
进入后使用df -h
查看容量,可以看到容量限制是生效的。至此问题解决。