下圖是一個(gè)比較傳統(tǒng)的軟件架構(gòu):
做過java的同學(xué)可能對(duì)上圖的架構(gòu)方式比較了解,我們通常會(huì)將一個(gè)應(yīng)用程序生成一個(gè)war包,放到一個(gè)tomcat容器當(dāng)中并在一臺(tái)虛擬機(jī)(VM)中啟動(dòng)運(yùn)行,然后配置nginx的負(fù)載均衡策略,將來自用戶的請(qǐng)求轉(zhuǎn)發(fā)到某個(gè)tomcat應(yīng)用上,這種基于主機(jī)或虛擬機(jī)部署的應(yīng)用會(huì)存在以下幾個(gè)問題:
可移植性差
需要事先安裝應(yīng)用所需要的運(yùn)行環(huán)境,比如java應(yīng)用所需要的jdk或者jre,如果需要重新部署一個(gè)應(yīng)用,就需要重新初始化環(huán)境再安裝應(yīng)用,過程繁瑣; 另外如果一個(gè)應(yīng)用需要jdk7的運(yùn)行環(huán)境另外一個(gè)應(yīng)用需要jdk8,那在一臺(tái)主機(jī)上就很難滿足;
可維護(hù)性差
如果tomcat應(yīng)用本身或者所在的虛擬機(jī)操作系統(tǒng)出現(xiàn)問題時(shí),則需要人工干預(yù),比如配置nginx轉(zhuǎn)發(fā)規(guī)則、執(zhí)行重啟操作等;
可擴(kuò)展性差
應(yīng)用的負(fù)載有高有低,不夠穩(wěn)定,當(dāng)前應(yīng)用負(fù)載大的時(shí)候,我們需要增加應(yīng)用的數(shù)量,當(dāng)應(yīng)用負(fù)載降低的時(shí)候,我們需要降低應(yīng)用的數(shù)量;
無法資源隔離
如果一臺(tái)虛擬機(jī)部署多個(gè)應(yīng)用,不同的應(yīng)用或者進(jìn)程之間會(huì)相互影響;
...
我們接下來就來看一下我們是如何一步步的解決這些問題的。
首先是容器化,我們選擇的方案是Docker。
Docker將應(yīng)用程序與該程序的依賴,打包成一個(gè)容器鏡像,運(yùn)行這個(gè)文件就會(huì)生成虛擬容器。程序在這個(gè)虛擬容器里運(yùn)行,就好像運(yùn)行在真實(shí)的物理機(jī)上,并且每個(gè)容器之間資源互相隔離而且都有自己的文件系統(tǒng),這樣容器之間進(jìn)程不會(huì)相互影響,可以通過下圖來進(jìn)行對(duì)比基于虛擬機(jī)和基于容器部署應(yīng)用的區(qū)別:
Docker是客戶端-服務(wù)器架構(gòu)的應(yīng)用,主要由以下部分組成:
服務(wù)端是一個(gè)名為dockerd守護(hù)進(jìn)程,用來監(jiān)聽REST API請(qǐng)求并管理Docker對(duì)象,比如鏡像、容器、存儲(chǔ)卷及網(wǎng)絡(luò)等。
命令行客戶端(CLI),也就是我們平常在控制臺(tái)輸入的docker命令行,通過調(diào)用REST API進(jìn)行控制Docker daemon或者同其進(jìn)行集成。
鏡像倉(cāng)庫(Docker Registries),鏡像倉(cāng)庫用來存儲(chǔ)Docker鏡像。
以下是Docker的架構(gòu)示意圖:
IMAGES
鏡像一般是通過指令創(chuàng)建的只讀文件,用來生成容器。一般一個(gè)鏡像是基于另外一個(gè)鏡像并添加一些額外的指令創(chuàng)建的,可以通過一個(gè)名為Dockerfile的文件來生成一個(gè)鏡像,在Dockerfile中的每一行指令會(huì)生成一層(layer)。當(dāng)Dockerfile有改動(dòng)需要重新生成鏡像時(shí),只需要重新生成改變的那些層就可以,這樣就可以使得鏡像文件更加輕量、快速構(gòu)建。
CONTAINERS
容器是通過鏡像文件生成的運(yùn)行實(shí)例??梢酝ㄟ^REST API或者docker client進(jìn)行創(chuàng)建、啟動(dòng)、停止、移動(dòng)或者刪除一個(gè)容器。
SERVICE
用來管理和擴(kuò)展多個(gè)容器,需要同docker swarm一起工作
Docker采用go語言編寫,并且使用了Linux內(nèi)核中的幾個(gè)特性來實(shí)現(xiàn)其功能,主要有如下:
Namespaces
Docker通過Namespaces來提供隔離的工作空間(Workspace),當(dāng)你運(yùn)行一個(gè)容器的時(shí)候,Docker為這個(gè)容器創(chuàng)建了數(shù)個(gè)不同類型的Namespaces,主要有以下類型:
pid namespace:提供進(jìn)程隔離功能?
net namespace:管理網(wǎng)絡(luò)接口?
ipc namespace:內(nèi)部資源訪問控制 (IPC:Inter Process Communication)?
mnt namespace:管理文件系統(tǒng)掛載?
uts namespace: 內(nèi)核隔離以及版本識(shí)別(UTS:Unix Timesharing System)
CGroups(Control Groups)
Docker通過CGroup來限定容器只能使用特定的資源。舉例來講,Docker可以限制某個(gè)容器只能使用多少cpu及內(nèi)存資源。
UnionFS(Union File System)
一種文件系統(tǒng)類型,可以運(yùn)行在其他文件系統(tǒng)上,通過創(chuàng)建不同的層來使得容器文件系統(tǒng)更加輕量和快速。還有其他幾種類似的文件系統(tǒng),包括AUFS、btrfs、vfs和DeviceMapper。
以下命令是在Centos7上的命令,其他操作系統(tǒng)會(huì)存在一些差異
yum?install?docker:通過yum下載docker相關(guān)的依賴 systemctl?enable?docker:?開機(jī)運(yùn)行systemctl? start?docker:?啟動(dòng)docker服務(wù)執(zhí)行完上述操作,docker服務(wù)已經(jīng)在運(yùn)行了,可以通過執(zhí)行 docker version 和 docker info 命令查看docker的版本以及相關(guān)的信息。
我們之前有提到Docker可以將應(yīng)用程序打包成一個(gè)鏡像,那么如何生成鏡像文件呢?這就需要用到Dockerfile文件。它是一個(gè)文本文件,用來配置鏡像,Docker根據(jù)該文件生成二進(jìn)制的鏡像文件。以下是一個(gè)Dockerfile文件示例:
#?該鏡像文件繼承官方的nginx鏡像,冒號(hào)表示標(biāo)簽,這里標(biāo)簽是latest,表示最新的版本 FROM?nginx:latest #?將_book目錄下的文件copy至鏡像文件的/var/www/public目錄 COPY?_book?/var/www/public/ COPY??nginx_app.conf/etc/nginx/conf.d/?nginx_app.conf #?將容器的8080端口暴露出來,允許外部連接這個(gè)端口 EXPOSE?8080 #?容器啟動(dòng)后執(zhí)行?nginx?-g?daemon?off?命令 CMD?["nginx",?"-g",?"daemon?off;"]有了Dockerfile文件以后,就可以用docker build命令創(chuàng)建鏡像文件了。
docker?build?-t?zcloud-document:0.0.1. docker?image?ls如果運(yùn)行成功,就可以看到新生成的鏡像文件zcloud-document了。
關(guān)于Docker其他的一些操作命令,大家可以自行查閱,網(wǎng)上介紹的文章也比較多,參考文章:Docker 入門教程(https://docs.docker.com/get-started/)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁題目:云原生技術(shù)之Docker入門-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://aaarwkj.com/article8/dsjpip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、Google、ChatGPT、用戶體驗(yàn)、網(wǎng)站維護(hù)、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容