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

推薦する

raksmart: 韓国独立サーバー、月額 76 ドル、2*e5-2630/32g メモリ/1T ハードディスク/10M 帯域幅/3IP

流行病のせいか、みんな金儲けを考えている。Raksmartの韓国製格安サーバー(物理マシン)2台が前...

タオバオアフィリエイトウェブサイトSEOでは適切な製品を選択し、ユーザーエクスペリエンスに注意を払う必要があります

先週金曜日、淘宝連盟「武林会議」が杭州で開催されました。会議で、タオバオ・アライアンスは、アリママが...

A5マーケティングチームがZACにインタビュー: ZACがSEOの最近の動向について語ります

A5 Fangfang: 皆さん、こんにちは。今日、A5 マーケティング チームが招待したゲストは、...

草の根講堂の最初のゲスト、朱衛坤氏が、個人ウェブマスターの将来について語ります。

みなさんこんにちは。私は朱偉坤です。今日は Arui さんに招待されて、皆さんとシェアすることができ...

Xiaohongshu が KOL をターゲットにしているのはなぜですか?

5月10日、小紅書は公開書簡の形でブランドパートナーの規則をアップグレードしました。ブランド パート...

Woothosting ロサンゼルス VPS レビュー、KVM、年間 15 ドル、512M メモリ

数日前、「wootHosting - 年間 15 ドルの支払い/KVM VPS/512m メモリ/2...

#BlackFriday# alphavps: AMD Ryzen 7000 高性能 VPS、年間 15.99 ドルから。さらに、大容量ハード ドライブ VPS と専用サーバーもセール中

alphavpsは今年、ブラックフライデーの特別プロモーションを開始しました。最も注目を集めたのは、...

WeChat H5マーケティングの4年間の進化:.pptから.aviへ(クラシックケースコレクション+詳細な分析)

「H5はもうダメだ!」「H5はクソになった!」発売から2年後、H5に対する否定的な見方が出始めました...

検索エンジン革命の時代: Baidu 独自の Spark プロジェクトが開始

2013年以来、百度は大きな変革を開始し、ウェブマスターの間で話題になっています。「青大根アルゴリズ...

ウェブサイト運営で言わなければならないこと

多くの同質のウェブサイトから目立つにはどうすればよいでしょうか。ウェブサイトのトラフィックを増やして...

Linodeはどうですか?スウェーデン、ストックホルムのデータセンタークラウドサーバーレビュー

Linodeはどうですか? linode スウェーデン クラウド サーバーはどうですか? Linod...

古典的なコピーライティングは、たった一文でどのように消費者を説得するのでしょうか?

月給5,000~50,000のこれらのプロジェクトはあなたの将来です偶然、上海の馬当路で地下鉄を乗り...

locvps: ロシア cn2 VPS、20% 割引、月額 29 元から、1G メモリ/1 コア/30g SSD/400g トラフィック

locvps はロシアに新しいヨーロッパ データ センターを追加しました。元々のドイツの CN2 と...

4Kスマートテレビ市場への参入におけるLeTVの華麗な運営を詳細に分析

4Kスマートテレビ市場への参入におけるLeTVの華麗な運営を詳細に分析今日のインターネット時代におい...

Baidu に 11 個の数字が表示された場合の対処方法について簡単に説明します。

ウェブサイトは1週間11位にランクされています。他のランキングがどのように変化しても、私のウェブサイ...