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 でオブジェクトとオブジェクト メソッドを作成するいくつかの方法の詳細な説明

推薦する

Docker-compose におけるdepends_on 順序問題を解決する方法についての簡単な説明

コンテナをソートするためにdepends_onを使用しても、コンテナ間の依存関係の問題は完全には解決...

nginx の http リクエスト処理の各段階の詳細な分析

nginx の HTTP モジュールを作成する場合、リクエスト開始時のアクセス許可の有無、コンテンツ...

Dockerを使用してクローンリポジトリを使用してGitイメージを構築する

概要私は 1 年以上 Docker を使用しています。最近、サービスをすばやくオーケストレーションし...

Vue + 要素を使用して背景データをオプションに動的に表示する

必要:ハードコードされたデータの代わりに、セレクター内のオプション値の動的な表示を実装します。私のロ...

テーブルレイアウトの長所と短所、そして推奨されない理由

テーブルの欠点1. テーブルは他の HTML タグよりも多くのバイトを占有します。 (ダウンロード時...

MySQL 5.7.17 winx64 解凍版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.17 winx64解凍版のインストールと設定方法を紹介します。具体...

MySQL 5.7.20 共通ダウンロード、インストール、設定方法と簡単な操作スキル(解凍版無料インストール)

早朝に MySQL 5.7.19 のインストールを終えたばかりですが、午前中に MySQL が最新バ...

Jenkins を通じて None のイメージを定期的にクリーンアップする方法

序文継続的なコード配信のプロセスで、Jenkins を利用して Docker イメージを作成すると、...

MySQLカバーインデックスの詳しい説明

コンセプトインデックスにクエリ要件を満たすすべてのデータが含まれている場合、それはカバーリング イン...

Linux コマンドラインで他のユーザーと通信する方法

Linux のコマンドラインで他のユーザーにメッセージを送信するのは簡単です。これを行うコマンドは多...

Docker の NFS-Ganesha イメージを使用して NFS サーバーを構築する詳細なプロセス

目次1. NFS-Ganeshaの紹介2. NFS-Ganeshaの設定3. NFS-Ganesha...

CentOS のクローン作成、Linux 仮想マシンの共有の完全な手順

序文Linux が完全にセットアップされると、クローン機能を使用して短時間で複数の Linux を作...

HTML Webページ作成チュートリアル iframeタグを慎重に使用してください

iframe を使用すると、他の Web サイトのページを簡単に呼び出すことができますが、注意して使...

Vueプロジェクトでパラメータジャンプ機能を実装する

ページの説明:​ メインページ: 名前 —> shishengzuotanhuichaxun ...

Firefox で英語の文字が折り返されない問題の解決方法

テキストのレイアウトには、言語に応じていくつかの書式設定要件があります。たとえば、簡体字中国語では、...