一、云計算的三種服務(wù)模式
laas、pass、saas
1.1 IaaS: Infrastructure-as-a-Service(基礎(chǔ)設(shè)施即服務(wù))
第一層叫做 IaaS,有時候也叫做
Hardware-as-a-Service,幾年前如果你想在辦公室或者公司的網(wǎng)站上運(yùn)行一些企業(yè)應(yīng)用,你需要去買服務(wù)器,或者別的高昂的硬件來控制本地應(yīng)用,讓你的業(yè)務(wù)運(yùn)行起來。
但是現(xiàn)在有 IaaS,你可以將硬件外包到別的地方去。IaaS
公司會提供場外服務(wù)器,存儲和網(wǎng)絡(luò)硬件,你可以租用。節(jié)省了維護(hù)成本和辦公場地,公司可以在任何時候利用這些硬件來運(yùn)行其應(yīng)用。
一些大的 IaaS 公司包括 Amazon,
Microsoft, VMWare, Rackspace 和 Red Hat. 不過這些公司又都有自己的專長,比如 Amazon 和微軟給你提供的不只是 IaaS,他們還會將其計算能力出租給你來 host 你的網(wǎng)站。
作用通過 IaaS 這種模式,用戶可以從供應(yīng)商那里獲得他所需要的虛擬機(jī)或者存儲等資源來裝載相關(guān)的應(yīng)用,同時這些基礎(chǔ)設(shè)施的繁瑣的管理工作將由 IaaS 供應(yīng)商來處理。IaaS 能通過它上面對虛擬機(jī)支持眾多的應(yīng)用。IaaS 主要的用戶是系統(tǒng)管理員。
主要產(chǎn)品包括:Amazon EC2,Linode,Joyent,Rackspace,IBM Blue Cloud 和 Cisco UCS 等。
IaaS 的七個基本功能:
資源抽象:使用資源抽象的方法 (比如,資源池) 能更好地調(diào)度和管理物理資源。
資源監(jiān)控:通過對資源的監(jiān)控,能夠保證基礎(chǔ)實施高效率的運(yùn)行。
負(fù)載管理:通過負(fù)載管理,不僅能使部署在基礎(chǔ)設(shè)施上的應(yīng)用運(yùn)能更好地應(yīng)對突發(fā)情況,而且還能更好地利用系統(tǒng)資源。
數(shù)據(jù)管理:對云計算而言,數(shù)據(jù)的完整性,可靠性和可管理性是對 IaaS 的基本要求。
資源部署:也就是將整個資源從創(chuàng)建到使用的流程自動化。
安全管理:IaaS 的安全管理的主要目標(biāo)是保證基礎(chǔ)設(shè)施和其提供的資源能被合法地訪問和使用。
計費(fèi)管理:通過細(xì)致的計費(fèi)管理能使用戶更靈活地使用資源。
1.2 PaaS: Platform-as-a-Service(平臺即服務(wù))
第二層就是所謂的 PaaS,某些時候也叫做中間件。你公司所有的開發(fā)都可以在這一層進(jìn)行,節(jié)省了時間和資源。
PaaS 公司在網(wǎng)上提供各種開發(fā)和分發(fā)應(yīng)用的解決方案,比如虛擬服務(wù)器和操作系統(tǒng)。這節(jié)省了你在硬件上的費(fèi)用,也讓分散的工作室之間的合作變得更加容易。網(wǎng)頁應(yīng)用管理,應(yīng)用設(shè)計,應(yīng)用虛擬主機(jī),存儲,安全以及應(yīng)用開發(fā)協(xié)作工具等。
一些大的 PaaS 提供者有 Google App Engine,Microsoft Azure,Force.com,Heroku,Engine Yard。最近興起的公司有 AppFog, Mendix 和 Standing Cloud
通過 PaaS 這種模式,用戶可以在一個包括 SDK,文檔和測試環(huán)境等在內(nèi)的開發(fā)平臺上非常方便地編寫應(yīng)用,而且不論是在部署,或者在運(yùn)行的時候,用戶都無需為服務(wù)器,操作系統(tǒng),網(wǎng)絡(luò)和存儲等資源的管理操心,這些繁瑣的工作都由 PaaS 供應(yīng)商負(fù)責(zé)處理,而且 PaaS 在整合率上面非常驚人,比如一臺運(yùn)行 Google App Engine 的服務(wù)器能夠支撐成千上萬的應(yīng)用,也就是說,PaaS 是非常經(jīng)濟(jì)的。PaaS 主要的用戶是開發(fā)人員。
主要產(chǎn)品包括:Google App Engine,force.com,heroku 和 Windows Azure Platform 等。
主要有四大功能:友好的開發(fā)環(huán)境:通過提供 SDK 和 IDE 等工具來讓用戶能在本地方便地進(jìn)行應(yīng)用的開發(fā)和測試。
豐富的服務(wù):PaaS 平臺會以 API 的形式將各種各樣的服務(wù)提供給上層的應(yīng)用。
自動的資源調(diào)度:也就是可伸縮這個特性,它將不僅能優(yōu)化系統(tǒng)資源,而且能自動調(diào)整資源來幫助運(yùn)行于其上的應(yīng)用更好地應(yīng)對突發(fā)流量。
精細(xì)的管理和監(jiān)控:通過 PaaS 能夠提供應(yīng)用層的管理和監(jiān)控,比如,能夠觀察應(yīng)用運(yùn)行的情況和具體數(shù)值 (比如,吞吐量和反映時間) 來更好地衡量應(yīng)用的運(yùn)行狀態(tài),還有能夠通過精確計量應(yīng)用使用所消耗的資源來更好地計費(fèi)。
1.3 SaaS: Software-as-a-Service(軟件即服務(wù))
第三層也就是所謂 SaaS。這一層是和你的生活每天接觸的一層,大多是通過網(wǎng)頁瀏覽器來接入。任何一個遠(yuǎn)程服務(wù)器上的應(yīng)用都可以通過網(wǎng)絡(luò)來運(yùn)行,就是 SaaS 了。
你消費(fèi)的服務(wù)完全是從網(wǎng)頁如 Netflix, MOG, Google Apps, Box.net,
Dropbox 或者蘋果的 iCloud 那里進(jìn)入這些分類。盡管這些網(wǎng)頁服務(wù)是用作商務(wù)和娛樂或者兩者都有,但這也算是云技術(shù)的一部分。
一些用作商務(wù)的 SaaS 應(yīng)用包括 Citrix 的 GoToMeeting,Cisco 的
WebEx,Salesforce 的 CRM,
ADP,Workday 和 SuccessFactors。
通過 SaaS 這種模式,用戶只要接上網(wǎng)絡(luò),并通過瀏覽器,就能直接使用在云端上運(yùn)行的應(yīng)用,而不需要顧慮類似安裝等瑣事,并且免去初期高昂的軟硬件投入。SaaS 主要面對的是普通的用戶。
主要產(chǎn)品包括:Salesforce Sales Cloud,Google Apps,Zimbra,Zoho 和 IBM Lotus Live 等。
談到 SaaS 的功能,也可以認(rèn)為是要實現(xiàn) SaaS 服務(wù),供應(yīng)商需要完成那些功能? 主要有四個方面:
隨時隨地訪問:在任何時候或者任何地點,只要接上網(wǎng)絡(luò),用戶就能訪問這個 SaaS 服務(wù)。
支持公開協(xié)議:通過支持公開協(xié)議 (比如 HTML4/5),能夠方便用戶使用。
安全保障:SaaS 供應(yīng)商需要提供一定的安全機(jī)制,不僅要使存儲在云端的用戶數(shù)據(jù)處于絕對安全的境地,而且也要在客戶端實施一定的安全機(jī)制 (比如 HTTPS) 來保護(hù)用戶。
多住戶 (Multi-Tenant) 機(jī)制:通過多住戶機(jī)制,不僅能更經(jīng)濟(jì)地支撐龐大的用戶規(guī)模,而且能提供一定的可定制性以滿足用戶的特殊需求。
1.4 Iaas 和 Paas 之間的比較
PaaS 的主要作用是將一個開發(fā)和運(yùn)行平臺作為服務(wù)提供給用戶,而 IaaS 的主要作用是提供虛擬機(jī)或者其他資源作為服務(wù)提供給用戶。接下來,將在七個方面對 PaaS 和 IaaS 進(jìn)行比較:
1) 開發(fā)環(huán)境:PaaS 基本都會給開發(fā)者提供一整套包括 IDE 在內(nèi)的開發(fā)和測試環(huán)境,而 IaaS 方面用戶主要還是沿用之前比較熟悉那套開發(fā)環(huán)境,但是因為之前那套開發(fā)環(huán)境在和云的整合方面比較欠缺,所以使用起來不是很方便。
2) 支持的應(yīng)用:因為 IaaS 主要是提供虛擬機(jī),而且普通的虛擬機(jī)能支持多種操作系統(tǒng),所以 IaaS 支持的應(yīng)用的范圍是非常廣泛的。但如果要讓一個應(yīng)用能跑在某個 PaaS 平臺不是一件輕松的事,因為不僅需要確保這個應(yīng)用是基于這個平臺所支持的語言,而且也要確保這個應(yīng)用只能調(diào)用這個平臺所支持的 API,如果這個應(yīng)用調(diào)用了平臺所不支持的 API,那么就需要對這個應(yīng)用進(jìn)行修改。
3) 開放標(biāo)準(zhǔn):雖然很多 IaaS 平臺都存在一定的私有功能,但是由于 OVF 等協(xié)議的存在,使得 IaaS 在跨平臺和避免被供應(yīng)商鎖定這兩面是穩(wěn)步前進(jìn)的。而 PaaS 平臺的情況則不容樂觀,因為不論是 Google 的 App Engine,還是 Salesforce 的 Force.com 都存在一定的私有 API。
4) 可伸縮性:PaaS 平臺會自動調(diào)整資源來幫助運(yùn)行于其上的應(yīng)用更好地應(yīng)對突發(fā)流量。而 IaaS 平臺則需要開發(fā)人員手動對資源進(jìn)行調(diào)整才能應(yīng)對。
5) 整合率和經(jīng)濟(jì)性: PaaS 平臺整合率是非常高,比如 PaaS 的代表 Google App Engine 能在一臺服務(wù)器上承載成千上萬的應(yīng)用,而普通的 IaaS 平臺的整合率最多也不會超過 100,而且普遍在 10 左右,使得 IaaS 的經(jīng)濟(jì)性不如 PaaS。
6) 計費(fèi)和監(jiān)管:因為 PaaS 平臺在計費(fèi)和監(jiān)管這兩方面不僅達(dá)到了 IaaS 平臺所能企及的操作系統(tǒng)層面,比如,CPU 和內(nèi)存的使用量等,而且還能做到應(yīng)用層面,比如,應(yīng)用的反應(yīng)時間(Response Time)或者應(yīng)用所消耗的事務(wù)多少等,這將提高計費(fèi)和管理的精確性。
7) 學(xué)習(xí)難度:因為在 IaaS 上面開發(fā)和管理應(yīng)用和現(xiàn)有的方式比較接近,而 PaaS 上面開發(fā)則有可能需要學(xué)一門新的語言或者新的框架,所以 IaaS 學(xué)習(xí)難度更低。
PaaS |
IaaS |
|
開發(fā)環(huán)境 |
完善 |
普通 |
支持的應(yīng)用 |
有限 |
廣 |
通用性 |
欠缺 |
稍好 |
可伸縮性 |
自動伸縮 |
手動伸縮 |
整合率和經(jīng)濟(jì)性 |
高整合率,更經(jīng)濟(jì) |
低整合率 |
計費(fèi)和監(jiān)管 |
精細(xì) |
簡單 |
學(xué)習(xí)難度 |
略難 |
低 |
未來的 PK
在當(dāng)今云計算環(huán)境當(dāng)中,IaaS 是非常主流的,無論是 Amazon EC2 還是 Linode 或者 Joyent 等,都占有一席之地,但是隨著 Google 的 App Engine,Salesforce 的 Force.com 還是微軟的 Windows Azure 等 PaaS 平臺的推出,使得 PaaS 也開始嶄露頭角。談到這兩者的未來,特別是這兩者之間的競爭關(guān)系,我個人認(rèn)為,短期而言,因為 IaaS 模式在支持的應(yīng)用和學(xué)習(xí)難度這兩方面的優(yōu)勢,使得 IaaS 將會在短期之內(nèi)會成為開發(fā)者的首選,但是從長期而言,因為 PaaS 模式的高整合率所帶來經(jīng)濟(jì)型使得如果 PaaS 能解決諸如通用性和支持的應(yīng)用等方面的挑戰(zhàn),它將會替代 IaaS 成為開發(fā)者的 “新寵”。
它們之間的關(guān)系主要可以從兩個角度進(jìn)行分析:其一是用戶體驗角度,從這個角度而言,它們之間關(guān)系是獨(dú)立的,因為它們面對不同類型的用戶。其二是技術(shù)角度,從這個角度而言,它們并不是簡單的繼承關(guān)系 (Saa.....
1.5 三種服務(wù)模式
根據(jù)現(xiàn)在最常用,也是比較權(quán)威的 NIST(National Institute of Standards and Technology,美國國家標(biāo)準(zhǔn)技術(shù)研究院) 定義,云計算主要分為三種服務(wù)模式,而且這個三層的分法重要是從用戶體驗的角度出發(fā)的:
Software as a Service,軟件即服務(wù),簡稱 SaaS,這層的作用是將應(yīng)用作為服務(wù)提供給客戶。
Platform as a Service,平臺即服務(wù),簡稱 PaaS,這層的作用是將一個開發(fā)平臺作為服務(wù)提供給用戶。
Infrastructure as a Service, 基礎(chǔ)設(shè)施即服務(wù),簡稱 IaaS,這層的作用是提供虛擬機(jī)或者其他資源作為服務(wù)提供給用戶。
三種模式之間的關(guān)系
它們之間的關(guān)系主要可以從兩個角度進(jìn)行分析:其一是用戶體驗角度,從這個角度而言,它們之間關(guān)系是獨(dú)立的,因為它們面對不同類型的用戶。其二是技術(shù)角度,從這個角度而言,它們并不是簡單的繼承關(guān)系 (SaaS 基于 PaaS,而 PaaS 基于 IaaS),因為首先 SaaS 可以是基于 PaaS 或者直接部署于 IaaS 之上,其次 PaaS 可以構(gòu)建于 IaaS 之上,也可以直接構(gòu)建在物理資源之上。
二、虛擬化概述
2.1 虛擬化是什么?
虛擬化:將應(yīng)用程序和系統(tǒng)內(nèi)核資源進(jìn)行解耦,以操作系統(tǒng)級別進(jìn)行隔離,目的是提高資源利用率
虛擬化,是指通過虛擬化技術(shù)將一臺計算機(jī)虛擬為多臺邏輯計算機(jī)。在一臺計算機(jī)上同時運(yùn)行多個邏輯計算機(jī),每個邏輯計算機(jī)可運(yùn)行不同的操作系統(tǒng),并且應(yīng)用程序都可以在相互獨(dú)立的空間內(nèi)運(yùn)行而互不影響,從而顯著提高計算機(jī)的工作效率。
虛擬化使用軟件的方法重新定義劃分 IT 資源,可以實現(xiàn) IT 資源的動態(tài)分配、靈活調(diào)度、跨域共享,提高 IT 資源利用率,使 IT 資源能夠真正成為社會基礎(chǔ)設(shè)施,服務(wù)于各行各業(yè)中靈活多變的應(yīng)用需求。
2.2 虛擬化兩大組件
虛擬機(jī)管理器功能:調(diào)用資源
兩大核心組件:QEMU、KVM
QEMU:
①可以理解為隊列,核心目的是 ** 調(diào)用資源內(nèi)核中的資源 **,需要把 KVM 邏輯分割出來的資源運(yùn)輸給 QEMU,再給虛擬機(jī)。
②QEMU 它并不是直接調(diào)用,而是用 I/O 方式調(diào)用,QEMU 把資源調(diào)用來的過程借用 ioctl,QEMU 借助 libvirt 這個工具調(diào)用 ioctl,再通過接口,給虛擬機(jī)應(yīng)用程序。
KVM:
①用來邏輯分割物理資源,抽象化為虛擬化資源,根據(jù) VMM 里的配置,會邏輯分割出多少 G,給應(yīng)用程序,去進(jìn)行虛擬化。
②只接受來自 QEMU 的請求指令。對于應(yīng)用程序直接過來的敏感指令會攔截,然后通過接口發(fā)給 QEMU,讓 QEMU 判斷是否需要執(zhí)行,可以的話,再下來,不可以的話,打回去,不執(zhí)行該敏感指令。
對于 workstation 而言,硬件輔助虛擬化,表現(xiàn)形式在處理器里面有一個虛擬化引擎,可以勾取硬件輔助虛擬化,看到虛擬接口 / dev/kvm,可以加強(qiáng)輔助調(diào)用,在應(yīng)用程序需要頻繁調(diào)用的時候,需要開啟。比如 openstack。
2.3 虛擬化類型
1. 全虛擬化:將物理硬件資源全部通過軟件的方式抽象化,最后進(jìn)行調(diào)用
2. 半虛擬化:需要修改操作系統(tǒng)
3. 直通: 直接使用物理硬件資源(需要支持,還不完善)
全虛擬化: kvm——> 產(chǎn)品 vmware—ce(社區(qū)版)
半虛擬化:EXSI——>workstation vsphere
2.4 虛擬化功能
① 在一個操作系統(tǒng)內(nèi),模擬多個操作系統(tǒng)
② 以軟件的方式模擬物理設(shè)備的功能
三、容器的概念
3.1 容器是什么?
容器是一種技術(shù),開發(fā)人員打包開發(fā)完成一個應(yīng)用(系統(tǒng))以及所需的開發(fā)環(huán)境,然后通過容器可以運(yùn)行在不同的計算機(jī)上面,也不需要重新配置相關(guān)環(huán)境,不同的是每一臺計算機(jī)都需要配置運(yùn)行容器的容器引擎,目前市場上主流就是 Docker 容器引擎,不過 Docker 容器引擎的配置很簡單,比配置應(yīng)用(系統(tǒng))運(yùn)行的環(huán)境簡單,方便太多。每臺要運(yùn)行應(yīng)用(系統(tǒng))的計算機(jī)上面配置了 Docker 容器引擎之后,都單獨(dú)獨(dú)立可以運(yùn)行之前打包完成的應(yīng)用(系統(tǒng))
3.2 容器的優(yōu)點
· 靈活:即使是最復(fù)雜的應(yīng)用也可以集裝箱化
· 輕量級:容器利用并共享主機(jī)內(nèi)核
· 可互換:可以即時部署更新和升級
· 便攜式:可以在本地構(gòu)建,部署到云,并在任何地方運(yùn)行
· 可擴(kuò)展:可以增加并自動分發(fā)容器副本
· 可堆疊:可以垂直和即時堆疊服務(wù)
3.3 容器的缺點
復(fù)雜性增加:隨著容器及應(yīng)用數(shù)量的增加,同時也伴隨著復(fù)雜性的增加。在生產(chǎn)環(huán)境中管理如此之多的容器是一個極具挑戰(zhàn)性的任務(wù),可以使用 Kubernetes 和 Mesos 等工具管理具有一定規(guī)模數(shù)量的容器。
原生
Linux 支持:大多數(shù)容器技術(shù),比如 Docker,基于
Linux 容器(LXC),相比于在原生 Linux 中運(yùn)行容器,在 Microsoft 環(huán)境中運(yùn)行容器略顯笨拙,并且日常使用也會帶來復(fù)雜性。
不成熟:容器技術(shù)在市場上是相對新的技術(shù),需要時間來適應(yīng)市場。開發(fā)者中的可用資源是有限的,如果某個開發(fā)者陷入某個問題,可能需要花些時間才能解決問題。
四、docker 概述
Docker 的容器技術(shù)可以在一臺下機(jī)上輕松為任何應(yīng)用創(chuàng)建一個輕量級的、可移植的、目給自足的容器。
Docker 的 Logo 設(shè)計為藍(lán)色鯨魚,拖著許多集裝箱。
鯨魚可看作為宿主機(jī),集裝箱可理解為相互隔離的容器,每個集裝箱中都包含自己的應(yīng)用程序。
Docker 的設(shè)計宗旨:Build,Ship and Run Any App,Anywhere,即通過對應(yīng)用組件的封裝、發(fā)布、部署、運(yùn)行等生命周期的管理,達(dá)到應(yīng)用組件級別的 “一次封裝,到處運(yùn)行” 的目的。這里的組件,既可以是一個應(yīng)用,也可以是一套服務(wù),甚至是一個完整的操作系統(tǒng)。
4.1 docker 是什么
· 是一個開源的應(yīng)用容器引擎,基于 go 語言開發(fā)并遵循了 apache2.0 協(xié)議開源
· 是在 Linux 容器里運(yùn)行應(yīng)用的開源工具
· 是一種輕量級的 “虛擬機(jī) "
· Docker 的容器技術(shù)可以在一臺主機(jī)上輕松為任何應(yīng)用創(chuàng)建一個輕量 級的、可移植的、自給自足的容器。
4.2 docker 容器與虛擬機(jī)的區(qū)別
· Docker 容器
是在 Linux 上本機(jī)運(yùn)行,并與其他容器共享主機(jī)的內(nèi)核,它運(yùn)行的是一個獨(dú)立的進(jìn)程,不占用其他任何可執(zhí)行文件的內(nèi)存,非常輕量
· 虛擬機(jī)
運(yùn)行的是一個完成的操作系統(tǒng),通過虛擬機(jī)管理程序?qū)χ鳈C(jī)資源進(jìn)行虛擬訪問,相比之下需要的資源更多
4.3 容器在內(nèi)核中支持兩種重要的技術(shù)
docker 本質(zhì)就是宿主機(jī)的一個進(jìn)程,docker 是通過 namespace 實現(xiàn)資源隔離,通過 cgroup 實現(xiàn)資源限制,通過寫時復(fù)制技術(shù)(copy-on-write)實現(xiàn)了高效的文件操作(類似虛擬機(jī)的磁盤比如分配 500g 并不是實際占用物理磁盤 500g)
4.3.1 namespace(命名空間)的六項隔離
命名空間 |
系統(tǒng)調(diào)用參數(shù) |
隔離內(nèi)容 |
UTS |
CLONE_NEWUTS |
主機(jī)名與域名 |
IPC |
CLONE_NEWWIPC |
信號量、消息隊列和共享內(nèi)存 |
PID |
CLONE_NEWPID |
進(jìn)程編號 |
NETWORK |
CLONE_NEWNET |
網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)棧、端口等 |
MOUNT |
CLONE_NEWNS |
掛載點(文件系統(tǒng)) |
UDER |
CLONE_NEWUSER |
用戶和組(3.8 以后的內(nèi)核才支持) |
4.3.2 控制組(Control groups)
Linux 上的 Do 側(cè)看人引擎還依賴于另一種稱為控制組(Cgroups)的技術(shù),Cgroup 將應(yīng)用和程序限制為一組特定的資源,控制組允許 Docker Engine 將可用的硬件資源共享給容器,并有選擇地實施限制和約束。Cgroups 主要是用作資源控制——可以用來劃分時間片
六種名稱空間是由 cgroups 管理的
最后一種
centos 的 cgroups 管理版本是 3.8 版本,3.6 和 3.5 用不了
cgroups 管理 linux 內(nèi)核態(tài)中資源管理的模塊
cgroups 管理一些系統(tǒng)資源
不是
docker 原生的
4.4、Docker 核心概念
4.4.1 鏡像
Docker 的鏡像是創(chuàng)建容器的基礎(chǔ),類似虛擬機(jī)的快照,可以理解為一個面向 Docker 容器引擎的只讀模板。
通過鏡像啟動一個容器,一個鏡像是一個可執(zhí)行的包,其中包括運(yùn)行應(yīng)用程序所需要的所有內(nèi)容包含代碼,運(yùn)行時間,庫、環(huán)境變量、和配置文件。
4.4.2 容器
Docker 的容器是從鏡像創(chuàng)建的運(yùn)行實例,它可以被啟動、停止和刪除。所創(chuàng)建的每一個容器都是相互隔離、互不可見,以保證平臺的安全性。
可以把容器看做是要給簡易版的 linux 環(huán)境(包括 root 用戶權(quán)限、鏡像空間、用戶空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。
4.4.3 倉庫
Docker 倉庫是用來集中保存鏡像的地方,當(dāng)創(chuàng)建了自己的鏡像之后,可以使用 push 命令將它上傳到公有倉庫(Public)或者私有倉庫(Private)。當(dāng)下次要在另外一臺機(jī)器上使用這個鏡像時,只需從倉庫獲取。
Docker 的鏡像、容器、日志等內(nèi)容全部都默認(rèn)存儲在 /var/lib/docker 目錄下。
五、yum 安裝 docker
目前 Docker 只能支持 64 位系統(tǒng)
Yum 安裝默認(rèn)安裝最新版本,目前最新版本是 2023 版本,但工作中不會用這么新的版本
4.1 yum 安裝 docker 依賴包
1. #關(guān)閉防火墻和
selinux
systemctl stop firewalld.service
setenforce 0
2.# 安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
-------------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是 Linux 內(nèi)核中支持邏輯卷管理的通用設(shè)備映射機(jī)制,它為實現(xiàn)用于存儲資源管理的塊設(shè)備驅(qū)動提供了一個高度模塊化的內(nèi)核架構(gòu)。
device mapper 存儲驅(qū)動程序需要 device-mapper-persistent-data 和 lvm2。
-------------------------------------------------------------------------------------------
4.2 設(shè)置阿里云鏡像源
1. #設(shè)置阿里云鏡像源
yum-config-manager --add-repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2. #安裝 Docker
yum install -y docker-ce docker-ce-cli containerd.io
3. #設(shè)置為開機(jī)自動啟動
systemctl start docker.service
systemctl enable docker.service
4.3 查看 Docker 版本信息
1. #查看 docker 版本信息
docker version
2. #查看 docker 信息
docker info
3. #搜索鏡像
格式:docker search 關(guān)鍵字
docker search nginx
五、配置阿里云鏡像加速器
5.1. 瀏覽器訪問
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
獲取鏡像加速器配置
5.2 配置鏡像加速器、重新加載配置并重啟服務(wù)
vim /etc/docker/daemon.json
添加自己的加速器地址,如下圖
#重新加載配置并重啟服務(wù)
systemctl daemon-reload
systemctl restart docker
5.3 驗證查看
docker info
5.4 鏡像存放
#查看鏡像信息
鏡像下載后存放在 /var/lib/docker 。
Docker 相關(guān)的本地資源存放在 /var/lib/docker/ 目錄下,其中 containers 目錄存放容器信息,image 目錄存放鏡像信息,overlay2 目錄下存放具體的鏡像底層文件。
#查看下載的鏡像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
#查看下載到本地的所有鏡像
docker images
REPOSITORY TAG IMAGE ID
CREATED SIZE
nginx latest ae2feff98a0c 9 days
ago 133MB
六、知識總結(jié)補(bǔ)充
6.1 Docker 容器有哪些狀態(tài)?
· 運(yùn)行
· 已暫停
· 重新啟動
· 已退出
6.2 什么是 Docker?Docker 原理?
docker 是一種封裝和運(yùn)行的開源平臺,他統(tǒng)一了封裝方式,統(tǒng)一了運(yùn)行方式,開源平臺指的是 docker 引擎,統(tǒng)一的封裝方式指的是鏡像,統(tǒng)一的運(yùn)行方式指的是容器。
cgroup 資源控制與 namespaces 兩者構(gòu)成了 docker 底層原理
docker 是一種容器技術(shù),** 把 linux 中的
cgroups(資源管理)和 namespace(名稱空間)等
** 容器底層技術(shù)進(jìn)行完美封裝,并抽象為用戶創(chuàng)建和管理容器的便捷界面(命令行 cli、api 等),這種 C/S 架構(gòu)
6.3 簡述 Docker 主要使用的技術(shù)?
· Cgroups: 資源控制,管理一些系統(tǒng)資源
· Namespace:資源隔離(名稱空間)
· rootfs:文件系統(tǒng)隔離(使用內(nèi)核提供的 rootfs)
· 容器引擎(用戶態(tài)工具) : 生命周期控制
6.4 簡述 Docker 體系架構(gòu)?
Docker 客戶端 - Docker
docker 客戶端則扮演著 docker 服務(wù)端的遠(yuǎn)程控制器,可以用來控制 docker 的服務(wù)端進(jìn)程。
Docker 服務(wù)端 - Docker Daemon 資源限制
docker 服務(wù)端是一個服務(wù)進(jìn)程,管理著所有的容器。
Docker 鏡像一 Imagefont
Docker 的鏡像是創(chuàng)建容器的基礎(chǔ),類似虛擬機(jī)的快照,可以理解為一個面向 Docker 容器引擎的只讀模板。通過鏡像啟動一個容器,一個鏡像是一個可執(zhí)行的包, 其中包括運(yùn)行應(yīng)用程序所需要的所有內(nèi)容包含代碼。運(yùn)行時間,庫,環(huán)境變量,和配置文件
Docker 容器 - Docker Container
Docker 的容器是從鏡像創(chuàng)建的運(yùn)行實例,它可以被啟動、停止和刪除。所創(chuàng)建的每一個容器都是相互隔離、互不可見,以保證平臺的安全性。
Docker 鏡像倉庫 -- Registryfont
Docker 倉庫是用來集中保存鏡像的地方, 當(dāng)創(chuàng)建了自己的鏡像之后,可以使用 push 命令將它上傳到公有倉庫 (Public) 或者私有倉庫(Private、常用)。當(dāng)下次要在另外一臺機(jī)器上使用這個鏡像時,只需從倉庫獲取。
Docker 的鏡像、容器、日志等內(nèi)容全部都默認(rèn)存儲在 **/var/lib/docker** 目錄下。
6.5 Docker 有哪些優(yōu)勢?和虛擬化比有什么優(yōu)勢?
docker 把容器化技術(shù)做成了標(biāo)準(zhǔn)化平臺,只要安裝了 docker 引擎,就能使用 docker。
使用
docker 有什么意義 (實現(xiàn)了 3 個統(tǒng)一)
docker 引擎統(tǒng)一了基礎(chǔ)設(shè)施環(huán)境 - docker 環(huán)境——>image——> 封裝一一個簡易的操作系統(tǒng) (3.0+G)
docker 引擎統(tǒng)一了 程序打包 (裝箱 / 封裝 - 類比于集裝箱) 方式 -
docker 鏡像——>images
docker 引擎統(tǒng)—了程序部署 (運(yùn)行) 方式 - docker 容器——>基于鏡像——>運(yùn)行為容器(可運(yùn)行的環(huán)境)
實現(xiàn)了一次構(gòu)建,多次、多處使用
6.6 Docker 在后臺的標(biāo)準(zhǔn)運(yùn)行過程?
檢查本地是否存在指定的鏡像。當(dāng)鏡像不存在時,會從公有倉庫下載;
利用鏡像創(chuàng)建并啟動一個容器;
分配一個文件系統(tǒng)給容器,在只讀的鏡像層外面掛載一層可讀寫層;
從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個虛擬機(jī)接口到容器中;
分配一個地址池中的 IP 地址給容器;
執(zhí)行用戶指定的應(yīng)用程序,執(zhí)行完畢后容器被終止運(yùn)行。
6.7 集群里面有一個 Docker,其使用率達(dá)到 80% 怎么辦?
把這個 docker 干掉,它的資源可能會釋放,然后重新再建一個,因為集對于集群來說它會有高可用的設(shè)置,所以干掉一個影響并不大