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

推薦する

BBSの将来(I):適切な垂直位置とローカリゼーションを見つけることが方向性

表面的には、2012 年は BBS にとって輝かしい年ではなかった。BBS は現在、「生きた化石」と...

ユーザーエクスペリエンス分析に基づくウェブサイトページの最適化を改善するための戦略

ご存知のとおり、検索エンジンにおけるユーザー エクスペリエンスの重要性はますます高まっています。ユー...

電子商取引で何度も敗北してきた百度は、今や電子商取引のショッピングガイドになろうとしている

百度が電子商取引に強くないというのはもはやニュースではない。検索プロモーション、アフィリエイトプロモ...

退役軍人が米国のサーバーレンタルとホスティングの違いを詳しく説明

海外のIDCが中国市場に参入して以来、大多数のユーザーから熱烈な歓迎を受けています。国内IDC製品の...

地方第二人材サイトの代替運用方法の共有

二流のローカルタレントサイトは比較的小規模で、実力があります。一流都市のタレントサイトとの激しい競争...

CloudStack と OpenStack の混乱: 2 つの企業が協力してクラウド オーケストレーションを拡大

Cisco は OpenStack クラウド オペレーティング システムの主要な貢献者であり、最近、...

SEO最適化におけるウェブサイトの読み込み速度の重要性

ウェブサイトの読み込み速度に関して、誰もが最も直感的に感じるものはウェブページを開く速度だと思います...

Weibo マーケティングのヒントトップ 10

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスまず、Weibo につい...

異なるアプローチで機器ポータルサイトを運営するという同じ目標

計測機器は高価な工業製品であり、その価格は数千元から数万元にもなります。実験室や精密機器、設備の価格...

ウェブサイトを効果的に宣伝するにはどうすればいいですか?資金のない中小規模のウェブマスターに適しています

中小規模のウェブマスターとして、私たちは実際に次の 3 つの点を懸念しています。 1:ウェブサイトの...

クラウド コンピューティングにおいて人工知能はどのような役割を果たすことができますか?

人工知能の台頭により、誰もがその将来に大きな期待を抱いています。クラウド コンピューティングに関する...

Virmach: ブラックフライデーのフラッシュセールが戻ってきました。そう、年間 3 ドルという伝説の VPS セールが戻ってきました。

virmach が突然、ブラックフライデーのフラッシュセールを開始しました。その通りです。まだブラッ...

IoTとクラウドコンピューティングの潜在的な関係を明らかにする

今日、周りを見渡すと、モノのインターネット (IoT) が家庭でも職場でも私たちの日常生活に大きな変...

ソフトコンテンツマーケティングがなぜ効果的なブランドプロモーション効果を発揮できるのか?

今日のインターネットは、10 年以上前のように、単にテキストや画像を読む場所ではなく、新聞、テレビ、...

.com ドメイン名を 2.98 ドルで登録し、8.98 ドルで更新し、60 日後に何の支障もなく移管できます。

多くの人が長い間、安価な .com ドメイン名を取得していないと推定されます。現在、国際的に有名なド...