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

推薦する

タオバオのウェブサイト構築製品は全国的な権利保護に直面しており、中小の販売業者を騙す詐欺となっている。

タオバオで中小の販売業者を騙した衝撃の詐欺?全国のバイヤーが「淘宝ウェブサイト構築」製品に対する権利...

Bステーションブランドマーケティングガイド!

この記事のキーワード: Bilibili 、ブランドマーケティング、マーケティングプロモーション、ブ...

「ブランドフィルター」の変革ストーリー:ショッピングガイドアプリから写真趣味コミュニティへ

写真共有アプリ Nice は、800 万ドルの投資を受けたばかりです。同社はひっそりと「ブランド フ...

#ニュース# digitalocean: 高まる需要に応えるため、新しい「サンフランシスコ 3」を追加

DigitalOceanは世界8カ国または都市に自社データセンターを運営し、あらゆる人々のために何百...

cPanel 初心者向けのイラスト付きチュートリアル。5 分で cPanel を使用して Web サイトを構築する方法を学びます。

cPanel チュートリアル、HostCat.com は、Web サイト構築の分野に参入したばかりの...

ブロックチェーンに基づく分散型金融が増加中

デジタルアート作品の所有権に相当する非標準化トークンが普及するにつれ、ブロックチェーン技術は徐々に最...

現在の外部リンクの品質を向上させる方法

インターネットプロモーションは現在一般的なマーケティング手法です。それが達成できる有効性は明らかです...

実名なしでAlibaba Cloud Hong Kongサーバーを購入する方法のチュートリアル。登録と購入にはメールアドレスのみが必要です。

多くの個人がウェブサイトを構築してサーバーを選択する際、基本的に暗黙の了解で香港サーバーを選択します...

B2B業界のウェブサイトにおける「ページ要素間の距離」の標準についての簡単な説明

この章では、主に B2B 業界の Web サイトの Web ページのさまざまな要素間の距離について説...

NameServer、Zookeeper、違いが分からない

[[386520]]この記事はWeChatの公開アカウント「大宇賢人」から転載したもので、著者は大宇...

1.2 フレームワークとは何か

1.2 フレームワークとは何かフレームワークは、特定の問題領域内でアプリケーションの一部を実装する再...

Eコマースライブストリーミング業界の予測とロジック!

Happy Beansを使って13億4100万という数字を計算したが、意味がわからなかった。別の換算...

エッジコンピューティング: テクノロジー業界の次の兆ドル規模のチャンス

[[419619]]クラウド コンピューティングが新しいテクノロジーを採用し続けるにつれて、コンピュ...

百度の今後のSEOアルゴリズム調整に関する予測

Baidu の SEO に関する提案では、SEO はウェブサイト上の高品質なコンテンツを検索エンジン...

電子商取引は価格競争の悪循環に陥っている。お金を使うと死ぬし、お金を使わないともっと早く死ぬ。

電子商取引は価格戦争の悪循環に陥っている。お金を使うと死につながり、お金を使わないとより早く死につな...