2015-03-13 45 views
5

我遇到了在Docker容器上有磁盤配額的要求。具體而言,我想限制不在基礎圖像層中但在差異中的數據量。谷歌搜索「碼頭磁盤配額」建議使用device mapper或btrfs後端。同時能夠在兩個後端配額(具有不同的語義)都有自己的問題:如何爲Docker容器定義磁盤配額?

  • BTRFS是不是在生產中使用足夠穩定
  • 設備映射僅限制了完整的容器大小,包括基本圖像,但不允許限制差異

解決此問題的最佳方法是什麼?

回答

2

解決此問題的一種方法是將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」指令才能安裝進去。

+0

你會舉例說明如何讓這個腳本工作。在我的情況下,只想將ubuntu:14:04容器大小限制爲幾個MiB,並創建容器。 – askb 2015-11-07 14:28:38

+0

運行cmd後出現以下錯誤:$ do_enable_quota 91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c 20 – askb 2015-11-07 15:13:15

+0

發送177字節收到50字節454.00字節/秒 總大小爲0加速是0。從守護00 錯誤響應:沒有這樣的標識:91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c 錯誤:無法啓動容器:[91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c] – askb 2015-11-07 15:13:27

1

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目錄中即可。

希望這個幫助社區。

+0

注意這不是一種軟件RAID,你沒有四個磁盤寫分佈式I/O,所以你的性能不會像RAID卷那麼豐富。 – 2016-01-27 21:18:26