Docker データ管理 (データ ボリュームとデータ ボリューム コンテナー) の詳細な説明

Docker データ管理 (データ ボリュームとデータ ボリューム コンテナー) の詳細な説明

実稼働環境で Docker を使用する場合、多くの場合、データを複数のコンテナ間で永続化または共有する必要があり、必然的にコンテナ データ管理操作が必要になります。

コンテナ内のデータを管理する主な方法は 2 つあります。

1. データ ボリューム: コンテナ内のデータはローカル ホスト環境に直接マップされます。コンテナ内にデータ ボリュームを作成し、ローカル ディレクトリまたはファイルをコンテナ内のデータ ボリュームにマウントする方法。
2. データ ボリューム コンテナー: 特定のコンテナーを使用してデータ ボリュームを維持します。データ ボリューム コンテナーを使用して、コンテナーとホスト間、およびコンテナー間でデータを共有し、データのバックアップと回復を実装する方法。

データ量

データ ボリュームは、コンテナーで使用できる特別なディレクトリです。Linux のマウント操作と同様に、ホスト オペレーティング システムのディレクトリをコンテナーに直接マップします。

データ ボリュームは、次のように多くの便利な機能を提供できます。
1. データボリュームをコンテナ間で共有および再利用できるため、コンテナ間のデータ転送が効率的かつ便利になります。
2. データ ボリューム内のデータに対する変更は、操作がコンテナー内で行われたかローカルで行われたかに関係なく、直ちに有効になります。
3. データ ボリュームの更新はイメージに影響を与えず、アプリケーションとデータを分離します。
4. ボリュームは、コンテナーが使用しなくなり、安全にアンマウントできるようになるまで保持されます。

1. コンテナ内にデータボリュームを作成する

docker run コマンドを使用する場合は、-v フラグを使用してコンテナー内にデータ ボリュームを作成します。複数のボリュームを作成するには、-v フラグを複数回繰り返します。

次に、training/webapp イメージを使用して Web コンテナを作成し、コンテナの /webapp ディレクトリにマウントされるデータ ボリュームを作成します。

$ docker run -d -P --name web -v /webapp training/webapp python app.py

-P はコンテナ サービスを公開するポートであり、ローカル ホスト上の一時ポートに自動的にマップされます。

2. ホストディレクトリをデータボリュームとしてマウントする

-v フラグを使用して、既存のローカル ディレクトリをデータ ボリュームとしてコンテナーにマウントするように指定することもできます (推奨)。

$ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

上記のコマンドは、ホストの /src/webapp ディレクトリをコンテナの /opt/webapp ディレクトリにロードします。

この機能はテスト時に非常に便利です。たとえば、ユーザーはいくつかのプログラムやデータをローカル ディレクトリに配置し、コンテナー内で実行して使用することができます。また、ローカル ディレクトリへのパスは絶対パスである必要があります。ディレクトリが存在しない場合は、Docker によって自動的に作成されます。

Docker マウントされたボリュームのデフォルトの権限は読み取り/書き込み (rw) ですが、ユーザーは ro を使用して読み取り専用を指定することもできます。

$ docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

:ro を追加した後、マウントされたデータ ボリューム内のデータはコンテナー内で変更できなくなります。

3. ローカルホストファイルをデータボリュームとしてマウントする

-v フラグを使用して、ホストから個々のファイルをデータ ボリュームとしてコンテナーにマウントすることもできます (推奨されません)。

$ docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

これにより、コンテナに入力されたコマンド履歴が記録されます。

vi や sed --in-place などのファイル編集ツールを使用してファイルをコンテナに直接マウントすると、ファイルの inode が変更される可能性があります。Docker 1.1.0 以降では、これによりエラー メッセージが表示されます。したがって、推奨される方法は、ファイルが配置されているディレクトリを直接マウントすることです。

データボリュームコンテナ

ユーザーが複数のコンテナー間で継続的に更新されるデータを共有する必要がある場合、最も簡単な方法はデータ ボリューム コンテナーを使用することです。データ ボリューム コンテナーもコンテナーですが、その目的は、他のコンテナーがマウントするためのデータ ボリュームを提供することです。

まず、データ ボリューム コンテナー dbdata を作成し、その中にデータ ボリュームを作成して /dbdata にマウントします。

$ docker run -it -v /dbdata --name dbdata ubuntu

ルート@3ed94f279b6f:/#

/dbdata ディレクトリを表示します。

ルート@3ed94f279b6f:/# ls

bin boot dbdata dev etc home lib lib64 media mnt opt ​​proc root run sbin srv sys tmp usr var

その後、他のコンテナで --volumes-from を使用して、dbdata コンテナにデータ ボリュームをマウントできます。

たとえば、db1 と db2 という 2 つのコンテナを作成し、dbdata コンテナからデータ ボリュームをマウントします。

$ docker run -it --volumes-from dbdata --name db1 ubuntu

$ docker run -it --volumes-from dbdata --name db2 ubuntu

この時点で、コンテナ db1 と db2 は両方とも同じデータ ボリュームを同じ /dbdata ディレクトリにマウントします。 3 つのコンテナのいずれかによってこのディレクトリに行われた書き込みは、他のコンテナから参照できます。

たとえば、次のように dbdata コンテナーにテスト ファイルを作成します。

root@3ed94f279b6f:/# cd /dbdata

root@3ed94f279b6f:/dbdata# タッチテスト

ルート@3ed94f279b6f:/dbdata# ls

テスト

db1 コンテナ内で表示します。

$ docker run -it --volumes-from dbdata --name db1 ubuntu

ルート@4128d2d804b4:/# ls

bin boot dbdata dev etc home lib lib64 media mnt opt ​​proc root run sbin srv sys tmp usr var

ルート@4128d2d804b4:/# ls dbdata/

テスト

--volumes-from パラメータを複数回使用して、複数のコンテナから複数のボリュームをマウントできます。すでにコンテナ ボリュームがマウントされている他のコンテナからデータ ボリュームをマウントすることもできます。

--volumes-from パラメータを使用してデータ ボリュームをマウントするコンテナーは実行されている必要はありません。

マウントされたコンテナ (dbdata、db1、db2 を含む) が削除されても、データ ボリュームは自動的に削除されません。データ ボリュームを削除する場合は、そのボリュームをまだマウントしている最後のコンテナーを削除するときに、関連付けられているコンテナーも同時に削除するように指定するために、docker rm -v コマンドを明示的に使用する必要があります。

データボリュームコンテナを使用したデータの移行

データ ボリューム コンテナーを使用すると、その中のデータ ボリュームをバックアップおよび復元して、データの移行を実現できます。

これら 2 つの操作については、以下で説明します。

1. バックアップ

次のコマンドを使用して、dbdata データ ボリューム コンテナー内のデータ ボリュームをバックアップします。

次のようにコードをコピーします
$ docker run --volumes-from dbdata -v $(pwd):/backup --name ワーカー ubuntu tar cvf /backup/backup.tar /dbdata

まず、ubuntu イメージを使用してコンテナ ワーカーを作成します。 --volumes-from dbdata パラメータを使用して、ワーカー コンテナが dbdata コンテナのデータ ボリューム (つまり、dbdata データ ボリューム) をマウントできるようにし、-v $(pwd):/backup パラメータを使用して、ローカルの現在のディレクトリをワーカー コンテナの /backup ディレクトリにマウントします。ワーカー コンテナが起動したら、tar cvf /backup/backup.tar /dbdata コマンドを使用して、/dbdata の内容をコンテナ内の /backup/backup.tar、つまりホストの現在のディレクトリ内の backup.tar にバックアップします。

2. 回復

コンテナにデータを復元する場合は、以下の手順に従ってください。

まず、データ ボリュームを持つコンテナ dbdata2 を作成します。

$ docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

次に、別の新しいコンテナを作成し、dbdata2 コンテナをマウントし、untar を使用してバックアップ ファイルをマウントされたコンテナ ボリュームに解凍します。

$ docker run --volumes-from dbdata2 -v $(pwd):/backup --name ワーカー ubuntu bash

cd /dbdata

tar xvf /backup/backup.tar

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • docker run -v はデータボリュームを異常にマウントし、コンテナのステータスは常に再起動になります。
  • Dockerはローカルディレクトリとデータボリュームコンテナ操作をマウントします
  • Dockerコンテナデータボリュームの原理と使用法の分析
  • Dockerコンテナデータボリュームのマウントの簡単な概要
  • Docker におけるコンテナデータボリュームとデータ管理の詳細な説明
  • Docker データボリュームとデータコンテナの詳細な紹介と例
  • Dockerデータボリューム、データボリュームコンテナの詳細な紹介
  • Docker コンテナ データ ボリュームの名前付きマウントと匿名マウントの問題

<<:  現在使用されている設定ファイル my.cnf を表示する mysql メソッド (推奨)

>>:  js でオブジェクトとオブジェクト メソッドを作成するいくつかの方法の詳細な説明

推薦する

jQuery で従業員管理登録ページを実装する

この記事では、従業員管理登録ページを実装するためのjQueryの具体的なコードを例として紹介します。...

vscode dockerプラグインのdocker.socket権限問題を解決する

解決策: システム内のすべての .vscode 関連プロセスを終了します (または、remote-s...

CSS3アニメーションとHTML5の新機能の詳しい説明

1. CSS3アニメーション☺CSS3 アニメーションは、JavaScript を介して要素のスタイ...

フロントエンド開発に必須:推奨されるブラウザ互換性テストツール 12 選

フロントエンド開発者にとって、さまざまな主要ブラウザのさまざまなバージョンでコードが適切に動作するこ...

Ubuntu 20.04は静的IPアドレスを設定します(異なるバージョンを含む)

Ubuntu 20.04はnetplanを通じてネットワークを管理するため、以前のバージョンとは少...

HTML 言語百科事典

123WordPress.com-HTML noscriptオブジェクトolオプションPパラントプレ...

Linuxで環境変数を削除する詳細な手順

Linuxで環境変数を削除するには?unsetコマンドを使用してすぐに削除します1. Linuxクラ...

チェックボックスとラジオボタンの配置を実装する方法

ブラウザによって動作が異なるだけでなく、フォントやテキスト サイズによっても動作が異なります。フォー...

純粋な CSS3 マインドマップ スタイルの例

マインドマップ彼はおそらく次のように見えるでしょう: インターネット上の実装のほとんどは d3.js...

初心者向けWebサイト構築ガイド⑥:FlashFXPの詳しい使い方

今日は、サイトの設定やウェブサイトのアップロードなど、FlashFXP の最も基本的な機能を紹介しま...

CSS グリッドレイアウトで列にアイテムを埋め込む方法

n 個のアイテムがあり、これらのアイテムをグリッド レイアウトの列に並べ替える必要があるとします。列...

MySQL5.7.03 上位バージョンから MySQL 5.7.17 への置き換えインストール プロセスと見つかった問題の解決策

1. インストール方法は? 1. [実行] -> [cmd] と入力して、小さな黒いウィンドウ...

CSSに基づいてマウス入力の方向を決定する

以前、フロントエンド技術グループに所属していたとき、グループのメンバーが面接中に問題に遭遇したと言っ...

MySQL 独立インデックスと共同インデックスの選択

複数列のインデックスについては、理解が不足していることがよくあります。よくある間違いは、多数の列に独...

良いリファクタリングを行うには、コードをリファクタリングするだけでなく、人生をリファクタリングすることも重要です。

職業的な観点からも、人生の観点からも、良い再建をすることは本当に簡単ではありません。楽観的で熱心で前...