spring-boot と docker-java に基づいて Docker コンテナの動的な管理と監視を実装します [完全なソース コードのダウンロード付き]

spring-boot と docker-java に基づいて Docker コンテナの動的な管理と監視を実装します [完全なソース コードのダウンロード付き]

Docker入門

Docker はオープンソースのアプリケーション コンテナ エンジンです。従来の仮想マシン テクノロジと比較すると、Docker コンテナはパフォーマンス オーバーヘッドが非常に低いため、開発者からも広く愛用されています。 Docker をベースに作業する開発者が増えるにつれて、Docker イメージはますます豊富になってきています。将来的には、イメージをダウンロードするだけで、さまざまな完全なエンタープライズ レベルのソリューションを直接使用できるようになります。したがって、Docker はますます重要になります。

この記事の目的

この記事では、プロジェクトの例を使用して、Docker 外部インターフェースを介して Docker コンテナを管理および監視する方法を紹介します。

適用シナリオ:

サーバー リソース プールは Docker を通じて均一に管理され、リソースの使用率を最大化するために、リソースが割り当てられ、コンテナがオンデマンドで作成されます。同時に、さまざまな業務(コンテナ)間の分離も確保されます。また、プロジェクトのオンライン展開もサポートできます。

このプロジェクトは、上記のシナリオをシミュレートします。コードは厳密に禁止されておらず、学習のみを目的としています。

この記事

1. インターフェースを通じて Docker Tomcat コンテナを作成し、制限を設定します。

2. war パッケージをアップロードし、コンテナにデプロイします。

3. すべての Docker コンテナのリソース使用状況を動的に監視します。

コードは docker-java オープンソース コンポーネントに基づいており、機能開発は spring-boot に基づいて完了しています。インターフェースは次のとおりです。

基本環境

1. 日食 2019-03;

2. Windows 用の Docker。学習と簡略化のため、Linux 環境は使用しませんが、原理と基本コマンドは同じです。

関連技術と知識ポイント:

Maven、Spring Boot、Spring MVC、Spring のアップロードとダウンロード、jQuery Ajax とアップロード。

実施原則

Docker はさまざまな外部インターフェース (RESTfull API など) を提供し、それらを通じて Docker を管理できます。 docker-java オープンソース コンポーネントはこのインターフェースに基づいてカプセル化されるため、開発が容易になります。もちろん、市場には他のパッケージ化されたコンポーネントもあり、自分で比較して学ぶこともできます。ここでオープンソースの作者に感謝の意を表したいと思います。

実施前の準備

1. Windowsをアップグレードする

弊社ではWindows環境を使用しているため、私のパソコンにはWin10 Home Editionがプリインストールされており、Docker for Windowsは仮想化技術を使用するために上位のOS上で動作する必要があるため、Professional Editionにアップグレードする必要があります。

アップグレードが必要な場合、アップグレード プロセスは比較的簡単です。以下に簡単に説明します (すでにプロフェッショナル バージョンをお持ちの場合は、これをスキップできます)。

「プロダクト キーの変更」をクリックし、プロフェッショナル バージョンのキーを入力して、アップグレードが続行されるのを待ちます。自分でインターネットでキーを探すこともできます。とにかくそこにあります。

2. Windows用Dockerをインストールする

公式サイトからダウンロードしたら、次のステップをクリックするだけです。インストール後、自動的に起動し、起動後にツールバーに docker ロゴが表示されます。

インストールが成功したら、いくつかのコマンドを入力して、インストールが成功したかどうかをテストできます。例: Docker の基本情報を表示します。

3. Docker イメージのアドレスを変更します。

デフォルトのミラー アドレスは遅く、Tomcat ミラーは 500 m 以上離れており、ネットワークが良好でない場合はダウンロードが非常に遅くなるため、次のようにしてミラー アドレスを NetEase ミラー アドレスに設定できます。

4. リモート管理を開始する

最後の項目を確認してください。ここでの tcp//xxx はリモート接続アドレスです。

起動後、ブラウザにアドレスを入力して、結果が返されるかどうかを確認します。

http://localhost:2375/info (このアドレスは、cmd で docker indo を入力するのと同じです) は、json 形式でコンテンツを返します。

実装中のコード開発

1. Maven プロジェクトを作成します。

プロセスが簡単なため、このプロセスは省略されます。プロジェクト全体のコード構造は次のとおりです。

2. docker-javaとspring bootのMaven依存関係を設定します。最終的なpomファイルの内容は次のようになります。

jar パッケージを見ると、docker-java は最下層で netty 依存関係を使用していることがわかります。

3. Spring設定ファイルapplication.propertiesを追加する

jsp の場所と docker の管理アドレスを設定します。

4. 主なカテゴリーの紹介:

1. Spring Boot がメインクラスを起動します。

もちろん、他のコンテナを構成したり、Maven の jetty プラグインを使用して起動したりすることもできます。

別の記事も参照してください: Spring-boot の原理 (Spring-boot-Starter の例付き) とソースコードのダウンロード

このクラスの場所に注意してください。ルート ディレクトリの下のすべてのサブディレクトリを Spring がスキャンできるように、ルート ディレクトリに配置するのが最適です。

2.DockerClientOperaterServer (docker と対話するクラス) は次のとおりです。

以下のメソッドが含まれます。

initClient: 接続を初期化します。

getDockerInfo: Docker に関する基本情報を取得します。

stat: リアルタイム統計;

refreshContainers: すべてのコンテナの基本情報を取得し、キャッシュに保存します。

createAndStartrContainerAnddeployApp: インターフェースで渡されたパラメータに基づいてコンテナを作成および起動し、同時にプロジェクトをデプロイします。

stopContainer: コンテナを停止します。

rmContainer: コンテナを削除します。

closeClient: 接続を閉じます。

pushAppToCotainer: tomcat に war パッケージをデプロイします。

コード スニペットが長すぎるため、主なメソッドをいくつか示します。

createContainer (コンテナの作成):

この方法では、docker-java を使用してコンテナの作成、クォータの割り当て、ポート マッピングの構成などを行います。

pushAppToCotainer: プロジェクトをTomcatにデプロイする

統計、監視方法:

docker-java方式は監視には使用しません。実際にはサポートされていますが、返される結果にさまざまな処理が必要なため、ショートカット方式を使用します。監視結果を取得するには、java を使用して cmd を呼び出して (docker stats) を実行します。

監視情報を取得するための docker-java のコードは次のとおりです。

3.DockerClientController (インターフェースと対話するコントローラー)。

主な方法の紹介:

addContainer: コンテナを追加し、war パッケージをアップロードします

以上がメインコードの説明となります。

具体的なコードの詳細については、ソースコードをダウンロードして起動し、手順に従って表示してください。

実装後のメインインターフェース:

これはサンプル プロジェクトなので、コードでは Vue および Bootstrap フレームワークは使用されません。いくつかの CSS と JS を自分で書きました。具体的な効果は以下のとおりです。

1. 監視・管理ホームページ

2. コンテナを追加します。

要約する

以上が、spring-bootとdocker-javaに基づくdockerコンテナの動的管理と監視機能についてご紹介したものです[完全なソースコードのダウンロード付き]。お役に立てれば幸いです。ご質問がございましたら、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • Java コンテナ クラスのソース コード Deque と ArrayDeque の詳細な説明
  • Java同期コンテナと並行コンテナの詳細な説明
  • JavaFXデスクトップアプリケーション開発の詳細説明 - グループ(コンテナグループ)
  • Spring Boot Javaベースのコンテナ構成の説明
  • 同期コンテナから並行コンテナへのJavaの操作プロセス
  • Javaコンテナクラスのソースコード詳細説明セット
  • JAVA コンテナ コレクション (コレクションとマップ) の包括的な分析

<<:  TypeScript ジェネリックを簡単に説明する方法

>>:  mysql5.7.21 utf8 エンコーディングの問題と Mac 環境での解決方法

推薦する

純粋な CSS3 マインドマップ スタイルの例

マインドマップ彼はおそらく次のように見えるでしょう: インターネット上の実装のほとんどは d3.js...

MySQL共通インデックスとユニークインデックスの選択に関する詳細な分析

各人が固有の携帯電話番号で登録し、ビジネス コードによって重複する携帯電話番号が 2 つ書き込まれな...

Linuxコマンドに基づいてフォルダー内の特定のファイルパスを抽出します

最近では、特定のフォルダ内の特定のファイルを自動的に検索する必要があり、ファイルパスとファイル名を別...

Ubuntu 18.04 サーバーのパスワードを忘れたり改ざんされた場合にパスワードをリセットする方法

最近、サーバー上のアカウントが2つハッキングされ、パスワードが改ざんされました。幸い、まだ使えるアカ...

MySQL Strict Modeの知識ポイントの詳細な説明

I. 厳密モードの説明MySQL 5.0 以降の厳密モード (STRICT_TRANS_TABLES...

Centos8 で Docker を使用して Django プロジェクトをデプロイする詳細なチュートリアル

導入この記事では、django + uwsgi + nginx デプロイメントを使用して、Docke...

Dreamweaver で Zen コーディングを使用する方法

前回の記事「Zen Coding: HTML/CSS コードを素早く記述する方法」を公開した後、一部...

MySQL 外部キー制約の例の説明

MySQL の外部キー制約は、2 つのテーブル間のリンクを確立するために使用されます。 1 つのテー...

Vue コードの読みやすさに関するいくつかの提案

目次1. コンポーネントをうまく活用してコードを整理する1. UIコンポーネントを抽出する2. モジ...

mysql5.7.19 zip 詳細なインストールプロセスと構成

MySQL v5.7.19 正式版(32/64 ビットインストール版および zip 解凍版) 1. ...

DockerイントラネットはDNSを構築し、ip:port操作の代わりにドメイン名アクセスを使用します

たとえば、イントラネットに Jenkins サーバーがある場合、そのサーバーにアクセスするには、その...

MySQL データベースの大文字と小文字の区別の問題

MySQL では、データベースはデータ ディレクトリ内のディレクトリに対応します。データベース内の各...

MySQLでヘッダー付きのCSVファイルをエクスポートする方法

公式ドキュメント http://dev.mysql.com/doc/refman/5.7/en/se...

主軸上のFlex子要素の比率を制御する方法

背景フレックス レイアウトにより、配置とスペースの割り当てがより効果的に実現されます。最近、flex...

音声キューイングシステムを実装するためのJavaScript

目次導入主な特徴エフェクト表示キーコード導入音声キューイングシステムは、銀行、レストラン、病院などの...