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 手書き拡大鏡効果

推薦する

Vueは書籍ショッピングカートの機能を実現

この記事の例では、書籍ショッピングカート機能を実現するためのVueの具体的なコードを参考までに共有し...

JavaScript は単一のリンクリストプロセス分析を実装します

序文:複数の要素を格納するために、配列は最も一般的に使用されるデータ構造ですが、配列には多くの欠点も...

Zabbix の psk 暗号化と zabbix_get 値の組み合わせ

Zabbix バージョン 3.0 以降、Zabbix サーバー、Zabbix プロキシ、Zabbix...

モバイルデバイスでのフリーズ問題に対する CSS3 ソリューション (アニメーション パフォーマンスの最適化)

1. CSS、jQuery、Canvasを使用してアニメーションを作成する1. キャンバス利点: ...

Linuxシステムでノードプロセスを実行しているが、プロセスを強制終了できない問題を解決します

まず、Linux システムで実行されているノード プロセスはプロセスを強制終了できないことを紹介しま...

17 個の JavaScript ワンライナー

目次1. DOMとBOM関連1. 要素にフォーカスがあるかどうかを確認する2. 要素の兄弟ノードをす...

MySQLの結合の基本原理についての簡単な説明

目次結合アルゴリズム駆動テーブルと非駆動テーブルの違い1. 単純なネストループ結合、単純なネスト、イ...

MySQL 5.7 で業務を停止せずに従来のレプリケーションを GTID レプリケーションに変更する例

GTID の利点により、従来のファイル POS ベースのレプリケーションを GTID ベースのレプリ...

React スキャフォールディングのパスエイリアスを設定する方法

この記事を書いている時点でのReactのバージョンは16.13.1です1 npm run eject...

JavaScript での HTML キャンバスとページ ストレージ テクノロジの使用に関する詳細な説明

目次1. JavaScriptはHTMLでキャンバスを使用する2. ページストレージ技術1. Jav...

Nginx で何ができるかの包括的な分析

序文この記事は、サードパーティのモジュールをロードせずにNginxで処理できることのみに焦点を当てて...

js を使用してファイルが UTF-8 でエンコードされているかどうかを判断する方法

従来の解決策FileReader を使用して UTF-8 形式のファイルを読み取り、ファイルの内容に...

MySql8 WITH RECURSIVE 再帰クエリ親子コレクションメソッド

背景コメントに似た機能を開発する場合は、必要に応じてすべてのコメントのサブセットをクエリする必要があ...

MySQL 8.0 のタイムゾーン問題を解決する手順

ソフトウェアバージョンウィンドウズ: ウィンドウズ10 MySQL: mysql-8.0.16-wi...

MySQLトリガーの概念、原理、使用法の詳細な説明

この記事では、例を使用して、MySQL トリガーの概念、原則、および使用方法を説明します。ご参考まで...