2016-10-24 8 views
1

私はDockerボリュームと、それらがホスト上のディレクトリを参照する方法を理解しています。コンテナ内の残りのファイルシステムはどうでしょうか?Dockerコンテナの非ボリュームデータはどのように格納されていますか?

リモートドライブにほとんどのストレージがあるサーバーがあるとします。これは、読み取りと書き込みに通常よりも時間がかかることを意味します。ボリュームをマウントしない場合は、コンテナファイルシステムのいくつか/ほとんど/すべてをRAMに保存しますか?それとも、ディスクにいくらかの量を書き込んでいますか?つまり、この場合ボリュームと同じくらい遅いでしょうか?

+0

推奨読書:セクション「イメージ、コンテナ、およびストレージドライバを理解する」(https://docs.docker。com/engine/userguide/storagedriver/imagesandcontainers /)を参照してください。 – helmbert

答えて

3

非ボリュームデータは、階層化されたオーバーレイファイルシステムに格納されます(ほとんどのディストリビューションでは、AUFSまたはDeviceMapperのファイルシステムになります)。原理は両方のケース(image source)に同じです。

enter image description here

はすでにコメントで述べたように、私は公式ドキュメントからセクション"Understand images, containers and storage drivers"を読んでお勧めすることができます。この答えは簡単な要約です。

各Dockerイメージは、ファイルシステムイメージの複数のレイヤーで構成されています。たとえば、Apache + PHPイメージは、(1)汎用Ubuntuベースレイヤー、(2)Apache HTTPサーバーがインストールされている追加レイヤー、(3)PHP-FPMおよび設定ファイル例)。

イメージから新しいコンテナを開始すると、コンテナごとの新しいレイヤが既存のイメージレイヤに追加されます。このレイヤーには、コンテナ自体(ボリューム以外のディレクトリ)に書き込まれたすべての変更が含まれます。あなたの具体的な質問については

:あなたはすべてのボリュームをマウントしていない場合は

、それはRAM内のコンテナファイルシステムのいずれか/いくつかの/ほとんど/すべてを保つでしょうか?

いいえ、通常のファイルシステムキャッシュ以外には何もありません。オーバレイファイルシステムにはすべて、AUFS、DeviceMapper、または別のストレージドライバを使用してマウントされています。

または、ディスクにいくらかの量を書き込んでいますか?つまり、この場合ボリュームと同じくらい遅いでしょうか?

一般に、ボリューム内のファイルシステムアクセスは、オーバーレイファイルシステムよりもパフォーマンスが優れています。結局のところ、ボリューム(少なくとも、ネットワークストレージボリュームを追加するボリュームドライバを除いて通常のホストベースのボリューム)は、レイヤファイルシステムを完全にバイパスして、ホストファイルシステムの通常のディレクトリへのバインドマウントです。ファイルシステムの層に比べてボリュームの性能はthis paperで調査(他のトピックの中)である:

AUFSは、I/Oは、いくつかの層を通過しているので、驚くべきことではない大きなオーバーヘッドを紹介し、[...] 。ファイルシステムまたはディスクを大量に使用するアプリケーションは、ボリュームを使用してAUFSをバイパスする必要があります。 [...]コンテナ自体にはオーバーヘッドはほとんどありませんが、Dockerにはパフォーマンスの問題がありません。 ドッカーボリュームのパフォーマンスは、AUFSに格納されているファイルよりもはるかに優れています()。

関連する問題