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

推薦する

Docker を使用した JMeter+Grafana+Influxdb 監視プラットフォームの構築に関する詳細なチュートリアル

Jmeter がネイティブの結果表示機能を提供していることは誰もが知っています。ネイティブの結果表示...

Vue プロジェクトで SVG コンポーネントをパッケージ化して構成する手順

最近新しい会社に入社しました。プロジェクトに携わった後、タイトルアイコンが svg で作られていると...

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

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

MySQLで最大接続数を達成する方法

目次データベース接続数が急増した理由は何ですか? 1. はじめに2. 知識ポイント3. 練習するIV...

MySQL Installer Community 5.7.16 インストール詳細チュートリアル

この記事では、MySQL インストールの詳細なチュートリアルを記録し、全員と共有します。 1. バー...

VueはExcelテーブルをインポートし、インポートに失敗したデータを自動的にダウンロードします。

次のような要件があります: インポート ボタン。ボタンをクリックして Excel テーブルをインポー...

HTML の左右レイアウトのサンプルコード

CS: ...コードをコピーコードは次のとおりです。 html,body{ margin:0px; ...

docker createコマンドの使用方法

docker create コマンドは、イメージに基づいてコンテナを作成できます。このコマンドの効果...

MySQLインデックスの簡単な分析

データベース インデックスは、テーブル操作の速度を向上させることを目的としたデータ構造です。高速なラ...

Vue はカスタム「モーダル ポップアップ ウィンドウ」コンポーネントのサンプル コードを実装します

目次序文レンダリングサンプルコード要約する序文ダイアログ ボックスは非常に一般的なコンポーネントであ...

JavaScript が Jingdong のカルーセル効果を模倣

この記事では、JD.comのカルーセル効果の表示を実現するためのJavaScriptの具体的なコード...

Nginx の負荷分散構成、ダウンタイム発生時の自動切り替えモード

厳密に言えば、nginx には負荷分散バックエンド ノードのヘルス チェック機能はありませんが、デフ...

Tomcat でサーブレット URL パターンを構成する際の問題の詳細な説明

tomcat の web.xml を構成する場合、サーブレットは比較的重要な問題です。ここでは、サー...

mysql5.7.20 のインストールと設定方法のグラフィック チュートリアル (mac)

MySQL 5.7.20のインストールと設定方法のグラフィックチュートリアルをあなたと共有します1...