ストレージ・ドライバの選択¶
このページは 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 Filesystem
を extfs
の値にしています。 extfs
の値は、 overlay
ストレージ・ドライバの押す差を既存の(ext)ファイルシステム上で行うという意味があります。
自分がどのストレージ・ドライバを使うかの選択にあたり、部分的に、Docker ホストのローカル・ストレージ領域で使おうとするファイルシステムに依存します。いくつかのストレージ・ドライバは、異なったファイルシステム技術の上でも操作できます。しかしながら、特定のストレージ・ドライバは特定のファイルシステム技術を必要とします。例えば、 btrfs
ストレージ・ドライバを使うには btrfs
ファイルシステム技術を使う必要があります。以下の表は、各ストレージ・ドライバが、それぞれホスト上の何のファイルシステム技術をサポートしているかの一覧です。
ストレージ・ドライバ | ファイルシステムと一致する必要があるか |
---|---|
OverlayFS | いいえ |
aufs | いいえ |
btrfs | はい |
devicemapper | いいえ |
vfs* | いいえ |
zfs | はい |
ストレージ・ドライバを設定するには docker daemon
コマンドで --storage-driver=<名前>
オプションを使うか、あるいは、 /etc/default/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
<出力を省略>
ストレージ・ドライバの選択は、コンテナ化されたアプリケーションの性能に影響を与えます。そのために大切になるのは、どのようなストレージ・ドライバのオプションが利用可能かを理解し、アプリケーションに対する正しい選択をすることです。このページの後半では、適切なドライバを選ぶためのアドバイスを扱います。
どのストレージ・ドライバを選ぶべきか?¶
ストレージ・ドライバの選択に影響を与える複数の要素があります。しかしながら、2つの事実を覚え続けなくてはけません。
- 全てのユースケースに適用できるドライバは存在しない
- ストレージ・ドライバは常に改良・進化し続けている
これらの要素を頭に入れつつ、以下で扱うポイントと表が、検討にあたっての材料になるでしょう。
安定性¶
Docker の利用にあたり、最も安定かつ手間がかからないという面では、以下の点が考えられます。
- ディストリビューションの標準ストレージ・ドライバを使います 。Docker をインストールすると気、システム上の設定に応じてデフォルトのストレージ・ドライバが選択されます。デフォルトのストレージ・ドライバを使うことは、安定性に対する重要な要素になります。デフォルトのものを使わないと、バグや微妙な差違に遭遇する可能性が増えるかもしれません。
- CS Engine 互換表の詳細内容をご確認ください ( 互換表 )。CS Engine とは Docker Engine の商用サポート版です。コード基盤はオープンソース版の Engine と同じですが、特定範囲の設定がサポートされています。これら サポートされている設定の範囲 では、最も安定かつ成熟したストレージ・ドライバを使います。これらの設定から外れると、バグや微妙な差違に遭遇する可能性が増えるかもしれません。
経験と専門知識¶
ストレージ・ドライバの選択には、あなたと皆さんのチーム・組織で使ったことがあるものを選びます。たとえば、RHEL や下流の分岐したものを使っている場合は、既に LVM と Device Mapper の使用経験があるでしょう。その場合は、 devicemapper
ドライバの使用が望ましいでしょう。
Docker がサポートしているストレージ・ドライバの利用経験が無いのであれば、どうしたらよいでしょうか。簡単に使える安定した Docker を使いたいのであれば、ディストリビューションが提供する Docker パッケージを使い、そこで使われているデフォルトのドライバ使用を検討すべきでしょう。