ストレージ・ドライバの選択¶
このページは 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 です。コード基盤はオープンソース版の Docker Engine と同じですが、ある範囲における設定をサポートしてます。これら サポートしている設定の範囲 では、最も安定かつ成熟したストレージ・ドライバを使います。これらの設定から外れれば、バグや微妙な差違に遭遇する可能性が増えるかもしれません。
経験と専門知識¶
ストレージ・ドライバの選択には、あなたと皆さんのチーム・組織で使ったことがあるものを選びます。例えば、RHEL や派生ディストリビューションを使っている場合は、既に LVM と Device Mapper の使用経験があるでしょう。その場合は、 devicemapper
ドライバの使用が望ましいでしょう。
Docker がサポートしているストレージ・ドライバの利用経験がないのであれば、どうしたら良いでしょうか。簡単に使える安定した Docker を使いたいのであれば、ディストリビューションが提供する Docker パッケージを使い、そこで使われているデフォルトのドライバの使用を検討すべきでしょう。