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

推薦する

WeChatアプレットシングルページアプリケーションルーティングを徹底的に理解するための10分

シングルページアプリケーションの特徴「前提:」Web ページには、クリックするとサイト内の他のページ...

MySQLのorder byとlimitを混在させる際の落とし穴の詳細な説明

MySQL では、ソートには order by を、ページングには limit をよく使用します。最...

デザイナーはコーディングを学ぶ必要がありますか?

多くの場合、 Web デザインが完成した後でデザイナーの無知が露呈し、批判されることがあります。彼ら...

VUEはFlappy Birdゲームのサンプルコードを実装します

Flappy Bird は、誰もがアプリでプレイしたことがある非常にシンプルな小さなゲームです。ここ...

CentOS7 64 ビットでの MySQL 5.7 のインストールと設定のチュートリアル

インストール環境: CentOS7 64ビットMINI版、MySQL5.7をインストール1. YUM...

Linux サーバー上で nvidia-docker 環境を設定するプロセスの詳細な説明

Docker はコンテナに相当し、必要な動作環境に応じて対応する動作環境を構築できます。このとき、各...

CSSレイアウトにおけるフロート属性と位置属性の違い

CSS レイアウト - position プロパティposition 属性は、要素に適用する配置方法...

nginx で gzip 圧縮を実装してウェブサイトの速度を向上させる方法

目次gzip 圧縮を使用する理由は何ですか? nginxはgzipを実装するgzip処理nginx ...

Vue Element フロントエンドアプリケーション開発のための従来の JS 処理機能

目次1. 従来のコレクションに対するフィルター、マップ、および削減処理方法2. 再帰処理3. for...

Vue が 4 レベルのナビゲーションと検証コードを実装する方法の例

効果: まず5つのVueインターフェースを作成する1.home.vueページ <テンプレート&...

Vue2で配列の変更を検出できない理由と解決策

目次回避策Vue2.0 で 2 つの配列の変更を監視できないのはなぜですか?ソースコード分析ヴュー3...

Docker CPU 制限の実装

1. --cpu=<値> 1) コンテナが使用できるCPUリソースの量を指定しますが、コ...

Dockerfileを使用して独自のイメージを作成する方法

1. 空のディレクトリを作成する $ cd /home/xm6f/dev $ mkdir myapp...

MySQL移行計画と落とし穴の実践記録

目次背景解決策1: 古いデータをバックアップするオプション2: テーブルを分割する解決策3: tid...

JavaScript オブジェクトの 3 つのプロパティ

目次1. 書き込み可能: 書き込み可能2. 列挙可能: 列挙可能3. 設定可能: 設定可能オブジェク...