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

时间:2015-10-08 11:00:57

标签: docker storage limit

一般情况是我们有一组服务器,我们希望使用Docker在其上设置虚拟集群。

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

但是,关于Hadoop HDFS服务,我们遇到Docker容器可用的磁盘空间等于服务器可用磁盘空间的情况。我们希望限制每个容器的可用磁盘空间,以便我们可以动态生成一个具有一定存储大小的额外数据节点,以便为HDFS文件系统做出贡献。

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

我在SO上发现了另一个问题(Limit disk size and bandwidth of a Docker container),但答案差不多是1.5岁 - 关于码头工人的发展速度 - 很古老。

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

  • 基于每个容器限制存储
  • 接近裸机表现
  • 不需要重新分区服务器驱动器

1 个答案:

答案 0 :(得分:35)

您可以在内存和CPU上指定runtime constraints,但不能在磁盘空间中指定。

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

  

此功能将在某个时刻添加,但不会立即添加。现在添加此功能有点困难,因为很多代码块都在从一个地方移动到另一个地方。完成此工作后,实现此功能应该更容易。

     

请注意,配额支持不能作为设备映射器的黑客添加,必须实现尽可能多的存储后端,因此必须以一种易于使用的方式实现为其他存储后端添加配额支持。

2016年8月更新:如下所示,issue 3804 commentPR 24771PR 24807已合并。 docker run现在允许为每个容器设置存储驱动程序选项

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

此(大小)允许在创建时将容器rootfs大小设置为120G   此选项仅适用于devicemapper,btrfs,overlay2,windowsfilter和zfs图驱动程序