我遇到了在Docker容器上有磁盤配額的要求。具體而言,我想限制不在基礎圖像層中但在差異中的數據量。谷歌搜索「碼頭磁盤配額」建議使用device mapper或btrfs後端。同時能夠在兩個後端配額(具有不同的語義)都有自己的問題:如何爲Docker容器定義磁盤配額?
- BTRFS是不是在生產中使用足夠穩定
- 設備映射僅限制了完整的容器大小,包括基本圖像,但不允許限制差異
解決此問題的最佳方法是什麼?
我遇到了在Docker容器上有磁盤配額的要求。具體而言,我想限制不在基礎圖像層中但在差異中的數據量。谷歌搜索「碼頭磁盤配額」建議使用device mapper或btrfs後端。同時能夠在兩個後端配額(具有不同的語義)都有自己的問題:如何爲Docker容器定義磁盤配額?
解決此問題的最佳方法是什麼?
解決此問題的一種方法是將diff目錄/var/lib/docker/aufs/diff/$CONTAINER_ID
放入一個稀疏的回送掛載的ext4目錄中。這有效地限制了用戶可以在容器中存儲/修改的數據量。這是bash的代碼我使用:
do_enable_quota() {
local ID=$1
local QUOTA_MB=$2
local LOOPBACK=/var/lib/docker/aufs/diff/$ID-loopback
local LOOPBACK_MOUNT=/var/lib/docker/aufs/diff/$ID-loopback-mount
local DIFF=/var/lib/docker/aufs/diff/$ID
docker stop -t=0 $ID
sudo dd of=$LOOPBACK bs=1M seek=$QUOTA_MB count=0
sudo mkfs.ext4 -F $LOOPBACK
sudo mkdir -p $LOOPBACK_MOUNT
sudo mount -t ext4 -n -o loop,rw $LOOPBACK $LOOPBACK_MOUNT
sudo rsync -rtv $DIFF/ $LOOPBACK_MOUNT/
sudo rm -rf $DIFF
sudo mkdir -p $DIFF
sudo umount $LOOPBACK_MOUNT
sudo rm -rf $LOOPBACK_MOUNT
sudo mount -t ext4 -n -o loop,rw $LOOPBACK $DIFF
docker start $ID
}
這種方法完全適用於我,但美中不足的是,我需要換行「開始」,「停止」和「RM」指令才能安裝進去。
ZFS也是一個很大的:https://docs.docker.com/engine/userguide/storagedriver/zfs-driver/
這樣你就可以用'的zpool的命令行管理您的磁盤池。
例如,要打造 '只是一堆虛擬磁盤的':
[[email protected] /]# mkdir /dsk
[[email protected] /]# dd if=/dev/zero of=/dsk/disk1 bs=1M count=750
[[email protected] /]# dd if=/dev/zero of=/dsk/disk2 bs=1M count=750
[[email protected] /]# dd if=/dev/zero of=/dsk/disk3 bs=1M count=750
[[email protected] /]# dd if=/dev/zero of=/dsk/disk4 bs=1M count=750
好吧,我們有750M每一個四個磁盤。現在創建一個單獨的ZFS池:
[[email protected] /]# zpool create CIALINUX /dsk/disk{1,2,3,4}
現在我們有一個名爲CIALINUX量,與幾乎3GB自動安裝在我們的/目錄:
[[email protected] /]# df -h |grep CIALINUX
CIALINUX 2,9G 18K 2,9G 1% /CIALINUX
其他命令,你可以自己探索是:
# zpool list
# zpool status
# zpool status -x
# zpool destroy CIALINUX
重要提示:最後一個'破壞'你的游泳池。請注意它。
一旦你擁有了你的zfs池,只需將你的文件作爲docker卷添加到每個容器的/ zpool-mounted-directory目錄中即可。
希望這個幫助社區。
注意這不是一種軟件RAID,你沒有四個磁盤寫分佈式I/O,所以你的性能不會像RAID卷那麼豐富。 – 2016-01-27 21:18:26
你會舉例說明如何讓這個腳本工作。在我的情況下,只想將ubuntu:14:04容器大小限制爲幾個MiB,並創建容器。 – askb 2015-11-07 14:28:38
運行cmd後出現以下錯誤:$ do_enable_quota 91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c 20 – askb 2015-11-07 15:13:15
發送177字節收到50字節454.00字節/秒 總大小爲0加速是0。從守護00 錯誤響應:沒有這樣的標識:91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c 錯誤:無法啓動容器:[91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c] – askb 2015-11-07 15:13:27