gpt4 book ai didi

docker - 如何为docker容器定义磁盘配额?

转载 作者:行者123 更新时间:2023-12-02 03:02:17 25 4
gpt4 key购买 nike

我面临着对 docker 容器进行磁盘配额的要求。具体来说,我想限制不在基本图像层中但在差异中的数据量。谷歌搜索“docker磁盘配额”建议使用 device mapper或 btrfs 后端。虽然能够在两个后端(具有不同语义)都有配额,但都有各自的问题:

  • btrfs 不够稳定,无法用于生产
  • 设备映射器仅限制包括基础镜像在内的完整容器大小,但不允许限制差异

解决这个问题的最佳方法是什么?

最佳答案

解决此问题的一种方法是将 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
}

这种方法非常适合我,但缺点是我需要包装“start”、“stop”和“rm”命令来考虑挂载。

关于docker - 如何为docker容器定义磁盘配额?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29029326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com