Docker データ ストレージ ボリュームの詳細な説明

Docker データ ストレージ ボリュームの詳細な説明

デフォルトでは、コンテナ データの読み取りと書き込みはコンテナのストレージ レイヤーで行われます。コンテナが削除されると、そのコンテナ上のデータは失われます。したがって、コンテナ ストレージ レイヤーで書き込み操作が発生しないようにする必要があります。データの永続的なストレージを実現するには、データを保存するソリューションを選択する必要があります。現在、いくつかの方法があります。

  • ボリューム
  • バインドマウント
  • tmpfs マウント

次の図は、これら 3 つの手法を示しています。

ボリューム

ボリュームは、1 つ以上のコンテナーで使用できるホスト上の特別なディレクトリです。ボリュームには次の特性があります。

  • データボリュームはコンテナ間で共有および再利用できます
  • データボリュームへの書き込み操作はイメージに影響を与えません
  • デフォルトでは、コンテナが削除されてもデータ ボリュームは常に存在します。

データ ボリュームを使用する目的は、コンテナー内でデータを保持してコンテナー間でデータを共有できるようにしたり、データの損失を防いだりすることです (コンテナー ストレージ層に書き込まれたデータは失われます)。

データ ボリュームを使用する手順は、通常、次の 2 つのステップに分かれます。

  1. データボリュームを作成する
  2. -v または --mount パラメータを使用して、データ ボリュームをコンテナの指定されたディレクトリにマウントします。これにより、コンテナの指定されたディレクトリへのすべての書き込み操作がホスト マシン上のボリュームに保存されます。

ボリューム管理

ボリュームを作成します。

$ docker ボリューム作成 my-vol

ボリュームを表示:

$ dockerボリュームls
ローカルマイボリューム
$ docker ボリューム検査 my-vol
[
 {
  "ドライバー": "ローカル",
  「ラベル」: {},
  「マウントポイント」: 「/var/lib/docker/volumes/my-vol/_data」、
  「名前」: 「my-vol」、
  「オプション」: {},
  「スコープ」: 「ローカル」
 }
]

作成されたボリューム my-vol が/var/lib/docker/volumes/ディレクトリに保存されていることがわかります。このボリュームの今後の書き込みデータはすべて/var/lib/docker/volumes/my-vol/_dataディレクトリに保存されます。

ボリュームを削除するには:

$ docker ボリューム rm my-vol

または、未使用のボリュームをすべて削除します。

docker ボリュームのプルーニング

データボリュームをコンテナディレクトリにマウントする

ボリュームを作成したら、コンテナを実行するときに -v または --mount パラメータを指定してボリュームを使用できます。

--mountパラメータを使用します:

$ docker run -d \
 --name=nginxtest \
 --mount ソース = nginx-vol、マウント先 = /usr/share/nginx/html \
 nginx:最新

ソースはボリュームを指定し、宛先はコンテナー内のファイルまたはフォルダーを指定します。

または -v パラメータを使用します:

$ docker run -d \
 --name=nginxtest \
 -v nginx-vol:/usr/share/nginx/html \
 nginx:最新

マウントが成功すると、コンテナは /usr/share/nginx/html ディレクトリからデータを読み取ったり書き込んだりします。実際には、ホスト マシンの nginx-vol データ ボリュームからデータを読み取ったり書き込んだりします。したがって、ボリュームまたはバインドマウントは、コンテナーとホストがファイルを共有する方法とも考えられます。

-v パラメータは、ソースと宛先を区切るためにコロンを使用します。コロンの前半はソースで、後半は宛先です。

まだ存在しないデータ ボリュームをマウントすると、Docker によって自動的に作成されます。 (そのため、データボリュームを作成する必要はありません)

コンテナにマウントされるディレクトリが空のディレクトリでない場合、ディレクトリ内のファイルはデータ ボリュームにコピーされます。 (バインドマウントでは、ホスト上のディレクトリは常にコンテナにマウントされるディレクトリを上書きします)

-v パラメータと --mount パラメータはほぼ同じ機能を持ちます。唯一の違いは、サービス実行時にデータ ボリュームをマウントするには --mount パラメータのみを使用できることです。

読み取り専用データボリュームの使用

場合によっては、コンテナのデータ ボリュームを読み取り専用にする必要があります。これは、readonly オプションを追加することで実現できます。

$ docker run -d \
 --name=nginxtest \
 --mount ソース=nginx-vol、マウント先=/usr/share/nginx/html、読み取り専用 \
 nginx:最新

または -v パラメータを使用します:

$ docker run -d \
 --name=nginxtest \
 -v nginx-vol:/usr/share/nginx/html:ro \
 nginx:最新

ボリュームの使用シナリオ

こちらの記事を参照してください: Docker データストレージの概要

参考文献

https://docs.docker.com/storage/volumes/#マシン間でデータを共有する

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Docker のコンテナ データ ボリュームの概要
  • Dockerでボリュームを管理する2つの方法
  • Dockerボリューム削除操作
  • Dockerボリュームのファイルマッピング方法
  • Dockerボリュームマウントの実装方法
  • Docker ボリュームの使用の詳細と例
  • Dockerはデータボリュームにデータを書き込む

<<:  Linux で MySQL をインストールする簡単な方法

>>:  ReactでCSSスタイルを動的に変更する2つの方法の詳細な説明

推薦する

Linux で MySQL 8.0 バージョンをアンインストールする方法

1. MySQLをシャットダウンする [root@localhost /]# サービスmysqldを...

Navicat for Mysql 接続エラー 1251 (接続失敗) の問題を解決する

以前書いた内容が詳細さに欠けていたため、今回は修正・補足しました。ただし、以前の MySQL バージ...

JDBC を使用して MySQL を操作するための簡単な分析では、Class.forName("com.mysql.jdbc.Driver") を追加する必要があります。

導入データベースに接続するためにJDBCを使用することに慣れている場合は、データベースに接続するため...

Vueのref属性の詳細な説明

要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS....

js で継承を実装する 5 つの方法

コンストラクタの借用この手法の基本的な考え方は単純です。サブタイプ コンストラクター内からスーパータ...

JDBC-idea で mysql をインポートして java jar パッケージに接続する (mac)

序文1. この記事ではMySQL 8.0バージョンを使用していますバージョン5.0と比較すると、パッ...

Tomcatの動作原理を分析する

SpringBoot は巨大な Python のようで、ゆっくりと私たちの周りを巻きつき、麻痺させま...

nginxプロセスロックの実装の詳細な説明

目次1. nginxプロセスロックの役割2. エントリーレベルのロックの使用3. nginxプロセス...

HTMLとは何ですか?

HTML 開発の歴史: HTML は英語で Hypertext Marked Language の...

Chrome、Firefox、IEで入力カーソルの位置がずれる問題の解決方法

ブラウザで入力カーソルがずれる問題の詳しい説明<br />仕事で問題に遭遇し、解決策を探...

Vueでアイコンをカスタマイズする手順

ant-design-vue は Ali iconfont icons の使用をカスタマイズします\...

VMware Workstation Pro が Windows で実行されない場合の解決策

国慶節の休暇後、Windows アップデート後に VMware 仮想マシンが開けなくなり、「VMwa...

Angular Cookie の読み取りおよび書き込み操作コード

Angular Cookie の読み取りおよび書き込み操作のコードは次のようになります。 var a...

MySQL 8.0.18はデータベースにユーザーを追加し、権限を付与します

1. データベースにログインするには、rootユーザーを使用することをお勧めします。 mysql -...

MySQLのスレッド実行の急増とクエリの遅延の問題を解決する

目次背景問題の説明原因分析CPUクエリが遅い接続数分析する拡大する総括する背景新年を迎える前は、一年...