ホームページ  >  記事  >  運用・保守  >  docker ボリュームとマウントの違いは何ですか

docker ボリュームとマウントの違いは何ですか

WBOY
WBOYオリジナル
2022-03-08 16:53:053109ブラウズ

「docker volume」とマウントの違いは次のとおりです。「docker volume」は宣言的であり、「Docker Engine」自体はシステム内の特定のディレクトリを占有し、Docker はデフォルトで占有されたパスの下にボリュームを割り当てます。 . パス。マウントはマウント ポイントとしてパスを占有しません。

docker ボリュームとマウントの違いは何ですか

このチュートリアルの動作環境: linux7.3 システム、docker-1.13.1 バージョン、Dell G3 コンピューター。

Docker ボリュームとマウントの違いは何ですか

長期間にわたって、複数のコンテナーが同じデータ ディレクトリへのアクセスを共有する必要がある場合、またはコンテナー内のデータを永続化する必要がある場合 (これらはすべて、ディレクトリのマウント (バインド マウント) の形式を使用して、ホスト上のディレクトリをコンテナ内の指定されたディレクトリにマウントします。この方法で問題は解決できますが、この方法には常にいくつかの欠点があります。

    ##異なるサーバーにデプロイされたコンテナは、実際のディスク マウント ディレクトリに応じてパスを変更する必要があります。
  • 異なるオペレーティング システムのファイルとディレクトリのアクセス許可を使用すると、混乱したり怒ったりすることはありませんか?
これらの問題は、ボリュームを使用して解決できます。まずバインド マウントと Docker ボリュームを比較し、次にボリュームがバインド マウントの問題をどのように解決するかを見てみましょう。まず図を見てみましょう:

docker ボリュームとマウントの違いは何ですかこの図は docker ドキュメントからのものです。
この図は、バインド マウントとボリュームが実際にホストのファイル システムを使用していることを示しています。違いは、volume が docker 自体が管理するディレクトリ内のサブディレクトリであるため、権限によるマウントの問題が発生しないことと、ディレクトリのパスが docker 自体によって管理されるため、サーバーごとに異なるパスを指定する必要がないことです。パスを気にする必要はありません (実際にはすべてではありません。以下で気にします?)。次に、バインド マウントとボリュームのさまざまな使用法を見てみましょう。

1. コンテナを別のサーバーにデプロイする場合は、実際のディスク マウント ディレクトリに従ってパスを変更する必要があります。

例:

In Linux システムでは、マウント ディレクトリとして "/var/someDir" を使用することがよくあります。

ただし、Mac では、/var/ は実際のディレクトリではありません。Mac ユーザーは、Linux よりも高度であると言うでしょう。 /var/ は使用しません。ユーザーはそれを必要としません;

Windows システムでは、Windows ユーザーは次のように尋ねます: /var/ とは何ですか? CドライブとDドライブが最も合理的な区分です~~

誰もが自分が一番ハンサムだと言っていますが、誰が一番ハンサムですか
Mac の var ディレクトリはソフト リンクです
#2。さまざまなオペレーティング システムのファイルとディレクトリのアクセス許可を使用すると、混乱したり怒ったりするでしょう?

もともと Linux システムでのテストは非常に良好でしたが、その結果、Windows でのマウント パスにさまざまな問題が発生しました。ここでは詳しく説明しません。これらの問題が発生していない場合は、試してみてください。それを体験してください。でも、結局のところ、Linux と同じなので、Mac の方が優れています。

Docker にはマウント方法以外にデータを永続化できる Volume というものがありますが、恥ずかしい話ですが、私は Docker を長く使ってきて、マウントを Volume だと思ってきました。 Docker-compose ファイル内で、コンテナとホストのマウント パスのマッピング関係をボリューム セクションに記述することは問題ありませんが、これは常に誤解されています。 。 (派手な非難?)

実際には、「マウント」と「Docker ボリューム」は同じものではありません。特定の違いがあります。Docker ボリュームは宣言型です。Docker エンジンそれ自体はシステム内の特定のディレクトリ (通常、Linux では「/var/lib/docker」) を占有し、Mac と Windows の両方で調整できます。ボリュームを宣言すると、Docker はデフォルトで占有パスの下にあるボリュームにパスを割り当てます。例:

Title
マウントに相対, volume 自身の「サイト」にマウントポイントとしてパスを割り当てるのはDocker Engineであり、自身のサイトの権限を明確に整理する必要があります。したがって、ホストパスを実装する際の上記の問題は解決されます。 ?

これを使用する場合は、ホスト パス名の代わりにボリューム名を使用してください。上記で「test_vol」という名前のボリュームを作成したと仮定します。

  1. docker run -d -v "test_vol:/var/data" some_image、これによりコンテナ内の /var/data ディレクトリが "test_vol" のマウント ポイントにマウントされます;
  2. docker-compose でも同様ですが、ボリュームは docker-compose.yaml ファイルで宣言する必要があります。上記の例を変更してみましょう。

イメージとボリュームの両方を保存する必要があるため、ボリュームにより docker ディレクトリが拡張されることに注意してください。システム ディスクには置かないことをお勧めします。 . docker インストール ディレクトリを別のより大きなマウント ディスクに構成します。

この 2 つは動作が異なります。コンテナ外部の対応するディレクトリが空の場合、ボリュームはまずコンテナ内のコンテンツをコンテナ外部のディレクトリにコピーしますが、マウントはコンテナの内部ディレクトリにある外部ディレクトリを上書きします。ディレクトリ! ! ボリューム バインド マウントのもう 1 つの欠点は、nginx コンテナーの構成ファイル nginx.conf をマウントするなど、ファイルを直接マウントできないことです。

  1. ここで、構成ファイルと同様の単一ファイル方式はボリュームの使用には適していないことに注意してください。バインド マウントでも問題は解決できますが、構成ファイルには次のような機密情報が含まれているためです。データベースのパスワード、したがって、最良の方法は tmpfs を使用することです。
  2. kubernetes のボリュームにも同様の設計が反映されており、subPath で構成ファイルのマウントの問題を解決できますが、実際の最良の方法は configMap を使用することです。
  3. 推奨される学習: 「
  4. docker ビデオ チュートリアル

以上がdocker ボリュームとマウントの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。