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

推薦する

MySQL の完全なデータベース バックアップからデータベースとテーブルを復元する方法

公式の MySQL ダンプ ツールで、特定のデータベースのみを復元するにはどうすればよいですか?完全...

現在使用されている設定ファイル my.cnf を表示する mysql メソッド (推奨)

my.cnfは、MySQL の起動時に読み込まれる設定ファイルです。通常は MySQL インストー...

MySQLユーザー権限テーブルについての簡単な説明

MySQL はインストール時に自動的に mysql という名前のデータベースを作成します。mysql...

dl、dt、dd はいつ使用するのが適切ですか?

dl:定義一覧定義リストdt:定義タイトルタイトルを定義するdd:定義説明定義の説明dt は情報のタ...

Dockerは1行のコマンドでFTPサービス構築の実装を完了します

1行のコマンド docker run -d \ -v /share:/home/vsftpd \ -...

MySQLサービスが起動しても接続されない問題の解決策

mysql サービスは開始されていますが、接続できません。この問題を解決するにはどうすればよいでしょ...

WIN10 での JDK インストールと環境変数の設定手順 (詳細版)

目次1. JDKをダウンロードする(例としてjdk1.8.0を使用する) 2. JDK をインストー...

TypeScript インターフェースの紹介

目次1. インターフェース定義2. 属性2.1 オプション属性2.2 読み取り専用プロパティ3. ク...

Vue ルーター vue-router 詳細説明ガイド

中国語ドキュメント: https://router.vuejs.org/zh/ Vue Router...

MySQL データベースのバックアップ プロセスに関する注意事項

今日は、データ バックアップに関連するいくつかの点について調べ、MySQL データ バックアップに関...

17 個の JavaScript ワンライナー

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

ウェブデザインと制作の一般的な原則をまとめる

<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...

Google Recaptcha 認証を使用した Vue 実装例

最近のプロジェクトでは、Google ロボット認証を使用する必要があります。これには VPN が必要...

Windows で Mysql を起動したときに 1067 が表示される場合の解決策

数日前に仕事を始めて、Mysql をインストールしたところ、開くことができました。今日、会社に行った...

MySQLがbinlogファイルを手動で登録し、マスタースレーブ異常を引き起こす理由

1. 問題の原因友人の @水米田 から、POSITION に基づくマスタースレーブについて質問があり...