Edited at

dockerはOS上のディスク領域をどう使っているのかまとめた

More than 1 year has passed since last update.


dockerのディスクの使用方法


dataとmetadata

dockerはディスクの管理方法として、dm-thinというDeviceMapperの機能を使います。

詳細は以下を参考にして下さい。

dm-thinではデータ領域とメタデータ領域が必要なため、dockerは/var/lib/docker/devicemapper/devicemapperdataというデバイスファイルイメージと、metadataというデータを作成します。

fileコマンドで確認するとdataはext4 filesystemです

[root@master mnt]# ls -lh /var/lib/docker/devicemapper/devicemapper

合計 8.5G
-rw-------. 1 root root 100G 7月 15 11:27 data
-rw-------. 1 root root 2.0G 7月 15 11:14 metadata

[root@master mnt]# file /var/lib/docker/devicemapper/devicemapper/*
/var/lib/docker/devicemapper/devicemapper/data: Linux rev 1.0 ext4 filesystem data, UUID=8ee719d1-ac3e-48a7-8bc8-62315601204c (extents) (64bit) (large files) (huge files)
/var/lib/docker/devicemapper/devicemapper/metadata: data


ループバックデバイス

dockerは作成したdatametadataをデバイスにするためにループバックデバイスというLinuxの機能を使います。

※ループバックデバイス はディスクイメージファイルに対して、デバイスファイルを割り当てて、物理ディスクのよう に利用する機能です

[root@master mnt]# losetup

NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0 0 0 1 0 /var/lib/docker/devicemapper/devicemapper/data
/dev/loop1 0 0 1 0 /var/lib/docker/devicemapper/devicemapper/metadata


  • data→/dev/loop0

  • metadata→/dev/loop1

[root@master mnt]# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 200G 0 disk
sda1 8:1 0 500M 0 part /boot
sda2 8:2 0 199.5G 0 part
centos-swap 253:0 0 10.8G 0 lvm [SWAP]
centos-root 253:1 0 50G 0 lvm /
centos-home 253:2 0 138.8G 0 lvm /home
sr0 11:0 1 1024M 0 rom
loop0 7:0 0 100G 0 loop
docker-253:1-6851-pool 253:3 0 100G 0 dm
docker-253:1-6851-22f3507a1... 253:4 0 10G 0 dm
docker-253:1-6851-2cf034932... 253:5 0 10G 0 dm
loop1 7:1 0 2G 0 loop
docker-253:1-6851-pool 253:3 0 100G 0 dm
docker-253:1-6851-22f3507a1... 253:4 0 10G 0 dm
docker-253:1-6851-2cf034932... 253:5 0 10G 0 dm

loop0は、docker-253:1-6851-poolに100Gを割り当て、docker-253:1-6851-xxxx…にそれぞれ10Gづつ割り振っています。

ちなみにdocker-253:1-6851-pool/dev/mapper/docker-253:1-6851-xxx....はただのシンボリックリンクで、裏側にはDeviceMapperで作成された論理デバイスが存在します。

[root@master devicemapper]# ls -ltr /dev/mapper/docker-253\:1-6851-xxx...

lrwxrwxrwx 1 root root 8 7月 15 11:42 /dev/mapper/docker-253:1-6851-xxx...-> ../dm-19


dataとmetadata領域の保存先を変更する方法

こちらにも書いていますが/etc/sysconfig/docker-storageにて設定が可能です。


/etc/sysconfig/docker-storage

DOCKER_STORAGE_OPTIONS = --storage-opt dm.metadatadev=/dev/mylogvol/my-docker-metadata --storage-opt dm.datadev=/dev/mylogvol/my-docker-data


ちなみに公式ではこんなことを言っています。ループバックデバイスは遅いらしいですね。


The loopback makes it slower, and there are some restrictive defaults, such as 100GB max storage


コンテナで確認

dockerコンテナにログインしてdf -hを叩くと、先ほど確認したdocker-253:1-6851-xxxx…/領域にマウントされていることが確認できますね。

[root@5c10e21ed2f4 /]# df -h

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/docker-253:1-6851-xxx.... 9.8G 311M 8.9G 4% /
tmpfs 2.0G 0 2.0G 0% /dev
shm 64M 0 64M 0% /dev/shm
/dev/mapper/centos-root 50G 30G 21G 59% /etc/hosts
tmpfs 2.0G 0 2.0G 0% /proc/kcore
tmpfs 2.0G 0 2.0G 0% /proc/timer_stats

10G割り当てられていたdocker-253:1-6851-xxxx…は1つのコンテナのディスクの上限値ということですね。なお、シンプロビジョニングのため物理的に10G割り当てられているわけではないため、10個以上コンテナを作成しても問題ありません。


まとめ

dataloop0dm-x/dev/mapper/docker-253:1-6851-xxx....コンテナの/領域です