嗨,你好呀,我是哪咤。
單體套用拆分成微服務後,能夠實作快速開發叠代,但因為小服務太多,導致測試和部署的成本提高。
單體套用中,將Spring Boot工程打包成一個war包,然後部署在Linux伺服器的Tomcat中就可以了。
拆分成微服務後,修改一個需求,可能會涉及多個微服務,這個時候,被修改過的程式碼都需要重新測試、打包、部署、上線釋出。無形之中,給現場運維人員增加了成倍的工作壓力。
微服務通常會在共有雲上建立ECS進行擴容,ECS通常只包含了基本的作業系統環境,沒有包含執行java的環境jdk,就需要在ECS上安裝jdk,而且每個服務依賴的jdk版本可能也不會相同,一般情況下,都會采用jdk8, 但 有些喜愛前言技術的計畫經理,可能要試一下jdk21,畢竟也是一個長期穩定的大版本。
而容器技術可以解決上面的兩個問題(程式碼部署難、缺環境)。
時下容器技術最火的當屬Docker, 很多小夥伴也用了多年,只知道它是容器技術,可以將程式和依賴打到Docker裏,然後釋出在Linux伺服器中,就完成了程式的部署, 一次構建、到處執行 ,很牛逼, 至於其它的,就不知道了,也不想知道~
一、神之容器 Docker
Docker是一個開源的套用容器引擎,讓開發者可以打包他們的套用以及依賴包到一個可移植的映像中,然後釋出到任何流行的Linux或Windows作業系統的機器上,也可以實作虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。
Docker屬於Linux容器的一種封裝,提供簡單易用的容器使用介面。它是目前最流行的Linux容器解決方案。
一個完整的Docker由以下七個部份組成:
Docker Client 客戶端
Docker Daemon 守護行程 ,提供Docker Server,用於接收Docker Client的請求,Docker Server 透過路由Router與分發排程,找到相應的 Handler 來執行請求;
Docker Image 映像 ,包含Distribution(分發)、Layer(層)、Image(映像)、Registry(註冊中心)、Reference(參照);
Docker Driver 驅動 ,Docker架構中的驅動模組,它主要透過與Docker守護行程進行互動,實作對Docker容器執行環境的客製和管理;
Docker Graph 內部資料庫 ,Docker Graph是Docker中的一種數據結構,用於記錄和跟蹤Docker映像和容器之間的關系;
Libcontainer 函式庫 ,Libcontainer是Docker的底層容器管理庫,它提供了一組介面和函式,用於建立和管理容器。Libcontainer直接與內核互動,負責容器的名稱空間、cgroup、網路裝置等底層操作;
Docker Container 容器 ,Docker Container是Docker中的容器例項,它是透過Driver和Libcontainer共同協作建立出來的。Driver提供了容器的執行環境客製,而Libcontainer則負責容器的具體建立和管理操作。
二、Docker架構圖
使用者使用 Docker Client (客戶端) 與 Docker Daemon 建立通訊,並行送請求給後者,客戶端和守護程式之間透過REST API進行通訊,可以使用UNIX套接字或網路介面;
Docker Daemon (後台守護行程)提供Docker Server,用於接收Docker Client的請求,Docker Server 透過路由Router與分發排程,找到相應的 Handler 來執行請求,Docker Daemon提供Docker Engine,Engine是Docker 架構中的執行引擎,在Docker Engine中,一個Job可以被認為是內部最基本的工作執行單元。Docker可以做的每一項工作,都可以抽象為一個Job。例如,在容器內部執行一個行程,這是一個Job;建立一個新的容器,這也是一個Job。
Docker Image 映像,包含Distribution(分發)、Layer(層)、Image(映像)、Registry(註冊中心)、Reference(參照)。
Docker Driver 驅動,Docker架構中的驅動模組,它主要透過與Docker守護行程進行互動,實作對Docker容器執行環境的客製和管理;
當需要容器映像時,則從 Registry(註冊中心) 中下載映像,並透過映像管理驅動 Graphdriver 將下載映像以 Graph 的形式儲存;
Docker Graph 內部資料庫 ,Docker Graph是Docker中的一種數據結構,用於記錄和跟蹤Docker映像和容器之間的關系;
一個 Repository 表示某類映像的倉庫,同一個 Repository 內的映像用 Tag 來區分,一個 Registry 包含多個Repository,一個 Repository 包含同型別的多個 Image,並儲存著每一個容器映像的具體資訊;GraphDB是一個基於SQLite的小型圖資料庫,記錄容器映像之間的關系;
rootfs是Docker容器的根檔案系統,它位於bootfs之上,表現為Docker容器的根目錄,包含基本的檔和目錄。在Docker中,rootfs由內核掛載為「唯讀」模式,而後透過「聯合掛載」技術額外掛載一個「可寫」層;
透過 Networkdriver 完成Docker容器網路環境的配置,其中包括Docker啟動時為Docker環境建立網橋等功能;
Docker Execdriver是Docker容器的執行驅動,負責建立容器執行名稱空間,負責容器資源使用的統計與限制,負責容器內部行程的真正執行等;
Libcontainer 是Docker的底層容器管理庫,它提供了一組介面和函式,用於建立和管理容器。Libcontainer直接與內核互動,負責容器的名稱空間、cgroup、網路裝置等底層操作;
Docker Container 是Docker中的容器例項,它是透過Driver和Libcontainer共同協作建立出來的。Driver提供了容器的執行環境客製,而Libcontainer則負責容器的具體建立和管理操作。Docker Container是Docker架構中服務交付的最終體現形式。實作「一次構建,到處執行」的目標,大大提高了應用程式的部署效率和可移植性。
1、Docker Client 客戶端
Docker Client是Docker的客戶端工具,也被稱為Docker命令列界面(CLI)。它是使用者與Docker平台進行互動的主要方式。
Docker Client 的主要作用如下:
使用者互動界面 :Docker Client提供了使用者友好的命令列互動界面,使用者可以透過輸入命令來執行各種Docker操作,例如建立容器、啟動容器、停止容器、構建映像等。
容器管理 :透過Docker Client,使用者可以方便地管理Docker容器。可以建立新的容器、啟動、停止、重新開機容器,並且還可以檢視容器的日誌、狀態等資訊。
映像管理 :Docker Client也允許使用者管理Docker映像。使用者可以搜尋、下載、構建、刪除映像等操作,以滿足應用程式部署的需求。
資源配置 :使用者可以透過Docker Client配置容器的執行資源,例如CPU、記憶體等。這樣可以確保容器在執行時具有合適的資源配置。
網路通訊 :Docker Client可以與Docker Daemon進行通訊,發送請求並接收響應。它使用REST API或其他通訊協定與Docker Daemon進行互動,從而實作對Docker容器的遠端管理。
Docker Client是使用者與Docker平台進行互動的重要工具。它提供了命令列界面,讓使用者能夠方便地管理Docker容器和映像,並進行資源配置和網路通訊等操作。
2、Docker Daemon 守護行程
Docker Daemon是Docker的守護行程,它是Docker平台的後台服務元件,充當伺服器角色。
Docker Daemon 的主要作用如下:
容器管理 :Docker Daemon負責建立、啟動、停止、刪除和管理Docker容器。它接收來自Docker客戶端的請求,並根據請求執行相應的容器管理操作。
映像管理 :Docker Daemon也管理Docker映像。它可以下載、上傳、構建和刪除映像,並管理映像的版本控制和安全性。
網路資源管理 :Docker Daemon負責建立和管理Docker容器的網路環境。它配置和管理容器的網路設定,確保容器之間的通訊和互相存取。
數據卷管理 :Docker Daemon還管理容器的數據卷,用於持久化儲存容器中的數據,保證數據的可靠性和永續性。
Docker Daemon是Docker平台的核心元件,提供容器、映像、網路和數據卷的管理功能。它扮演著守護行程的角色,確保Docker平台的正常執行和管理。
3、映像(Image)
在Docker映像中,Distribution、Layer、Image、Registry和Reference各自扮演了重要角色。
Distribution(分發) :通常涉及到Docker映像的分發和運輸。Docker映像可以透過不同的方式進行分發,例如直接從Registry下載,或者透過特定的工具匯入和匯出;
Layer(層) :Docker映像由多個layer層組成,每層都是一個唯讀的檔案系統。這種分層設計可以實作共享和復用,提高效率。當映像中的檔發生變化時,Docker只會下載發生變化的層,而不是整體映像,節省了時間和寬頻;
Image(映像) :映像是Docker的核心,它是執行容器的基礎。映像包含了執行應用程式的所有檔和依賴,是一個唯讀樣版,可以透過映像建立新的容器例項;
Registry(註冊中心) :Registry是儲存和管理Docker映像的伺服器。它是使用者上傳、下載、管理Docker映像的地方。例如Dokcer Hub就是一個公共的Registry;
Reference(參照) :參照指的是Docker映像的一種標識,透過參照,使用者可以指定需要操作的特定映像;
三、run的流程和docker原理
1、run的流程
2、與傳統虛擬化方式對比
這就是Docker為何比虛擬化更快的原因,Docker有著比虛擬機器更少的抽象層,docker利用的是宿主機的內核,VM需要的是Guest OS。
直接存取、經濟、穩定 使用最新ChatGpt4o的方法
給大家推薦一個ChatGPT 4o國內網站,是我們團隊一直在使用的,我們對接的是OpenAI官網的帳號,給大家打造了一個一模一樣的ChatGPT,很多粉絲朋友現在也都透過我拿這種號,價格不貴,關鍵還有售後 。
一句話說明 : 用官方一半價格的錢,用跟官方 ChatGPT4.0 一模一樣功能的工具,而且不需要魔法,直接使用,不用擔心網路問題。
功能簡介:O penAI最新大模型GPT-4o、ChatGPT4.0知識問答、最強程式碼大模型Code Copilot、DALL-E AI繪畫、寫論文大模型Consensus、論文降重大模型(中文論文降重)、圖片自動辨識、聯網查詢、BUG解決、程式碼最佳化、上傳檔、數據分析等。
國內直接使用 ChatGPT4o :
支持OpenAI最新的ChatGPT4o。
無需魔法, 同時支持 PC、手機、平板,瀏覽器直接使用 。
一個帳號一個專屬授權碼,保護個人私密,使用記錄長期保存。
ChatGPT3.5永久免費, 提供免費共享GPT3.5授權碼 。
官方獨立帳戶規定每3小時40次 4.0提問,我們這個不限制4.0提問次數。
我們這個不會出現封號的情況,避免你因為封號多花冤枉錢。
聯系站長 18640839506 ,備註AI,直接使用ChatGPT4o,拉你進ChatGPT售後群,群公告有使用說明和註意事項,有任何問題群裏交流,群裏有專業的技術支持
ChatGPT4o
NOW 6 .3
四、Docker安裝
1、解除安裝Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、需要的安裝包
yum install -y yum-utils
3、設定映像倉庫
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
用國內的
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新軟體包索引
yum mackecache fast
4、安裝Docker相關
ce社群版,ee企業版,推薦安裝企業版
yum install docker-ce docker-ce-cli containerd.io
5、啟動Docker
systemctl start docker
6、使用docker version檢視版本
7、啟動hello world映像
docker run hello-world
五、docker常用命令小結
常用命令 | 命令含義 |
---|---|
attach | 當前shell下attach連線指定執行映像 |
build | 透過Dockerfile客製映像 |
commit | 送出當前容器為新的映像 |
cp | 從容器中拷貝指定檔或者目錄到宿主機中 |
create | 建立一個新的容器,同run 但不啟動容器 |
diff | 檢視docker容器變化 |
events | 從docker服務獲取容器即時事件 |
exec | 在已存在的容器上執行命令 |
export | 匯出容器的內容流作為一個tar歸檔檔(對應import) |
history | 展示一個映像形成歷史 |
images | 列出系統當前映像 |
import | 從tar包中的內容建立一個新的檔案系統映像(對應export) |
info | 顯示系統相關資訊 |
inspect | 檢視容器詳細資訊 |
kill | 強制停止指定docker容器 |
load | 從一個tar包中載入一個映像(對應save) |
login | 註冊或者登陸一個docker源伺服器 |
logout | 從當前Docker registry結束 |
logs | 輸出當前容器日誌資訊 |
pause | 暫停容器 |
port | 檢視對映埠對應的容器內部源埠 |
ps | 列出容器列表 |
pull | 從docker映像源伺服器拉取指定映像或者庫映像 |
push | 推播指定映像或者庫映像至docker源伺服器 |
rename | 重新命名容器 |
restart | 重新開機執行的容器 |
rm | 移除一個或者多個容器 |
rmi | 移除一個或多個映像(無容器使用該映像才可以刪除,否則需要刪除相關容器才可以繼續或者-f強制刪除) |
run | 建立一個新的容器並執行一個命令 |
save | 保存一個映像為一個tar包(對應load) |
search | 在docker hub中搜尋映像 |
start | 啟動容器 |
stats | 統計容器使用資源 |
stop | 停止容器 |
tag | 給映像打標簽 |
top | 檢視容器中執行的行程資訊 |
unpause | 取消暫停容器 |
version | 檢視容器版本號 |
wait | 截取容器停止時的結束狀態值 |
回復gpt,獲取ChatGPT4o直接使用地址
點選閱讀原文,國內直接使用ChatGpt4o