Dockerfile内のVOLUME
は何もしていません。コマンドラインの-v
は、実際にコンテナ内でディレクトリを利用できるようにしています。Dockerfileの中でVOLUMEを使用したいのはなぜですか?
VOLUME
のDockerマニュアルを読んだとき、なぜ私がDockerfileに書くのか、それともコマンドラインだけではないのか、私には分かりません。
Dockerfile内のVOLUME
は何もしていません。コマンドラインの-v
は、実際にコンテナ内でディレクトリを利用できるようにしています。Dockerfileの中でVOLUMEを使用したいのはなぜですか?
VOLUME
のDockerマニュアルを読んだとき、なぜ私がDockerfileに書くのか、それともコマンドラインだけではないのか、私には分かりません。
Dockerfileでボリュームを定義しても、ボリュームはデフォルトでホストに公開されません。代わりに、他のコンテナが他のDockerコンテナのボリュームにリンクできるようにリンクされたボリュームを設定します。これは、データを永続化する唯一の目的でコンテナを開始する「データコンテナ」構成でよく使用されます。ここに簡単な例があります:
docker run -d --name docker_data docker/image1
docker run -d --volumes-from docker_data --name new_container docker/image2
フラグは--volumes-from
です。
さらに詳しい説明はhttp://container-solutions.com/understanding-volumes-docker/を参照してください。
許容される回答に加えて、ボリュームを使用するための別の考慮事項はのパフォーマンスです。通常、Dockerで使用される階層化されたファイルシステム(通常、使用しているLinuxディストリビューションに応じて、AUFSまたはDevicemapper)は高速ではなく、ハイスループットのシナリオ(データベースやキャッシュディレクトリなど)でボトルネックになることがあります。 。
ボリュームは、ホストディレクトリに明示的にマップされていなくても、ホストファイルシステムへの単純なバインドマウントであり、データ書き込み時に高いスループットを実現します。さらに読書のために
は、interesting paper by IBMがドッカーボリューム(強調鉱山)を使用した場合のパフォーマンスへの影響について、いくつかの興味深い結論を含む、このトピックにあります:
AUFSは は驚くべきことではない大きなオーバーヘッドを紹介しますI/Oはいくつかの層を通過しているので[...]。 ファイルシステムまたはディスクを使用するアプリケーションは、ボリュームを使用してAUFS をバイパスする必要があります。 [...] コンテナ自体にオーバーヘッドはほとんどありませんが、 Dockerにはパフォーマンスの問題がありません。 ドッカーボリューム は、AUFSに格納されているファイルよりもはるかに優れたパフォーマンスを示します。