Dockerボリュームコンテナ間のデータ共有の実装

Dockerボリュームコンテナ間のデータ共有の実装

ボリュームとは何ですか?

ボリュームは英語で容量を意味し、Docker ではデータ ボリューム、つまりデータを格納するためのコンテナーを意味します。

なぜデータを共有するのですか?

クラスターには複数の Tomcat があります。クラスター内の Tomcat にデプロイされたコードは同じコードのコピーです。ページ ファイルが変更されると、各コンテナーのページ ファイルを更新する必要があることを意味します。大規模なクラスターでは、このようなワークロードは無限に拡大します。このとき、この問題を解決するにはデータ共有が必要です。いわゆるデータ共有とは、複数のコンテナーがデータのコピーを共有することを指します。これを Docker 環境で実現するにはどうすればよいでしょうか。

データ共有の原則

ホストのハードディスク上に共有データを保存するためのスペースを作成します。複数のコンテナがこのディレクトリを共有します。

データ共有を実現するソリューション

データ共有といえば、共有ディレクトリをマウントする Linux の mount コマンドを思い浮かべるのが簡単です。

[x] パラメータ-v 宿主機目錄:/容器內容目錄を使用して共有ファイルをホスト上のファイルに配置し、複数のコンテナがこのディレクトリを共有してデータ共有を実現します。これは起動時に実行する必要があります。

[x] コンテナを共有する-v 宿主機目錄:/容器內容目錄を使用してホスト共有ディレクトリをマウントし、共有コンテナをマウントしてデータ共有を実現します。

コンテナは共有ディレクトリを直接マウントします

リソースリスト

2 つの Tomcat コンテナを準備します。
tomcat8000 tomcat8001

詳細な手順

共有データの作成

共有ディレクトリを作成します: mkdir -p /usr/local/docker/volumn/pages/
共有ディレクトリに次の内容の共有ファイルindex.htmlを追加します。

私はボリューム共有ディレクトリ albk です!

tomcat8000tomcat8001を作成する

docker run -d --name tomcat8000 -p 8000:8080 -v /usr/local/docker/volumn:/usr/local/tomcat/webapps tomcat

docker run -d --name tomcat8001 -p 8001:8080 -v /usr/local/docker/volumn:/usr/local/tomcat/webapps tomcat
コンテナを起動するときに、ホストの/usr/local/docker/volumnディレクトリをtomcatコンテナの/usr/local/tomcat/webappsディレクトリにマウントして、データ共有を実現します。

コンテナが正常に起動していることを確認する

ドック ps 

docker exec -it a05a987b6da0 /bin/bash
webapps ディレクトリが正常にマウントされているかどうかを確認します。

ブラウザアクセス
http://ホストIP:8000/pages/index.html
http://ホストIP:8001/pages/index.html

共有ファイルを変更する

echo "我是一個volumn 共享目錄albk! 被修改了" > index.html

ブラウザを再認証する

変更した内容がリアルタイムで反映され、Tomcat コンテナを再デプロイする必要がないことがわかります。ただし、これにより、コンテナを起動するたびにパラメータが非常に長くなり、エラーが発生しやすくなります。これは、クラスターが小さい場合は許容されますが、規模が大きい場合は多くの作業が必要になります。別の方法を見てみましょう。

共有コンテナのマウント上記の方法を使用して、-vを使用して共有ディレクトリをマウントし、共有コンテナwebpagesを作成します。

docker create --name webpages -v /usr/local/docker/volumn/pages:/usr/local/tomcat/webapp tomcat /bin/true

共有コンテナのマウント

docker run --name tomcat8000 -d -p 8000:8080 --volumes-from webpages tomcat 
docker run --name tomcat8001 -d -p 8001:8080 --volumes-from webpages tomcat
検証プロセスは上記と同じです。コンテナ Web ページの実際の機能は、マウント ポイントを定義することです。コンテンツを変更する場合は、共有コンテナの共有ディレクトリを変更するだけで済みます。

要約する

コンテナが少ない場合は-vコンテナが多い場合は-volumes-fromを使用できます。基本的には -v と同じです。どちらを使用するかは実際の状況によって異なります。

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

以下もご興味があるかもしれません:
  • Dockerでコンテナを作成するときのディレクトリ権限
  • Docker は固定コンテナ IP アドレスを実現するためにカスタム ネットワークを作成します。
  • VMware での Ubuntu Docker のインストール (コンテナ構築)
  • 独立した IP を介して Windows コンテナ イントラネットの Docker に直接アクセスする方法
  • Dockerで作成したコンテナを削除する方法

<<:  MySQL で結合を使用して SQL を最適化する方法の詳細な説明

>>:  Vue3.0 手書き拡大鏡効果

推薦する

ミニプログラムはミニプログラムクラウドを使用してWeChatの支払い機能を実装します

目次1. WeChat Payを開く1.1 アフィリエイト加盟店番号1.2 加盟店番号を追加する1....

Vue プロジェクトのパッケージ化と最適化の実装手順

目次Vueプロジェクトのパッケージ化、起動、最適化Vueプロジェクトのパッケージ化プロジェクトホステ...

Vite2.0の落とし穴

目次Viteプロジェクトビルドの最適化他のやっとこれは前回の記事の補足です。設定プロジェクトで遭遇し...

MySQL カーディナリティ統計の簡単な分析

1. カーディナリティとは何ですか?カーディナリティとは、MySQL テーブルの列内の異なる値の数を...

Explainキーワードに基づいてMySQLインデックス機能を最適化する方法

EXPLAIN は、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合す...

Linux での Hbase のインストールと設定のチュートリアル

目次Linux での Hbase のインストールと設定1. Hbaseインストールパッケージをダウン...

VUE 3 テレポート コンポーネントと使用構文をすぐに使い始める

目次1. テレポートの紹介1.1. 複数のテレポートを使用する2. テレポートを使用する理由3. テ...

MySqlエスケープの詳細な使用例

MySQL エスケープエスケープとは、エスケープ文字の本来の意味を意味します。エスケープ文字の目的は...

MySQL で最大接続数を設定するためのヒントのまとめ

方法1: コマンドラインの変更次の図に示すように、MySQL コンソールを開いて「set GLOBA...

HTTPプロトコルにおけるステータスコードの意味

暫定的な応答を示し、要求者に操作の続行を要求するステータス コード。コードの説明100 (続行) リ...

MySQL でのデータベース間クエリの例

序文MySQL では、クロスデータベース クエリは主に 2 つの状況に分けられます。1 つは同じサー...

CentOS7 のシステム サービスに Nginx を追加する方法

導入コンパイル、インストール、問題の解決後、Nginx は正常に動作していますが、現時点では Ngi...

HTMLノードの追加と削除の簡単な例

<br />HTMLノードの追加と削除の簡単な例<input type="...

JavaScript 円グラフの例

描画効果実装コードJavaScript var キャンバス = document.getElemen...