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

推薦する

Linuxはデュアルネットワークカードボンドとドライバーインターフェースを使用する

債券とは何かNIC ボンドは、実稼働シナリオでよく使用されるテクノロジーです。複数の NIC を 1...

deepin 2014 システムに MySQL データベースをインストールする方法

Deepin 2014 のダウンロードとインストールDeepin 2014 のダウンロードとインスト...

MySQLデーモンの起動に失敗したエラーの解決方法

MySQLデーモンの起動に失敗したエラーの解決方法数日前、公開されたウェブサイトはこれらのアクティビ...

ウェブページの再設計の7つの主要要素 ウェブページの再設計の7つの主要要素を共有する

Shopify Plus は、私たちが設立した e コマース プラットフォームのエンタープライズ バ...

MySQLのレプリケーションとチューニングの原則と方法を分析する

1. はじめにMySQL にはレプリケーション ソリューションが付属しており、次のような利点がありま...

ウェブフロントエンドコードを書く際の考慮事項のまとめ

1. HTMLタグの前に次のような文を追加するのが最適です。 <!DOCTYPE HTML P...

CSS3 で複数のカスタムフォントを導入する

今日、HTML に問題を発見しました。多くのデフォルト フォントが提供されていますが、「Bold」、...

MySQLテーブルにタイムスタンプを追加するいくつかの方法

シナリオ:テーブル内のデータは、同期ツールを使用して他のデータベースと同期する必要があり、増分同期に...

Linux でリモート MySQL データベースを手動で展開する方法の詳細な説明

1. mysql をインストールします。次のコマンドを実行して、YUM ソースを更新します。 rpm...

略語マークと頭字語マーク

<abbr>タグと<acronym>タグは、Web ページに表示される略語と...

MYSQL 5.6 スレーブレプリケーションの展開と監視

MYSQL 5.6 スレーブレプリケーションの展開と監視MYSQL 5.6 のインストールと展開 #...

nginx ウェブサイト サービスのアンチホットリンクを設定する方法 (推奨)

1. ホットリンクの原則1.1 Webページの準備Web ソース ホスト (192.168.153...

mysql57サービスが突然消えた問題をすぐに解決する

1つ、 G:\MySQL\MySQL Server 5.7\bin> mysqld --ini...

優れたユーザー インターフェース デザインのための 37 のヒント (画像付き)

1. 複数列レイアウトではなく、単一列レイアウトを使用する1 列のレイアウトにより、全体的な状況をよ...

JavaScript における URL オブジェクトの素晴らしい使い方

目次序文解析パラメータURLパラメータを変更する要約する序文URLオブジェクトはページ側ではあまり使...