5.4. グラフドライバーの選択


コンテナーのランタイムは、イメージとコンテナーを DeviceMapper および OverlayFS などのグラフドライバー (プラグ可能なストレージ技術) に保存します。グラフドライバーは DeviceMapper、OverlayFS、Btrfs などのプラグ可能なストレージ技術です。

サポート内容や使用方法の注意点など、OverlayFS に関する詳しい情報は、Red Hat Enterprise Linux (RHEL) 7 リリースノート を参照してください。

表5.3 グラフドライバーの比較
名前説明利点制限

OverlayFS

  • overlay
  • overlay2

下層 (親) および上層 (子) のファイルシステムと作業ディレクトリー (子と同じファイルシステム) を組み合わせます。下層のファイルシステムはベースイメージで、新規コンテナーを作成すると、差分が含まれる新しい上層ファイルシステムが作成されます。

  • コンテナーの起動、終了時間はデバイスマッパーよりも短いです。デバイスマッパーと Overlay の起動時間の違いは、1 秒未満です。
  • ページキャッシュの共有が可能です。

POSIX に準拠しません。

デバイスマッパーのシンプロビジョニング

LVM、デバイスマッパー、dm-thinp カーネルモジュールを使用します。ループバックデバイスを削除して、ローパーティション (ファイルシステムなし) に直接移動する点が異なります。

  • 中程度の負荷および高密度で、測定可能なパフォーマンスの利点があります。
  • 容量においてコンテナー別の制限があります (デフォルトは 10GB)。
  • 専用のパーティションが必要です。
  • Red Hat Enterprise Linux (RHEL) ではデフォルト設定されていません。
  • コンテナーおよびイメージはすべて、同じ容量のプールを共有します。プールを破棄または再作成せずに、リサイズはできません。

デバイスマッパー loop-lvm

デバイスマッパーのシンプロビジョニングモジュール (dm-thin-pool) を使用して、copy-on-write (CoW) スナップショットを実装します。デバイスマッパーのグラフの場所ごとに、ブロックデバイス 2 つをベースに (1 つはデータ、1 はメタデータ)、シンプールが作成されます。デフォルトでは、これらのブロックデバイスは、自動作成されたスパースファイルのループバックマウントを使用して、自動的に作成されます。

カスタマイズなしですぐに使用できるので、プロトタイプ化や開発の目的で役立ちます。

  • Portable Operating System Interface for Unix (POSIX) がすべて機能する訳ではありません (例: O_DIRECT)。最も重要な点として、このモードは実稼働環境のワークロードには対応していません。
  • コンテナーおよびイメージはすべて、同じ容量のプールを共有します。プールを破棄または再作成せずに、リサイズはできません。

パフォーマンスを強化するために、デバイスマッパーよりも 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 の場合

  1. /etc/sysconfig/docker-storage-setup ファイルを編集し、デバイスドライバーを指定します。

    STORAGE_DRIVER=overlay2
    注記

    CRI-O を使用している場合は、STORAGE_DRIVER=overlay を指定します。

    CRI-O の場合、デフォルトの overlay ストレージドライバーは overlay2 の最適化を使用します。

    OverlayFS で、別の論理ボリュームに imagefs が必要な場合は、CONTAINER_ROOT_LV_NAMECONTAINER _ROOT_LV_MOUNT_PATH を設定する必要があります。CONTAINER_ROOT_LV_MOUNT_PATH を設定するには CONTAINER_ROOT_LV_NAME を設定する必要があります。例: CONTAINER_ROOT_LV_NAME="container-root-lv"詳細は、Overlay Graph Driver の使用 を参照してください。

  2. Docker ストレージ専用に別のディスクドライブがある場合 (例: /dev/xvdb) には、以下を /etc/sysconfig/docker-storage-setup ファイルに追加します。

    DEVS=/dev/xvdb
    VG=docker_vg
  3. docker-storage-setup サービスを再起動します。

    # systemctl restart docker-storage-setup
  4. 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 の場合

  1. /etc/sysconfig/docker-storage-setup ファイルを編集し、デバイスドライバーを指定します。

    STORAGE_DRIVER=devicemapper
  2. Docker ストレージ専用に別のディスクドライブがある場合 (例: /dev/xvdb) には、以下を /etc/sysconfig/docker-storage-setup ファイルに追加します。

    DEVS=/dev/xvdb
    VG=docker_vg
  3. 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 の出力には表示されません。

  4. 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

    1
    devicemapper を使用する場合の docker info 出力。
    2
    /etc/sysconfig/docker-storage-setup で指定した VG に対応します。

デフォルトでは、シンプールは下層のブロックデバイスの 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 を設定する 手順 を参照してください。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.