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つの主要な分散トランザクションソリューションの詳細な説明

推薦する

新しい用語のいくつか(共通参照)を読みましたが、理解できません。

最近、A5でソフト記事を閲覧していたところ、偶然、みんなが新しいSEOの概念を議論していて、将来的に...

ウェブマスターネットワークからの毎日のレポート:JD.comとDangdangが価格戦争を開始、Lashou創設者は2020年に再び戦う

1. 新浪微博は削除されたコンテンツを閲覧できることが暴露され、抜け穴ではないと回答した数日前、李開...

技術的な乾物共有: HBase のデータから Kafka への移行の実践

1. 概要実際のアプリケーション シナリオでは、データは HBase クラスターに保存されますが、何...

drServer-3.5 EUR/Windows/1G RAM/20g SSD/1T トラフィック

2006 年に設立された drServer には、いくつかのサブブランドがあり、その 1 つが vi...

server.ua: ウクライナの VPS、ウクライナのサーバー、無制限のトラフィック、苦情防止

ウクライナのホスティング プロバイダーである server.ua は、2005 年に設立されました。...

最新のアルゴリズムでウェブサイトを外部から最適化する方法

前回の記事「新しいサイトが Baidu の最新アルゴリズムにどう対処すべきか」に続き、著者は Bai...

ウェブサイトの内部リンク戦略

ウェブサイトの内部リンクの最適化とは何ですか? 1. ウェブサイトのナビゲーションウェブサイトのナビ...

アマゾン、グーグル、マイクロソフトはパブリッククラウド市場で大きな利益を上げている

マイクロソフト、グーグル、アマゾンが最近の収益報告で報告した好調な収益からもわかるように、パブリック...

Linode - バックアップ価格が値下げされました!月額2.5ドルから

ガンダムのVPSプロバイダーであるLinodeは、かつてデータ損失事件を起こしました。予想外なことに...

SEO 最適化の方向性: Baidu はコンテンツと外部リンクをどのように判断しますか?

最近、友人のウェブサイトが再び大量に削除されました。これは、Baidu の危険期間 (6、22、6、...

Baidu のリッチメディア広告プラットフォームについて簡単に説明します: Hong Media

インターネットの初期の段階では、インターネット広告は画像やテキストを使用して表示されることがほとんど...

ケーススタディ: ペンギン攻撃を受けたサイトからの回復方法

ブラック、ホワイト、グレーの SEO リンク構築戦略のいずれを使用していても、リンク構築者は善意で短...

百度の新しいアルゴリズム: フォーラムの署名とQ&Aの外部リンクの重要性が低下

今日はこの記事を皆さんと共有できてとても嬉しいです。中国の検索エンジン市場は急速に発展しています。B...

主流の PC 仮想化: KVM、XEN、OpenVZ の詳細な説明

[[284564]] 1. PC仮想化 - KVM KVM は、Windows/Linux 上でオペ...