実稼働環境で Docker を使用する場合、多くの場合、データを複数のコンテナ間で永続化または共有する必要があり、必然的にコンテナ データ管理操作が必要になります。 コンテナ内のデータを管理する主な方法は 2 つあります。 1. データ ボリューム: コンテナ内のデータはローカル ホスト環境に直接マップされます。コンテナ内にデータ ボリュームを作成し、ローカル ディレクトリまたはファイルをコンテナ内のデータ ボリュームにマウントする方法。 データ量 データ ボリュームは、コンテナーで使用できる特別なディレクトリです。Linux のマウント操作と同様に、ホスト オペレーティング システムのディレクトリをコンテナーに直接マップします。 データ ボリュームは、次のように多くの便利な機能を提供できます。 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: 現在使用されている設定ファイル my.cnf を表示する mysql メソッド (推奨)
>>: js でオブジェクトとオブジェクト メソッドを作成するいくつかの方法の詳細な説明
コンテナをソートするためにdepends_onを使用しても、コンテナ間の依存関係の問題は完全には解決...
nginx の HTTP モジュールを作成する場合、リクエスト開始時のアクセス許可の有無、コンテンツ...
概要私は 1 年以上 Docker を使用しています。最近、サービスをすばやくオーケストレーションし...
必要:ハードコードされたデータの代わりに、セレクター内のオプション値の動的な表示を実装します。私のロ...
テーブルの欠点1. テーブルは他の HTML タグよりも多くのバイトを占有します。 (ダウンロード時...
この記事では、MySQL 5.7.17 winx64解凍版のインストールと設定方法を紹介します。具体...
早朝に MySQL 5.7.19 のインストールを終えたばかりですが、午前中に MySQL が最新バ...
序文継続的なコード配信のプロセスで、Jenkins を利用して Docker イメージを作成すると、...
コンセプトインデックスにクエリ要件を満たすすべてのデータが含まれている場合、それはカバーリング イン...
Linux のコマンドラインで他のユーザーにメッセージを送信するのは簡単です。これを行うコマンドは多...
目次1. NFS-Ganeshaの紹介2. NFS-Ganeshaの設定3. NFS-Ganesha...
序文Linux が完全にセットアップされると、クローン機能を使用して短時間で複数の Linux を作...
iframe を使用すると、他の Web サイトのページを簡単に呼び出すことができますが、注意して使...
ページの説明: メインページ: 名前 —> shishengzuotanhuichaxun ...
テキストのレイアウトには、言語に応じていくつかの書式設定要件があります。たとえば、簡体字中国語では、...