Docker ストレージ ドライバ¶
理想的には、コンテナの書き込み可能なレイヤーへのデータが小さければ、データの書き込みには Docker ボリュームを使うでしょう。しかしながら、
Docker Engine は、ストレージ ドライバが明確に設定されていなければ、ストレージ ドライバが要件に合うよう、どれを使うのか優先順位を付けます。そして、互換性のあるストレージ ドライバを自動的に選びます。選ぶ順番は Docker Engine 20.10 のソースコード で見られます。
ストレージ ドライバによっては、
どのストレージ ドライバを使うのかを絞り込むのは、
Linux ディストリビューション別のサポート済みドライバ¶
注釈
Docker Desktop と Rootless モードの Docker
Docker Desktop for Mac と Docker Desktop for Windows では、 ストレージ ドライバの変更をサポートしておらず、デフォルトのストレージ ドライバのみ利用できます。以下の表は、 Rootless モードにも適用されません。Rootless モードで利用可能なドライバについては、 Rootless モードのドキュメント をご覧ください。
オペレーティングシステムと kernel によっては、すべてのストレージ ドライバをサポートしていない可能性があります。たとえば、 aufs
は Ubuntu と Debian のみサポートしています。また、 btrfs
をストレージとして使う場合、システムが btrfs
をサポートしていても、追加パッケージが必要になる場合があります。通常、最近の Linux ディストリビューションであれば以下の設定が動作します。
Linux ディストリビューション |
推奨されるストレージ ドライバ |
代替ドライバ |
---|---|---|
Ubuntu |
|
|
Debian |
|
|
CentOS |
|
|
Fedora |
|
|
SLES 15 |
|
|
RHEL |
|
- 1(1,2,3,4,5,6)
overlay
ストレージ ドライバは非推奨であり、今後のリリースで削除されます。overlay
ストレージ ドライバの利用者は、overlay2
への移行を推奨します。- 2(1,2,3,4,5,6)
devicemapper
ストレージ ドライバは非推奨であり、今後のリリースで削除されます。devicemapper
ストレージ ドライバの利用者は、overlay2
への移行を推奨します。- 3(1,2)
aufs
ストレージ ドライバは非推奨であり、今後のリリースで削除されます。aufs
ストレージ ドライバの利用者は、overlay2
への移行を推奨します。
未確定の場合、あらゆる用途でベストなのは、最近の Linux ディストリビューションと kernel がサポートしている overlay2
ストレージ ドライバを使う設定です。そして、書き込みが多い作業量の場合には、コンテナの書き込み可能なレイヤーに書き込みを依存するのではなく、 Docker ボリュームを使います。
vfs
ストレージ ドライバは、通常はベストな選択ではありませんが、他のストレージ ドライバがサポートされていない状況で、主に調査目的として使えます。 vfs
ストレージ ドライバを使う前に、 パフォーマンスとストレージの特徴および制限 をご覧ください。
上表での推奨項目は、多くの利用者に役立つと知られています。推奨する設定を使い、再現可能な問題を発見した場合は、素早い修正があるでしょう。この表で推奨されないドライバを使う場合は、自分自身でリスクを負って実行できます。実行にあたり、あらゆる問題は報告されるべきです。しかしながら、推奨される定を使った時に比べて、このような問題解決の優先度は低くなります。
Linux ディストリビューションに依存しますが、 btrfs
のようなストレージ ドライバが利用可能な場合があります。これらのストレージドライバは、特定の用途で有利になりますが、通常の利用では推奨されていない追加セットアップやメンテナンスが必要となる場合があります。詳細は、各ストレージ ドライバのドキュメントをご覧ください。
サポートしている基盤ファイルシステム¶
Docker は /var/lib/docker/
に位置していると想定しています。いくつかのストレージ ドライバは、特定の基盤ファイルシステムでのみ動作します。
ストレージ ドライバ |
サポートしている基盤ファイルシステム |
---|---|
|
|
|
あらゆるファイルシステム |
|
|
|
|
|
|
|
|
|
あらゆるファイルシステム |
他の検討事項¶
..-_suitability-for-your-workload: 処理内容に適しているかどうか ------------------------------
何より、それぞれのストレージドライバは自身の性能上の特徴があり、処理内容が変われば適している場合も、適さない場合もあります。以下のまとめを考えます。
overlay2
、aufs
、overlay
は、全ての処理をブロック単位ではなくファイル単位で行います。これはメモリを効率的に使いますが、書き込みがとても多い処理内容では、コンテナの書き込み可能なレイヤーが肥大化する可能性があります。devicemapper
、btrfs
、zfs
のようなブロック単位のストレージ ドライバは、書き込みが多い処理内容で、良いパフォーマンスです( Docker ボリュームと同じくらいではありませんが)。たくさんの小さな書き込みや、多くのレイヤーがあるコンテナや、階層が深いファイルシステムでは、
overalay
がoverlay2
よりパフォーマンスが良いかもしれませんが、多くの inode を消費するため、 inode の肥大化を招く可能性があります。btrfs
とzfs
は多くのメモリが必要です。zfs
は PaaS のような高密度の処理内容に対し、良い選択です。
パフォーマンス、安定性、ベストプラクティスに関する詳しい情報は、各ストレージ ドライバのドキュメントをご覧ください。
共有ストレージ システムとストレージドライバ¶
会社で SAN 、 NAS 、 ハードウェア RAID や他の共有ストレージ システムを使っている場合、それらが高可用性、パフォーマンス増加、シン プロビジョニング、冗長化、圧縮といった機能を提供しているかもしれません。多くの場合、これらのストレージ システム上でも Docker は動作します。しかし、 Docker はそれらと密接に統合されてはいません。
それぞれのストレージは、 Linux ファイルシステムやボリューム マネージャに基づいています。共有ファイルシステム上で、操作しようとしているストレージドライバの処理(ファイルシステムや ボリュームマネージャ)に関するベストプラクティスを確実に理解してください。たとえば、共有ファイルシステム上で ZFS ストレージドライバを使う場合、特定の共有ストレージシステム上で ZFS ファイルシステムを扱うベストプラクティスの理解が必要です。
安定性¶
利用者によっては、パフォーマンスよりも安定性の方が重要です。Docker では、ここで言及した全てのストレージ ドライバは安定していると考えており、他にも新しいものや活発な開発下にあるものも安定していると考えています。一般的に、 overlay2
、 aufs
、 devicemapper
は高い安定性のために選ばれます。
自分の処理内容をテスト¶
異なるストレージ ドライバ上で自身の処理内容を実行する時は、Docker のパフォーマンスをテストできます。同等のハードウェアと本番環境の状況に一致する処理内容で、どのストレージ ドライバが全体的なパフォーマンスがベストかを確認できます。
現在のストレージドライバを確認¶
個々のストレージドライバの詳細なドキュメントに、セットアップ手順や捨て緒レージドライバの使い方などの詳細があります。
Docker が現在どのストレージ ドライバを使っているか確認するには、 docker info
を使い、 Storage Driver
の行を探します。
$ docker info
Containers: 0
Images: 0
Storage Driver: overlay2
Backing Filesystem: xfs
<...>
ストレージ ドライバを変更するには、新しいストレージ ドライバの個々の手順を確認します。ドライバによっては、Docker ホスト上の物理ディスクもしくは論理ディスクの設定を含む、追加の設定を必要とします。
重要
ストレージ ドライバを変更すると、あらゆる既存のイメージとコンテナにアクセスできなくなります。これは、それらのレイヤーが新しいストレージ ドライバでは使えないためです。変更を戻せば、再び以前のイメージとコンテナにアクセスできますが、新しいドライバで取得または作成したイメージやコンテナには、アクセスできなくなります。