搜尋
首頁Javajava教程基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

docker簡介

docker 是一個開源的應用容器引擎,和傳統的虛擬機器技術相比,docker 容器效能開銷極低,因此也廣受開發者喜愛。隨著基於docker的開發者越來越多,docker的映像也原來越豐富,未來各種企業級的完整解決方案都可以直接透過下載映像拿來即用。因此docker變得越來越重要。

本文目的

本文透過一個專案實例來介紹如果透過docker對外介面來實現對docker容器的管理和監控。

應用程式場景:

對伺服器資源池透過docker進行統一管理,按需分配資源和建立容器,達到資源最大化利用。同時確保各業務(容器)之間的隔離。並可支援專案的線上部署。

1、透過介面建立docker的tomcat容器,並配置限額。

2、上傳war套件並部署到容器。

3、動態監控docker所有容器的資源使用量。

程式碼基於docker-java開源元件,基於spring-boot完成功能開發。介面如下圖:

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

基礎環境

1、eclipse  2019-03;

2、docker for windows。本著學習和簡單的目的,並未使用linux環境,但原理和基本命令相同。

相關技術和知識點:

maven,spring-boot;spring mvc;spring上傳下載,jquery ajax和上傳。

實作原理

docker對外提供了豐富介面(如:restfull api),透過這些介面可對docker進行管理。 docker-java開源元件基於這個介面做了封裝,使得開發更加簡單。當然市面上還有其他一些封裝好的組件,大家可自行比較和學習。在這裡對開源作者表示感謝。

實現過程之前期準備

1、升級windows

由於我們使用的是windows環境, 筆者自己電腦預先安裝的是win10 家庭版,而docker for windows 則需要運行在更高階的作業系統上,才能使用虛擬化技術,因此需要升級到專業版。

如果需要升級的,升級過程也比較簡單,簡單介紹如下(已經是專業版的可以略過):

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

點擊更改產品密匙,輸入專業版的密匙之後,就等待慢慢升級了。密匙自己在網路上找,反正是有的。

2、安裝docker for windows

去官網下載後,一路下一步就可以了。安裝完後,會自行啟動,啟動後工具列就會出現docker的標誌。

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

安裝成功後,可以敲一些指令測試是否成功。如:查看docker基本資訊。

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

3、修改docker映像位址。

由於預設的鏡像位址較慢,一個tomcat鏡像都500多m,網路不好下載會很慢,可將鏡像位址配置成網易的鏡像位址,如下:

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

#4、啟動遠端管理

勾選上最後一項,這裡面的tcp//xxx就是遠端連線位址。

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

啟動後,在瀏覽器裡面敲一下位址,看看是否能回傳結果:

(此位址同​​在cmd裡面輸入docker indo)回傳的是json格式的內容:

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

實作過程之程式碼開發

1、建立maven專案。

  由於過程簡單,省略此過程。整個專案的程式碼結構如下:

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

2、配置docker-java和spring boot的maven依賴,最終pom檔案內容如下

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

透過看jar包,docker-java底層應該是用了netty依賴。

3、新增spring設定檔application.properties

設定jsp的位置和docker的管理位址。

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

4、主要類別介紹:

1.spring boot啟動主類別。

當然也可以設定其他容器或是用maven的jetty外掛來啟動。

可參考另外一篇文章:spring-boot原理(附帶實作一個spring-boot-starter實例)附帶原始碼下載

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

注意這個類別放的位置,最好放在根目錄,這樣根目錄下的所有子目錄都能被spring掃描到了。

2.dockerclientoperaterserver(與docker互動的類別),如下:

#包含以下方法:

initclient:初始化連結。

getdockerinfo:取得docker基本資訊;

stat:即時統計資料;

refreshcontainers:取得所有容器的基本信息,並放入快取;

#createandstartrcontaineranddeployapp:根據介面傳遞的參數建立並啟動容器,同時部署專案;

stopcontainer:停止容器;

rmcontainer:刪除容器;

closeclient:關閉連結;

pushapptocotainer:部署war包到tomcat;

由於程式碼片段太長,這裡看幾個主要的方法:

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

createcontainer (建立容器):

這個方法裡面透過docker-java建立容器,分配限額,配置連接埠對映等。

pushapptocotainer:部署專案到tomcat

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

#stat,監控方法:

監控這塊沒有用docker-java的方法,其實它是支援的,但是由於回傳結果需要各種處理,所以就用了投機取巧的方法。使用java呼叫cmd來執行(docker stats)取得監控結果。

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

docker-java來取得監控資訊的程式碼如下:

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

3.dockerclientcontroller(和介面互動的controller )。

主要方法介紹:

addcontainer:新增容器以及上傳war套件

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

#以上便是主要程式碼的講解。

具體程式碼詳情,請下載原始碼啟動後依照流程檢視。

實作後的主要介面:

由於是範例項目,程式碼沒有用什麼vue和bootstrap框架。自己寫了點css和js。具體效果如下:

1、監控管理首頁

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

#2、新增容器;

基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能

以上是基於springboot和docker-java怎麼實現對docker容器的動態管理和監控功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
JVM中的類加載程序子系統如何促進平台獨立性?JVM中的類加載程序子系統如何促進平台獨立性?Apr 23, 2025 am 12:14 AM

類加載器通過統一的類文件格式、動態加載、雙親委派模型和平台無關的字節碼,確保Java程序在不同平台上的一致性和兼容性,實現平台獨立性。

Java編譯器會產生特定於平台的代碼嗎?解釋。Java編譯器會產生特定於平台的代碼嗎?解釋。Apr 23, 2025 am 12:09 AM

Java編譯器生成的代碼是平台無關的,但最終執行的代碼是平台特定的。 1.Java源代碼編譯成平台無關的字節碼。 2.JVM將字節碼轉換為特定平台的機器碼,確保跨平台運行但性能可能不同。

JVM如何處理不同操作系統的多線程?JVM如何處理不同操作系統的多線程?Apr 23, 2025 am 12:07 AM

多線程在現代編程中重要,因為它能提高程序的響應性和資源利用率,並處理複雜的並發任務。 JVM通過線程映射、調度機制和同步鎖機制,在不同操作系統上確保多線程的一致性和高效性。

在Java的背景下,'平台獨立性”意味著什麼?在Java的背景下,'平台獨立性”意味著什麼?Apr 23, 2025 am 12:05 AM

Java的平台獨立性是指編寫的代碼可以在任何安裝了JVM的平台上運行,無需修改。 1)Java源代碼編譯成字節碼,2)字節碼由JVM解釋執行,3)JVM提供內存管理和垃圾回收功能,確保程序在不同操作系統上運行。

Java應用程序仍然可以遇到平台特定的錯誤或問題嗎?Java應用程序仍然可以遇到平台特定的錯誤或問題嗎?Apr 23, 2025 am 12:03 AM

Javaapplicationscanindeedencounterplatform-specificissuesdespitetheJVM'sabstraction.Reasonsinclude:1)Nativecodeandlibraries,2)Operatingsystemdifferences,3)JVMimplementationvariations,and4)Hardwaredependencies.Tomitigatethese,developersshould:1)Conduc

雲計算如何影響Java平台獨立性的重要性?雲計算如何影響Java平台獨立性的重要性?Apr 22, 2025 pm 07:05 PM

云计算显著提升了Java的平台独立性。1)Java代码编译为字节码,由JVM在不同操作系统上执行,确保跨平台运行。2)使用Docker和Kubernetes部署Java应用,提高可移植性和可扩展性。

Java的平台獨立性在廣泛採用中扮演著什麼角色?Java的平台獨立性在廣泛採用中扮演著什麼角色?Apr 22, 2025 pm 06:53 PM

Java'splatformindependenceallowsdeveloperstowritecodeonceandrunitonanydeviceorOSwithaJVM.Thisisachievedthroughcompilingtobytecode,whichtheJVMinterpretsorcompilesatruntime.ThisfeaturehassignificantlyboostedJava'sadoptionduetocross-platformdeployment,s

容器化技術(例如Docker)如何影響Java平台獨立性的重要性?容器化技術(例如Docker)如何影響Java平台獨立性的重要性?Apr 22, 2025 pm 06:49 PM

容器化技術如Docker增強而非替代Java的平台獨立性。 1)確保跨環境的一致性,2)管理依賴性,包括特定JVM版本,3)簡化部署過程,使Java應用更具適應性和易管理性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)