5.4. グラフドライバーの選択
コンテナーのランタイムは、イメージとコンテナーを DeviceMapper および OverlayFS などのグラフドライバー (プラグ可能なストレージ技術) に保存します。グラフドライバーは DeviceMapper、OverlayFS、Btrfs などのプラグ可能なストレージ技術です。
サポート内容や使用方法の注意点など、OverlayFS に関する詳しい情報は、Red Hat Enterprise Linux (RHEL) 7 リリースノート を参照してください。
名前 | 説明 | 利点 | 制限 |
---|---|---|---|
OverlayFS
| 下層 (親) および上層 (子) のファイルシステムと作業ディレクトリー (子と同じファイルシステム) を組み合わせます。下層のファイルシステムはベースイメージで、新規コンテナーを作成すると、差分が含まれる新しい上層ファイルシステムが作成されます。 |
| POSIX に準拠しません。 |
デバイスマッパーのシンプロビジョニング | LVM、デバイスマッパー、dm-thinp カーネルモジュールを使用します。ループバックデバイスを削除して、ローパーティション (ファイルシステムなし) に直接移動する点が異なります。 |
|
|
デバイスマッパー loop-lvm | デバイスマッパーのシンプロビジョニングモジュール (dm-thin-pool) を使用して、copy-on-write (CoW) スナップショットを実装します。デバイスマッパーのグラフの場所ごとに、ブロックデバイス 2 つをベースに (1 つはデータ、1 はメタデータ)、シンプールが作成されます。デフォルトでは、これらのブロックデバイスは、自動作成されたスパースファイルのループバックマウントを使用して、自動的に作成されます。 | カスタマイズなしですぐに使用できるので、プロトタイプ化や開発の目的で役立ちます。 |
|
パフォーマンスを強化するために、デバイスマッパーよりも overlayFS ストレージドライバー を使用することが推奨されます。実稼働環境でデバイスマッパーをすでに使用している場合、コンテナーイメージおよびコンテナールートファイルシステムにシンプロビジョニングを使用することを推奨します。そうでない場合、Docker エンジンに overlayfs2 を使用するか、または CRI-O に overlayFS を使用します。
ループデバイスを使用すると、パフォーマンスに影響する可能性があります。そのまま使用を継続できますが、以下の警告メッセージがログに記録されます。
devmapper: Usage of loopback devices is strongly discouraged for production use. Please use `--storage-opt dm.thinpooldev` or use `man docker` to refer to dm.thinpooldev section.
ストレージの設定を容易にするには、docker-storage-setup
ユーティリティーを使用して、設定の詳細の多くを自動化します。
Overlay の場合
/etc/sysconfig/docker-storage-setup ファイルを編集し、デバイスドライバーを指定します。
STORAGE_DRIVER=overlay2
注記CRI-O を使用している場合は、
STORAGE_DRIVER=overlay
を指定します。CRI-O の場合、デフォルトの
overlay
ストレージドライバーはoverlay2
の最適化を使用します。OverlayFS で、別の論理ボリュームに
imagefs
が必要な場合は、CONTAINER_ROOT_LV_NAME
とCONTAINER _ROOT_LV_MOUNT_PATH
を設定する必要があります。CONTAINER_ROOT_LV_MOUNT_PATH
を設定するにはCONTAINER_ROOT_LV_NAME
を設定する必要があります。例:CONTAINER_ROOT_LV_NAME="container-root-lv"
詳細は、Overlay Graph Driver の使用 を参照してください。Docker ストレージ専用に別のディスクドライブがある場合 (例: /dev/xvdb) には、以下を /etc/sysconfig/docker-storage-setup ファイルに追加します。
DEVS=/dev/xvdb VG=docker_vg
docker-storage-setup
サービスを再起動します。# systemctl restart docker-storage-setup
docker が overlay2 を使用していることを確認して、ディスク領域の使用状況を監視するには、
docker info
コマンドを実行します。# docker info | egrep -i 'storage|pool|space|filesystem'
出力例
Storage Driver: overlay2 1 Backing Filesystem: extfs
- 1
overlay2
を使用する場合のdocker info
出力。
Overlay は、Red Hat Enterprise Linux 7.2 以降で、コンテナーランタイムのユースケースもサポートし、起動時間の加速化、ページキャッシュ共有が可能になり、全体的なメモリー使用率を下げて高密度化できる可能性があります。
Thinpool の場合
/etc/sysconfig/docker-storage-setup ファイルを編集し、デバイスドライバーを指定します。
STORAGE_DRIVER=devicemapper
Docker ストレージ専用に別のディスクドライブがある場合 (例: /dev/xvdb) には、以下を /etc/sysconfig/docker-storage-setup ファイルに追加します。
DEVS=/dev/xvdb VG=docker_vg
docker-storage-setup
サービスを再起動します。# systemctl restart docker-storage-setup
再起動後に、
docker-storage-setup
で、docker_vg
という名前のボリュームを設定して、シンプールの論理ボリュームを作成します。RHEL でのシンプロビジョニングに関するドキュメントは、LVM 管理ガイド で確認できます。新規作成したボリュームは、lsblk
コマンドで表示します。# lsblk /dev/xvdb
出力例
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvdb 202:16 0 20G 0 disk └─xvdb1 202:17 0 10G 0 part ├─docker_vg-docker--pool_tmeta 253:0 0 12M 0 lvm │ └─docker_vg-docker--pool 253:2 0 6.9G 0 lvm └─docker_vg-docker--pool_tdata 253:1 0 6.9G 0 lvm └─docker_vg-docker--pool 253:2 0 6.9G 0 lvm
注記シンプロビジョニングされたボリュームはマウントされず、ファイルシステムもないので (個別のコンテナーには XFS ファイルシステムがない)、
df
の出力には表示されません。Docker が LVM シンプールを使用していることを確認して、ディスク領域の使用状況をモニターリングするには、
docker info
コマンドを使用します。# docker info | egrep -i 'storage|pool|space|filesystem'
出力例
Storage Driver: devicemapper 1 Pool Name: docker_vg-docker--pool 2 Pool Blocksize: 524.3 kB Backing Filesystem: xfs Data Space Used: 62.39 MB Data Space Total: 6.434 GB Data Space Available: 6.372 GB Metadata Space Used: 40.96 kB Metadata Space Total: 16.78 MB Metadata Space Available: 16.74 MB
デフォルトでは、シンプールは下層のブロックデバイスの 40% を使用するように設定されています。ストレージを使用していくにつれ、LVM は自動的にプールを最大 100% まで拡張します。Data Space Total
の値が下層の LVM デバイスの古サイズに一致しないのは、この理由によります。
開発では、Red Hat ディストリビューションの Docker では ループバックをマウントしたスパースファイルにデフォルト設定されています。お使いのシステムで、ループバックモードを使用しているかどうかを確認するには、以下を実行します。
# docker info|grep loop0
出力例
Data file: /dev/loop0
5.4.1. SELinux で OverlayFS または DeviceMapper を使用する利点
OverlayFS ファイルシステムの主な利点は、同じノードでイメージを共有するコンテナー間で、Linux ページキャッシュが共有される点です。OverlayFS のこの特性により、コンテナーの起動時の出入力 (I/O) が減り (数百ミリ秒単位でコンテナーの起動時間が短縮)、同様のイメージがノードで実行されている場合にメモリーの使用率が減少します。これらはいずれも、(ビルドファームなど) コンテナーのチャーンレートを高め、密度の最適化を目指す場合や、イメージの内容に重複が多い場合など、多くの環境で利点があります。
シンプロビジョニングのデバイスがコンテナーごとに割り当てられるので、DeviceMapper ではページキャッシュの共有はできません。
OverlayFS は、Red Hat Enterprise Linux (RHEL) 7.5 のデフォルトの Docker ストレージドライバーであり、7.3 以降でサポートされています。OverlayFS を RHEL のデフォルトの Docker ストレージ設定に設定して、パフォーマンスを向上させます。Docker コンテナーランタイムで使用するために OverlayFS を設定する 手順 を参照してください。