Container Storage の概要
このトピックでは、コンテナーが Windows 上のストレージを使用するさまざまな方法の概要について説明します。 コンテナーの動作は、ストレージに関しては仮想マシンとは異なります。 コンテナーは、本質的に、ホストのファイルシステム全体に状態を書き込むのを防ぐために構築されています。 コンテナーでは既定で "スクラッチ" 領域が使用されますが、Windows ではストレージを保持する手段も提供されます。
スクラッチ スペース
Windows コンテナーでは、既定でエフェメラル ストレージが使用されます。 すべてのコンテナー I/O は "スクラッチスペース" で行われ、各コンテナーはそれぞれのスクラッチを持ちます。 ファイルの作成とファイルの書き込みはスクラッチ領域にキャプチャされ、ホストにエスケープされません。 コンテナー インスタンスが停止すると、スクラッチ領域で発生したすべての変更が破棄されます。 新しいコンテナー インスタンスが開始されると、インスタンスに新しいスクラッチ領域が提供されます。
レイヤー ストレージ
「コンテナーの概要」で説明されているように、コンテナー イメージは、一連のレイヤーとして表されるファイルのバンドルです。 レイヤー ストレージは、コンテナーに組み込まれているすべてのファイルです。 あなたがそのコンテナーを docker pull
してから docker run
するたびに、その状態は同じままです。
レイヤーの保存場所とその変更方法
既定のインストールでは、レイヤーは C:\ProgramData\docker
に格納され、"image" ディレクトリと "windowsfilter" ディレクトリに分割されます。 Windows の Docker エンジンのドキュメントに示すように、docker-root
構成を使用してレイヤーの格納場所を変更できます。
手記
レイヤー ストレージでは NTFS のみがサポートされています。 ReFS およびクラスター共有ボリューム (CSV) はサポートされていません。
レイヤー ディレクトリ内のファイルは変更しないでください。これらのファイルは、次のようなコマンドを使用して慎重に管理されます。
レイヤー ストレージでサポートされる操作
コンテナーを実行すると、トランザクションを除き、ほとんどの NTFS 操作を使用できます。 これには ACL の設定が含まれており、すべての ACL がコンテナー内でチェックされます。 コンテナー内で複数のユーザーとしてプロセスを実行する場合は、RUN net user /create ...
を使用して Dockerfile
にユーザーを作成し、ファイル ACL を設定してから、Dockerfile USER ディレクティブを使用してそのユーザーと共に実行するようにプロセスを構成できます。
永続的ストレージ
Windows コンテナーは、バインド マウントとボリュームを介して永続的なストレージを提供するためのメカニズムをサポートします。 詳細については、「コンテナー での永続的ストレージの」を参照してください。
ストレージの制限
Windows アプリケーションの一般的なパターンは、新しいファイルをインストールまたは作成する前に、または一時ファイルをクリーンアップするためのトリガーとして、空きディスク領域の量を照会することです。 アプリケーションの互換性を最大化することを目的として、Windows コンテナー内の C: ドライブは 20 GB の仮想フリー サイズを表します。
一部のユーザーは、この既定値をオーバーライドし、空き領域をより小さい値または大きい値に構成できます。 これは、"storage-opt" 構成内の "size" オプションを使用して実現できます。
例
コマンド ライン: docker run --storage-opt "size=50GB" mcr.microsoft.com/windows/servercore:ltsc2019 cmd
または、docker 構成ファイルを直接変更できます。
"storage-opts": [
"size=50GB"
]
ヒント
このメソッドは、Docker ビルドでも機能します。 docker 構成ファイルの変更の詳細については、docker の構成に関するドキュメントを参照してください。