【Dockerの最新機能を使ってみよう】Dockerのボリュームプラグインとストレージドライバについて知る 2ページ

Dockerが使用するストレージへのアクセスを提供する「ストレージドライバ」

 続いて、ストレージドライバについて説明していこう。前述のとおり、ストレージドライバはDockerがイメージを管理するために使用する機構だ。Docker 1.10では、表1の6つのストレージドライバが提供されている。

表1 Docker 1.10で利用できるストレージドライバ
ドライバ名使用するストレージ
overlayOverlayFS
aufsAUFS
btrfsBtrfs
devicemapperDevice Mapper
vfsVFS(イメージの差分管理を行わない)
zfsZFS

 1つのホスト上では1つのドライバしか利用できない。つまり、コンテナ毎に異なるストレージドライバを使うことはできない。現在使用されているドライバは「docker info」コマンドで確認できる。下記の例ではdevicemapperドライバが使われていることが分かる。

# docker info
  
  
Storage Driver: devicemapper
 Pool Name: docker-253:0-223022-pool
 Pool Blocksize: 65.54 kB
 Base Device Size: 10.74 GB
 Backing Filesystem: xfs
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 1.086 GB
 Data Space Total: 107.4 GB
 Data Space Available: 14.11 GB
 Metadata Space Used: 2.843 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.145 GB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Deferred Deletion Enabled: false
 Deferred Deleted Device Count: 0
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 WARNING: Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.109 (2015-09-22)
Execution Driver: native-0.2
  
  

 btrfsやzfsはそれぞれbtrfs、ZFS専用で、他のファイルシステムでは利用できない。逆にoverlayはbtrfsやAUFS、ZFS上、aufsはbtrfsおよびAUFS上では利用できないという制約がある。さらに、AUFSやZFSはLinuxカーネルでは標準サポートされておらず、利用のためには別途カーネルモジュールなどを用意する必要がある。Ubuntuなど一部のディストリビューションではこれらモジュールが標準で利用できるが、そうでないディストリビューションもあるため注意が必要だ。たとえばFedoraやRed Hat Enterprise Linux(RHEL)、CentOSではAUFSについて標準ではサポートされていない。

 使用するドライバはdocker daemon実行時の「–storage-driver=<ドライバ名>」引数で指定できる。また、ディストリビューションによっては別途特別な設定ツールが用意されている場合がある。たとえばRed Hat Enterprise Linux/CentOS/Fedoraでは「docker-storage-setup」というツールが用意されており、devicemapperおよびoverlayドライバを利用するための設定を自動的に行えるようになっている。

 なお、Docker公式ドキュメントの「Select a storage driver」ページによると、「production-ready」(実運用環境で利用可能な段階)となっているのはaufsとdevicemapperのみとされている。overlayドライバおよびzfs(ZFS FUSE経由での利用)については「stable」(安定)となっているが、まだテスト・検証向けという段階のようだ(表2)。

表2 各ストレージドライバの特徴
ドライバ名Linuxカーネルでの標準サポート実運用環境での利用安定度適した用途適さない用途
aufsなし安定PaaS等での利用書き込み頻度の高いもの
devicemapper(loopback利用)あり×安定研究/テストパフォーマンスが要求されるもの
devicemapper(LVM利用)あり安定PaaS等での利用
brtfsあり××ビルドプール書き込み頻度が高いもの、コンテナの頻繁な操作
overlayあり×安定研究/テストコンテナの頻繁な操作
zfs(ZFS on Linux利用)なし××PaaS等での利用
zfs(FUSE利用)なし×安定研究/テスト

overlayドライバを利用してみる

 前述のように、現時点で実運用環境向けに推奨されているドライバはaufsおよびdevicemapperのみだ。そのためUbuntuではaufsが、Red Hat Enterprise LinuxやCentOS、Fedoraではdevicemapperがデフォルトのストレージドライバになっている。いっぽう、よりパフォーマンスの良いドライバとして注目されているのがoverlayドライバだ。ovarlayドライバはほかのドライバと比較してコンテナの起動/停止時のパフォーマンスが優れていると言われている。overlayドライバは実運用環境向けではないというステータスだが、テスト環境などでの利用においては十分安定しているようだ。そこで、以下ではこのoverlayドライバを利用するための設定を紹介する。

 まずRed Hat Enterprise Linux/CentOS/Fedora環境のデフォルト設定ではストレージドライバとしてdevicemapperが利用されるが、overlayドライバも標準でサポートされており、簡単な設定で利用が可能だ。まず、/etc/sysconfig/docker-storage-setupファイル内に下記の1行を追加する。

STORAGE_DRIVER=overlay

 続いて「docker-storage-setup」コマンドを実行すると、各種設定が自動的に変更される。

# docker-storage-setup

 また、現時点ではoverlayドライバはSELinuxが有効だと正しく動作しない。SELinuxを「Permissive」設定にする(「setenfoce」コマンドで0に設定する)のではなく完全に無効にする必要があるため、/etc/sysconfig/selinuxファイル内の「SELINUX=」部分を次のように修正して再起動しておく。

SELINUX=disabled

 以上が完了した状態でdockerサービスを起動すると、overlayドライバが利用されるようになる。

 また、Ubuntuでは/etc/default/dockerファイル内の「DOCKER_OPTS」変数でDockerデーモンに与えるオプションを指定できるので、ここで下記のように「–storage-driver=」オプションを追加すれば良い。

DOCKER_OPTS="--storage-driver=overlay"

 続いてDockerサービスを再起動すると、overlayドライバが利用されるようになる。

systemctl restart docker.service

 どちらも場合も、Dockerの再起動後は「docker info」コマンドでoverlayドライバが利用されているかを確認しておこう。

# docker info
  
  
Storage Driver: overlay
 Backing Filesystem: extfs
  
  

着実に進化したDockerのストレージ関連機構

 かつてのDockerにおいてはボリュームの管理方法等がやや不明確であったが、ボリュームプラグインの導入と「docker volume」コマンドの導入によって管理が容易になっている。また、複数のDockerホストを組み合わせた環境においては、プラグインを利用してネットワーク経由でアクセスできるストレージをボリュームとして利用することで、Dockerのみで簡単に異なるDockerホスト上にあるコンテナ間でボリュームを共有できるようになっている。これによって、より容易に複数のDockerホストを組み合わせたクラスタ環境を構築できるようになる。

 またストレージドライバについては、一部はまだ開発途上の技術ではあるものの、overlayドライバを実際に利用してみると、確かにコンテナの起動や削除などが高速になったように感じられた。まだ実運用環境にはおすすめできないというステータスではあるが、テスト環境等、万が一トラブルが発生したとしても影響が少ない用途では試してみる価値はあるだろう。