如何限制容器可用的Docker文件系统空间

一般的情况是我们有一个服务器集群,我们希望在Docker之上build立虚拟集群。

为此,我们为不同的服务(Hadoop,Spark等)创build了Dockerfiles。

但是,对于Hadoop HDFS服务,我们有这样的情况:docker容器可用的磁盘空间等于服务器可用的磁盘空间。 我们希望限制每个容器的可用磁盘空间,这样我们就可以dynamic地生成一个具有一定存储大小的额外数据节点,以便为HDFS文件系统做贡献。

我们的想法是使用ext4格式化的环回文件,并将这些文件挂载到我们在docker容器中用作卷的目录中。 但是,这意味着性能损失很大。

我发现了另一个关于SO的问题( Docker容器的磁盘大小和带宽限制 ),但是关于docker的发展速度,答案已经有近1,5年的历史了。

后端将允许我们使用哪种方式或存储

  • 限制每个容器的存储空间
  • 有接近裸机性能
  • 不需要重新分区服务器驱动器

您可以在内存和CPU上指定运行时间约束 ,但不能指定磁盘空间。

已经请求了对磁盘空间设置约束的能力( 问题12462 , 问题3804 ),但尚未实现,因为它取决于底层的文件系统驱动程序。

此function将在某些时候添加,但不是马上。 现在添加这个function比较困难,因为很多代码块正在从一个地方移动到另一个地方。 完成这项工作之后,应该更容易实现这个function。

请记住,配额支持不能作为设备映射程序的补充,必须尽可能多地实现存储后端,因此必须以易于为其他配额添加配额的方式实现存储后端。


2016年8月更新:如下所示,并在发行3804评论中 , PR 24771和PR 24807已经被合并。 docker run现在允许设置每个容器的存储驱动程序选项

 $ docker run -it --storage-opt size=120G fedora /bin/bash 

这个(大小)将允许在创build时将容器的rootfs大小设置为120G。
此选项仅适用于devicemapper,btrfs,overlay2,windowsfilter和zfsgraphics驱动程序