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つの方法の詳細な説明

推薦する

衝突検出を実装するためのjs

この記事の例では、衝突検出を実装するためのjsの具体的なコードを参考までに共有しています。具体的な内...

MySQL 5.7 でブロックポジショニング DDL の問題を解決する

前回の記事「MySQL テーブル構造の変更、メタデータ ロックを知っておく必要があります」では、MD...

MySQL 接続で認証失敗エラーが発生する場合の分析と解決方法

[問題の説明]アプリケーション側では、次のエラーが時々表示されます。メソッド 'mysql_...

MySQL 8.0.15 winx64 のインストールと設定方法のグラフィックチュートリアル (Windows の場合)

この記事では、MySQL 8.0.15 winx64のインストールと設定方法を参考までに紹介します。...

Nginx キャッシュ設定例

Web アプリケーションの開発とデバッグを行う際には、テストのためにブラウザのキャッシュをクリアした...

Docker が PostgreSQL を起動するときに複数のデータベースを作成するためのソリューション

1 はじめに「DockerでPostgreSQLを起動する方法といくつかの接続ツールのおすすめ」の記...

ドラッグ効果を実現するための純粋なCSSコード

目次1. ドラッグ効果の例2. CSS実装の原則3. CSS実装の詳細4. CSSレイアウト1. 固...

Vue で AES.js を使用する詳細な手順

AES暗号化の使用データ転送の暗号化と復号化処理 --- AES.js最初のステップ: vue に ...

リンクされた画像をダウンロードしてアップロードするJavaScriptの実装

写真をアップロードするので、まずはダウンロード可能な画像リソースかどうかを判断する必要があります。正...

要素動的ルーティングブレッドクラムの実装例

マスターするには: localStorage、コンポーネントのカプセル化えーと、GIF に変換したビ...

両側にCSS固定レイアウト、中央に適応レイアウトを実装

フローティング、フローティング埋め込み div、配置、フレックスという 4 つの一般的な方法と原則を...

MySQLインデックスの作成について知っておくべきこと

目次序文: 1. インデックスメソッドを作成する2. インデックスを作成するために必要な権限序文: ...

MySQL 8.0.11 圧縮版のインストールチュートリアル

この記事では、MySQL 8.0.11のインストールチュートリアルを参考までに紹介します。具体的な内...

少なくとも7日間連続して注文を行ったユーザーに対するSQLクエリ

テーブルを作成するテーブル order(id varchar(10),date datetime,o...

MySQL の 4 つのトランザクション分離レベルの詳細な説明

この実験のテスト環境: Windows 10+cmd+MySQL5.6.36+InnoDB 1. ト...