我有一台运行Ubuntu 14.04的物理主机。它有100G磁盘和100M网络带宽。我安装了Docker并启动了10个容器。我想将每个容器限制为最大10G磁盘和10M网络带宽。
在浏览完官方文档并在Internet上搜索之后,我仍然找不到为容器分配指定大小的磁盘和网络带宽的方法。
我认为这可能不是直接在Docker中实现的,也许我们需要绕过Docker。这是否意味着我们应该使用“底层”的东西,比如LXC或Cgroup?谁能提出一些建议?
编辑:
@Mbarthelemy,您的建议似乎有效,但我仍然有一些关于磁盘的问题:
1)是否可以为每个容器分配其他尺寸(如20G,30G等)?你说它在Docker中是硬编码的,所以似乎不可能。
2)我使用下面的命令启动Docker守护进程和容器:
docker -d -s devicemapper
docker run -i -t training/webapp /bin/bash
然后我用df -h
来查看磁盘使用情况,它给出了以下输出:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/docker-longid 9.8G 276M 9.0G 3% /
/dev/mapper/Chris--vg-root 27G 5.5G 20G 22% /etc/hosts
从上面我认为一个容器可以使用的最大磁盘仍然大于10G,你怎么看?
我认为现在使用Docker默认设置是不可能的。这是我会尝试的。
devicemapper
backend,您现在可以使用--storage-opt dm.basesize=20G
(将应用于任何新创建的容器)更改默认容器rootfs size选项。
要更改存储后端:使用--storage-driver=devicemapper
Docker选项。请注意,更改后Docker将不会再看到您以前的容器。-e lxc
option。
然后,使用自定义LXC指令创建容器,将它们放入流量类中:
docker run --lxc-conf="lxc.cgroup.net_cls.classid = 0x00100001" your/image /bin/stuff
检查official documentation有关如何将带宽限制应用于此类。我自己从未尝试过这种方法(我的设置使用自定义的OpenVswitch网桥和VLAN进行网络连接,因此带宽限制不同而且更容易),但我认为您必须创建和配置不同的类。注意:--storage-driver=devicemapper
and -e lxc
options用于Docker守护程序,而不是运行docker run .......
时使用的Docker客户端。
新版本的版本有--device-read-bps和--device-write-bps。
您可以使用docker run --device-read-bps = / dev / sda:10mb
如果您可以访问容器,则可以使用tc在其中进行带宽控制。
例如:在您的入口点脚本中,您可以添加:tc qdisc add dev eth0 root tbf rate 240kbit burst 300kbit latency 50ms
具有240kbps的带宽,突发300kbps和50ms延迟。如果不以root身份运行容器,还需要将--cap-add = NET_ADMIN传递给docker run
命令。
1)是否可以为每个容器分配其他尺寸(如20G,30G等)?你说它在Docker中是硬编码的,所以似乎不可能。
回答这个问题请参考Resizing Docker containers with the Device Mapper plugin