web-dev-qa-db-ja.com

限られたサイズでDockerボリュームを作成する

オプション「 https://docs.docker.com/engine/reference/commandline/volume_create/ "」を使用したボリュームの作成に関する情報は非常に限られています。

限られたサイズのボリュームを作りたいだけなのに、やってみました、

docker volume create --opt o=size=10m hello-volume

、「docker run -v hello-volume:/ hello -it ubuntu/bin/bash」を使用して単純なhelloworldコンテナを実行すると、「docker:デーモンからのエラー応答:…そのようなデバイスはありません」のようなエラーが発生しました…

したがって、ボリュームを作成するときに、次のような完全なオプションを指定する必要があると想定しました。

“docker volume create --driver local --opt type=*** --opt device=*** --opt o=size=10m hello-volume”

?もしそうなら、ここでの「タイプ」と「デバイス」は何ですか?デバイスは実際には任意のディレクトリへのパスだと思いますか?私は試した

“docker volume create --driver local --opt type=volume --opt device=/ --opt o=size=10m hello-volume”.

コンテナーを「dockerrun-v hello-volume:/ hello -it ubuntu/bin/bash」として実行しようとすると、「docker:デーモンからのエラー応答:ボリュームのマウント中にエラーが発生しました」/ var/lib/dockerというエラーが発生しました。/volume/hello-volume/_data ':オプション付きのボリュームのマウント中にエラーが発生しました:type =' volume 'device ='/'o =' size = 10m ':そのようなデバイスはありません。」.

私は試した

docker volume create --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=10m hello-volume

これは最終的には機能しますが、データは永続的ではないメモリにあります。では、ボリュームを作成するときの「タイプ」と「デバイス」のオプション(または、オプションを指定しない場合のデフォルトのオプション)を誰かが指摘できますか?

更新:

Ext4タイプのローカルドライバーのディスクサイズを制限する方法がないように思われることを更新したいだけです(ただし、いくつかの回答や他の投稿で実行可能であると主張されています)。主な理由は、「ext4」ファイルシステムにそのような「サイズ」パラメータがないことです。Dockerボリュームを作成しました。

docker volume create --driver local --opt type=ext4 --opt device=/dev/xvdf --opt o=size=10m hello-volume

次に、それを検査し(docker volume inspect hello-volume)、コンテナーでマウントします。今のところ、すべて正常に見えます。

[
    {
        "CreatedAt": "2018-09-01T04:23:57Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/hello-volume/_data",
        "Name": "hello-volume",
        "Options": {
            "device": "/dev/xvdf",
            "o": "size=10m",
            "type": "ext4"
        },
        "Scope": "local"
    }
]

docker run -v hello-volume:/myfile1 -exec -it ubuntu /bin/bash

しかし、そのコンテナの「/ myfile1」に大きなファイル(10mより大きい)を書き込む/置くと、アラート/例外はスローされず、書き込みは成功します。 「o = size = 10m」はext4タイプのファイルシステムでは認識されないと思います。

6
batilei

これは、実際にはdockers localボリュームドライバーを使用して可能です。このドライバーは、linux mount optionsと同様のオプションを受け入れます。この優れた 回答 をチェックしてください。

あなたはあなたの試みに近かった。 --opt device=--opt type=オプションを指定する必要があります。これにより、基本的に、ホスト上のブロックデバイスがボリュームとしてDockerコンテナにマウントされます。 typeオプションは、使用するファイルシステムタイプを指定します。 deviceオプションでは、ホスト上のブロックデバイスの1つ(たとえば、/dev/sda2)を指定する必要があります。 lsblkを実行すると、完全なリストを表示できます。

ただし、既存のドライブをマップすることはお勧めできません(使用されていない場合を除く)。したがって、(lvmまたは同等のものを使用して)新しいブロックデバイスを作成する必要があります。または、テストには、試したように揮発性ストレージ(tmpfs)を使用できます。

4
moebius

xfs_quota を使用して(dirを-vでバインドすることにより)Dockerボリュームのスペースを制限する問題を解決しました

データを保存する必要がある場所は、prjquotaオプションでマウントされたXFSボリュームです。

#~ mount 
/dev/mapper/centos_ssp--forfiter--07-home on /home type xfs (rw,[..],**prjquota**)

カーネルはそれをサポートする必要があると思います(rootflags = pquotaカーネルオプション)

上記のリンクの例:

Enabling project quota on an XFS filesystem (restrict files in log file directories to only using 1 gigabyte of space).
# mount -o prjquota /dev/xvm/var /var
# echo 42:/var/log >> /etc/projects
# echo logfiles:42 >> /etc/projid
# xfs_quota -x -c 'project -s logfiles' /var
# xfs_quota -x -c 'limit -p bhard=1g logfiles' /var

Docker用のプラグインもあります cirocosta/xfsvol

1
khadish

Dockerボリュームには、「ドライバー」が接続されています。 デフォルトのドライバは「ローカル」と呼ばれるものです そしてそれが行うのは/var/lib/dockerにディレクトリを作成してそれをコンテナにマウントすることだけです。ボリュームのサイズを指定(または制限)するオプションはありません。

1
David Maze