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

推薦する

Dockerの急速な拡張の高度な方法

1. コマンド方式作成された Swarm クラスターで nginx サービスを実行し、--repli...

データページング効果を実現する js オブジェクト

この記事の例では、データのページング効果を実現するためのjsオブジェクトの具体的なコードを参考までに...

CentOS 7にMySQLをインストールする詳細な手順

CentOS7では、MySQLをインストールすると、MariaDBもデフォルトでインストールされます...

Docker コンテナのデプロイの試み - マルチコンテナ通信 (node+mongoDB+nginx)

その理由はモッカー プラットフォームを導入したかったので、友人の勧めで既成のプロジェクト api-m...

純粋なCSSを使用してスイッチ効果を実現する

まずアイデアはこの効果を実現するには、 <input type="checkbox&...

スライドボタン効果を実現するネイティブJS

Jsで作ったスライドボタンの具体的なコードは参考までに。具体的な内容は以下のとおりですまずエフェク...

CSS の 4 つのインポート方法と優先順位の簡単な分析

第一に: CSSを導入する4つの方法CSS を導入する方法には、インライン スタイル、埋め込みスタイ...

Vueコンポーネント間のデータ共有の詳細な説明

目次1. プロジェクト開発において、コンポーネント間の最も一般的な関係は次の 2 つのタイプに分けら...

mysqlreplicate を使って MySQL マスタースレーブを素早く構築する方法

導入mysql-utilities ツールセットは、DBA のツールボックスとも言えるさまざまなツー...

Vue でよく使われる命令 v-if と v-show の違いを簡単に分析します。

目次序文1.v-ショー2.v-if 3. v-showとv-ifの違い1. 原則の違い2. アプリケ...

MySQL 8.0.23 無料インストールバージョンの設定詳細チュートリアル

最初のステップは、MySQL 8.0.23の無料インストールバージョンをダウンロードすることです。 ...

フロントエンドタスク構築のための強力なツールであるGulp.jsの使い方を詳しく説明します

目次概要Gulp.jsをインストールするGulp.jsを使用してプロジェクトを作成するgulpfil...

Hタグの定義と注意事項について簡単に説明します

結果から判断すると、タイトルを定義するための固定パターンはなく、すべてむしろランダムな感じがします。...

スワイパープラグインを使用して Vue でカルーセルを実装する例

目次vue - スワイパープラグインを使用してカルーセルを実装するカルーセルのバグを解決するには、w...