Dockerボリュームについて知っておくべきこと

Dockerボリュームについて知っておくべきこと

データボリュームとは

Docker コンテナを使用すると、一連のデータ ファイルが生成されます。これらのデータ ファイルは Docker コンテナが削除されると消えますが、その中に生成されたコンテンツの一部は他の目的のために保存される予定です。 Docker は、アプリケーションとオペレーティング環境をコンテナにパッケージ化してリリースします。プログラマーは、実行中のプロセス中に生成されたデータの一部を永続化できることを期待しており、コンテナ間でのデータ共有を実現したいと考えています。データ ボリュームは、1 つ以上のコンテナーで使用できる特別なディレクトリであり、ホスト オペレーティング システム ディレクトリをコンテナーに直接マッピングします。コンテナ内で変更されたコンテンツは、重要なログ、構成ファイルなど、ホストマシンの対応するディレクトリで確認できます。

データボリュームの特徴

Docker データ ボリュームは、Docker コンテナーにデータを永続的に保存するためのメカニズムであり、次の機能を備えています。

  1. 永続性: データ ボリュームはコンテナーのライフ サイクルとは無関係です。コンテナが削除された後も、データ ボリュームは存在し続け、他のコンテナによってマウントおよび使用できます。
  2. 共有: 複数のコンテナが同じデータ ボリュームを共有できるため、コンテナ間でデータの共有と転送が可能になります。
  3. データ ボリュームは外部データを提供できます。ホスト ファイル システム上のディレクトリまたはファイルをデータ ボリュームとしてマウントし、コンテナーがホスト上のデータに直接アクセスできます。
  4. コンテナ間の分離: 複数のコンテナが同じデータ ボリュームを共有する場合でも、コンテナ間の操作は互いに分離されており、互いに影響を及ぼしません。
  5. 高いパフォーマンス: データ ボリュームを使用すると、ホスト ファイル システムを活用できるため、コンテナー内にデータを保存する場合よりも一般的にパフォーマンスが高くなります。
  6. バックアップと復元: データ ボリューム内のデータは簡単にバックアップおよび復元できるため、データの管理と移行が容易になります。

Docker はデータ ボリュームを使用することで、コンテナー内のデータを柔軟かつ永続的に管理する方法を提供し、コンテナー間でデータを共有および永続化できるようにします。

Dockerデータボリューム操作

ボリュームの管理

すべてのボリュームを一覧表示する

docker volume コマンドは、Docker 自身が管理するボリューム ディレクトリ (/var/lib/docker/volumes/xx) に対して操作できます。

 [root@localhost]~ docker volume ls DRIVER VOLUME NAME local 2f3bf43b086338934a1d1664ebd0bb17828eb92c1253c25c4a73254fd8e4663d local ced2e5231eda1a01664b8d274ce5ada4ba6361744e475188ea4a0ea352143e18 local d1169326a7b04b649a17ec2c3c9b35d2a6fe093813dcd5bb56ed9ad3a67803fd

ボリュームを作成

[root@localhost]~ docker volume create test test

クエリボリュームの詳細

[root@localhost]~ docker volume inspect test [ { "CreatedAt": "2023-10-05T08:44:42+08:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/test/_data", "Name": "test", "Options": {}, "Scope": "local" } ]

ボリュームの削除

[root@localhost]~ docker volume rm test test

未使用のボリュームを削除する

[root@localhost]~ docker volume prune WARNING! This will remove all local volumes not used by at least one container. Are you sure you want to continue? [y/N] y Total reclaimed space: 0B

ボリュームマウント

匿名ボリューム

何も書く必要はなく、コロンも追加しないでください。コンテナ内のディレクトリに直接書き込むと、実際にはシステムによって自動的に生成されたボリュームの名前になります。

 # Docker 将创建出匿名卷,并保存容器/usr/share/nginx/html 下面的内容[root@localhost]~ docker run -d --name nginx -P -v /usr/share/nginx/html nginx c51638f465c5bd4753473663520122714108f406fac575d95bf72430ec4b6b07

コンテナを表示

[root@localhost]~ docker inspect nginx ... "Mounts": [ { "Type": "volume", "Name": "b24408483f4adc0decfbc66787dd0534dab86bcb4715d7e166361b332a4e697c", "Source": "/var/lib/docker/volumes/b24408483f4adc0decfbc66787dd0534dab86bcb4715d7e166361b332a4e697c/_data", "Destination": "/usr/share/nginx/html", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], ...

全巻を見る

[root@localhost]~ docker volume ls DRIVER VOLUME NAME local 2f3bf43b086338934a1d1664ebd0bb17828eb92c1253c25c4a73254fd8e4663d local b24408483f4adc0decfbc66787dd0534dab86bcb4715d7e166361b332a4e697c local ced2e5231eda1a01664b8d274ce5ada4ba6361744e475188ea4a0ea352143e18 local d1169326a7b04b649a17ec2c3c9b35d2a6fe093813dcd5bb56ed9ad3a67803fd

作成した nginx コンテナが b24408483f4adc0decfbc66787dd0534dab86bcb4715d7e166361b332a4e697c ボリュームに対応していることがわかります。コンテナ内のデータを確認するには、ディレクトリを入力します。

 [root@localhost]~ cd /var/lib/docker/volumes/b24408483f4adc0decfbc66787dd0534dab86bcb4715d7e166361b332a4e697c/_data/ [root@localhost]~ ls -l total 8 -rw-r--r-- 1 root root 497 Aug 16 01:03 50x.html -rw-r--r-- 1 root root 615 Aug 16 01:03 index.html

永続性をテストし、コンテナ内のディレクトリに入り、テストファイルを作成します

[root@localhost]~ docker exec -it nginx sh # cd /usr/share/nginx/html/ && touch test # ls -l total 8 -rw-r--r-- 1 root root 497 Aug 15 17:03 50x.html -rw-r--r-- 1 root root 615 Aug 15 17:03 index.html -rw-r--r-- 1 root root 0 Dec 5 01:16 test

ホストマシンに戻って表示する

[root@localhost]~ ls -l /var/lib/docker/volumes/b24408483f4adc0decfbc66787dd0534dab86bcb4715d7e166361b332a4e697c/_data total 8 -rw-r--r-- 1 root root 497 Aug 16 01:03 50x.html -rw-r--r-- 1 root root 615 Aug 16 01:03 index.html -rw-r--r-- 1 root root 0 Dec 5 09:16 test

名前付きボリューム

まずボリュームを作成するnginx

 [root@localhost]~ docker volume create nginx nginx

名前付きボリュームマッピングの使用

[root@localhost]~ docker run -d --name nginx -P -v nginx:/usr/share/nginx/html nginx 290dc693dar21r2335tgbfdbnfgADADGT32d222c7f4c4fc01ecfc670628c6d41517ea532b

コンテナを表示

[root@localhost]~ docker inspect nginx ... "Mounts": [ { "Type": "volume", "Name": "nginx", "Source": "/var/lib/docker/volumes/nginx/_data", "Destination": "/usr/share/nginx/html", "Driver": "local", "Mode": "z", "RW": true, "Propagation": "" } ], ...

全巻を見る

[root@localhost]~ docker volume ls DRIVER VOLUME NAME local 2f3bf43b086338934a1d1664ebd0bb17828eb92c1253c25c4a73254fd8e4663d local ced2e5231eda1a01664b8d274ce5ada4ba6361744e475188ea4a0ea352143e18 local d1169326a7b04b649a17ec2c3c9b35d2a6fe093813dcd5bb56ed9ad3a67803fd local nginx

先ほど作成した nginx コンテナが nginx ボリュームに対応していることがわかります。コンテナ内のデータを確認するには、ディレクトリを入力します。

 [root@localhost]~ cd /var/lib/docker/volumes/nginx/_data [root@localhost]~ ls -l total 8 -rw-r--r-- 1 root root 497 Aug 16 01:03 50x.html -rw-r--r-- 1 root root 615 Aug 16 01:03 index.html

永続性をテストし、コンテナ内のディレクトリに入り、テストファイルを作成します

[root@localhost]~ docker exec -it nginx sh # cd /usr/share/nginx/html/ && touch test # ls -l total 8 -rw-r--r-- 1 root root 497 Aug 15 17:03 50x.html -rw-r--r-- 1 root root 615 Aug 15 17:03 index.html -rw-r--r-- 1 root root 0 Dec 5 01:16 test

ホストマシンに戻って表示する

[root@localhost]~ ls -l /var/lib/docker/volumes/nginx/_data total 8 -rw-r--r-- 1 root root 497 Aug 16 01:03 50x.html -rw-r--r-- 1 root root 615 Aug 16 01:03 index.html -rw-r--r-- 1 root root 0 Dec 5 09:16 test

コンテナを削除して再作成する

[root@localhost]~ docker rm -f nginx [root@localhost]~ docker run -d --name nginx -P -v nginx:/usr/share/nginx/html nginx

データを表示するにはコンテナに入ります

[root@localhost]~ docker exec -it nginx sh # ls -l /usr/share/nginx/html total 8 -rw-r--r-- 1 root root 497 Aug 15 17:03 50x.html -rw-r--r-- 1 root root 615 Aug 15 17:03 index.html -rw-r--r-- 1 root root 0 Dec 5 01:20 test

永続保存に成功しました

バインドマウント

ローカルホストのパスをコンテナにマップする

[root@localhost]~ docker run -d --name nginx -P -v /tmp/nginx:/usr/share/nginx/html nginx 290dc693c156a28e34160fbce8d222c7f4c4fc01ecfc670628c6d41517ea532b

コンテナを表示

[root@localhost]~ docker inspect nginx ... "Mounts": [ { "Type": "bind", "Source": "/tmp/nginx", "Destination": "/usr/share/nginx/html", "Mode": "", "RW": true, "Propagation": "rprivate" } ], ...

すべてのボリュームを確認すると、余分なボリューム名がないことがわかります。

 [root@localhost]~ docker volume ls DRIVER VOLUME NAME local 2f3bf43b086338934a1d1664ebd0bb17828eb92c1253c25c4a73254fd8e4663d local ced2e5231eda1a01664b8d274ce5ada4ba6361744e475188ea4a0ea352143e18 local d1169326a7b04b649a17ec2c3c9b35d2a6fe093813dcd5bb56ed9ad3a67803fd

ホストディレクトリに入ると、コンテナ内のデータは表示されません。注目すべきは

bind を使用してデータ ボリュームをマップする場合、初めて docker run -v を実行すると、ローカル フォルダーにコンテンツがなく、docker コンテナー内のフォルダーにコンテンツがあると、ローカル フォルダーによって docker コンテナー内のフォルダーが上書きされます。つまり、コンテナー内の元のコンテンツも空になります。

ローカル フォルダーにコンテンツがあり、Docker コンテナー内のフォルダーにもコンテンツがある場合、ローカル フォルダーによって Docker コンテナー内のフォルダーが上書きされます。ホスト上の /tmp/nginx ディレクトリの下にはファイルがないため、コンテナ内のデータはホスト ディレクトリによって上書きされ、クリアされます。

 [root@localhost]~ cd /tmp/nginx [root@localhost]~ ls -l total 0

永続性をテストし、コンテナ内のディレクトリに入り、テストファイルを作成します

[root@localhost]~ docker exec -it nginx sh # cd /usr/share/nginx/html/ && touch test # ls -l test

ホストマシンに戻って表示する

[root@localhost]~ ls -l /tmp/nginx total 0 -rw-r--r-- 1 root root 0 Dec 5 10:25 test

コンテナを削除して再作成する

[root@localhost]~ docker rm -f nginx [root@localhost]~ docker run -d --name nginx -P -v /tmp/nginx:/usr/share/nginx/html nginx

データを表示するにはコンテナに入ります

[root@localhost]~ docker exec -it nginx sh # ls -l /usr/share/nginx/html total 0 -rw-r--r-- 1 root root 0 Dec 5 02:25 test

永続保存に成功しました

<<:  クラウドコンピューティングを活用して効率的なバー管理を実現

>>:  4つの主要な分散トランザクションソリューションの詳細な説明

推薦する

ウェブマスターネットワークレポート:決済ドメイン名の価値は10年間で500倍以上増加。CtripとQunarが合併

1. 決済ドメイン名の価値は10年で500倍以上に上昇!決済ドメイン名の所有者は124万元で変更され...

コンテンツマーケティングは万能なアプローチではない

最近、ネットユーザーの間で人気の有名ブログには役立つ記事がたくさんありますが、実はみんなが議論してい...

私のウェブサイトの 301 リダイレクトが Baidu で機能しないのはなぜですか?

私のウェブサイト「Xiao Han Qi Tuネットワーク」が起動しました。今、私は普通の愚かさでは...

ウェブマスターネットワークニュース: 12306 がチケット盗用ソフトウェアをブロック、Alipay ウォレットが財務管理セクションを改善

1.12306はオンラインチケット取得ソフトウェアをブロックします昨日、鉄道旅客乗車券システム監視セ...

Meilishuo を使って Taobao を宣伝し、トラフィックを増やす方法を共有します

現在、Taobao を宣伝する方法は無数にありますが、Taobao が使い古した方法は効果を発揮しに...

王通:コピーライティングのプランニングスキルがあれば、収入を10倍に増やすにはどうすればいいでしょうか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス最近はコピーライティング...

クラウド移行における重要な考慮事項

現在、世界中で拡大している新型コロナウイルス感染症の流行により、多くの企業のクラウド移行のペースが加...

役立つ情報共有:XX母子ウェブサイトチャンネルとコラム企画事例

2008 年は、母子向けウェブサイトが急速に発展した黄金期でした。一方では、伝統的な母子向け製品チェ...

Kafka、RocketMQ、Pulsar の包括的な比較!

[[419149]]画像はBaotu.comよりビッグデータ時代の到来により、Apache の Ka...

パスワード保護: #限定版# BandwagonHost「11.11」CN2ラインKVM特別提供、在庫限り

このコンテンツはパスワードで保護されています。アクセスするには、下のフィールドにパスワードを入力して...

キーワードランキングをGoogleの1ページ目に素早く向上させる新しい方法

これは私が最近 Google ランキングを改善するために使用している方法であり、これを皆さんと共有し...

WeChatの創始者、張小龍の「テンセント特区」:過去と未来

趙南張小龍を有名にしたのはWeChatが初めてではなかった。国内のソフトウェア業界はすでに彼の足跡を...

JVMさん、誇張しているわけではありません。

[[410405]] JVM が Java にとって、そしてプログラマーの面接にとってどれほど重要で...

従来のSEOテクニックやルールに疑問を持ち、実践的な経験を高める

検索エンジン最適化テクノロジーという用語を説明する必要はないと思います。SEO の概念についてまだ話...

ウェブサイトプロモーションに必要な知識

ウェブサイトのプロモーションの目的は、できるだけ多くの人にウェブサイトを知ってもらい、訪問してもらう...