ストレージ・ドライバの選択

このページは Docker のストレージ・ドライバ機能を説明します。Docker がサポートしているストレージ・ドライバの一覧と、ドライバ管理に関連する基本的なコマンドをみていきます。ページの最後では、ストレージ・ドライバの選び方のガイドを提供します。

このページは、既に ストレージ・ドライバ技術を理解 している読者を想定しています。

交換可能なストレージ・ドライバ構造

Docker は接続可能な(pluggable)ストレージ・ドライバ構造を持っています。そのため、自分の環境や使い方に応じて、ベストなストレージ・ドライバを「プラグイン」(接続)できるので、柔軟さをもたらします。各 Docker のストレージ・ドライバは、 Linux ファイルシステムやボリューム・マネージャに基づいています。そのうえ、各ストレージ・ドライバはイメージ・レイヤとコンテナ・レイヤの管理を、各々の独自手法により自由に管理方法を実装できます。つまり、同じストレージ・ドライバであっても、異なった状況では性能が良くなるのを意味します。

どのドライバがベストかを決めたら、Docker デーモンの起動時にドライバを指定するだけです。Docker デーモンは対象のストレージ・ドライバを使って起動します。そして、デーモン・インスタンスによって作成される全てのコンテナは、全てその同じストレージ・ドライバを使っています。次の表はサポートされているストレージ・ドライバ技術とドライバ名です。

技術 ストレージ・ドライバ名
OverlayFS overlay
AUFS aufs
Btrfs btrfs
Device Mapper devicemapper
VFS* vfs
ZFS zfs

デーモンで何のストレージ・ドライバが設定されているか確認するには、 docker info コマンドを使います。

$ docker info
Containers: 0
Images: 0
Storage Driver: overlay
 Backing Filesystem: extfs
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.19.0-15-generic
Operating System: Ubuntu 15.04
... 以下の出力は省略...

info サブコマンドによって明らかになったのは、Docker デーモンが overlay ストレージ・ドライバを使い、Backing Filesystemextfs の値にしています。 extfs の値は、 overlay ストレージ・ドライバの押す差を既存の(ext)ファイルシステム上で行うという意味があります。

自分がどのストレージ・ドライバを使うかの選択にあたり、部分的に、Docker ホストのローカル・ストレージ領域で使おうとするファイルシステムに依存します。いくつかのストレージ・ドライバは、異なったファイルシステム技術の上でも操作できます。しかしながら、特定のストレージ・ドライバは特定のファイルシステム技術を必要とします。例えば、 btrfs ストレージ・ドライバは btrfs ファイルシステム技術を使う必要があります。以下の表は、各ストレージ・ドライバが、それぞれホスト上の何のファイルシステム技術をサポートしているかの一覧です。

ストレージ・ドライバ ファイルシステムと一致する必要があるか
OverlayFS いいえ
aufs いいえ
btrfs はい
devicemapper いいえ
vfs* いいえ
zfs はい

設定するには docker daemon コマンドで --storage-driver=<名前> オプションを使うか、あるいは、 /etc/defaults/docker ファイル中の DOCKER_OPTS 行を編集します。

以下のコマンドは Docker デーモンを起動しています。 docker daemon コマンドで devicemapper ストレージ・ドライバを指定しています。

$ docker daemon --storage-driver=devicemapper &

$ docker info
Containers: 0
Images: 0
Storage Driver: devicemapper
 Pool Name: docker-252:0-147544-pool
 Pool Blocksize: 65.54 kB
 Backing Filesystem: extfs
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 1.821 GB
 Data Space Total: 107.4 GB
 Data Space Available: 3.174 GB
 Metadata Space Used: 1.479 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.146 GB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.90 (2014-09-01)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.19.0-15-generic
Operating System: Ubuntu 15.04
<出力を省略>

ストレージ・ドライバの選択は、コンテナ化されたアプリケーションの性能に影響を与えます。そのために大切になるのは、どのようなストレージ・ドライバのオプションが利用可能かを理解し、アプリケーションに対する正しい選択をすることです。このページの後半では、適切なドライバを選ぶためのアドバイスを扱います。

共有ストレージ・システムとストレージ・ドライバ

多くのエンタープライズでは、SAN や NAS アレイのような共有ストレージ・システムをストレージ容量に使います。性能や安定性を向上させるためだけでなく、プロビジョニング・冗長化・圧縮など、高度な機能を提供します。

Docker ストレージ・ドライバとデータ・ボリュームは、共有ストレージ・システムが提供するストレージ上でも操作可能です。そのため、これらの提供されるシステムによって、Docker の性能と可用性が増大させられます。しかしながら、 Docker はこれら基盤システムとは統合できません。

各ストレージ・ドライバは Linux ファイルシステムやボリューム・マネージャを基盤としているのを覚えておいてください。自分の共有ストレージ・システム上でストレージ・ドライバ(ファイスシステムやボリューム)を操作するベストプラクティスを理解してください。例えば、ZFS ストレージ・ドライバを XYZ 共有ストレージ・システム上で使うのであれば、XYZ 共有ストレージ・システム上の ZFS ファイルシステムの操作のベストプラクティスを理解すべきです。

どのストレージ・ドライバを選ぶべきか?

予想されているかもしれませんが、この疑問に対する答えは「その場合による」です。あるストレージ・ドライバの使用例が、特定の処理をする場合には優れていることもあります。決定にあたっては、以下の全ての要素を検討すべきでしょう。

あなたやチーム/組織が満足するストレージ・ドライバを選択します。そのストレージ・ドライバを、どれだけ(これまでに)経験してきたかを検討してください。相応の経験が無いのであれば、まったく新しいプロダクション環境で挑むのは、良い考えとは滅多にも言えないでしょう。研究やノート PC 上の利用であれば、そうではありませんが。

もしあなたの Docker インフラが何らかのサポート契約を受けているのであれば、より良いサポートを受けるという選択肢もあります。あるいは、サポート・パートナーの経験が無いまたは少なければ、ソリューションを必要としない場合もあるでしょう。

どのドライバを選択したとしても、強いコミュニティのサポートと勢いがあるのを覚えておいてください。