最近面試了一家國企,交談愉快,對方的工程師問到容器時,突然愣了一下。腦子里有學(xué)習(xí)前端時候?qū)W習(xí)的docker,但印象里docker可不能代表容器技術(shù),于是學(xué)習(xí)容器相關(guān)知識后整理相關(guān)知識以作鞏固。
創(chuàng)新互聯(lián)自2013年起,先為正定等服務(wù)建站,正定等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為正定企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。什么是容器有點開發(fā)基礎(chǔ)的同學(xué)都知道,我們開發(fā)出來的無論是web亦或是其他應(yīng)用。必須跑在某種特定的環(huán)境中才可以運行,例如nodeJS環(huán)境啦,各種依賴?yán)病H萜骺梢宰岄_發(fā)者將應(yīng)用與庫和其他依賴項打包,提供獨立環(huán)境來運行其軟件服務(wù)。
誒嘿,這時候有同學(xué)就要問,為什么不直接虛擬機呢,反正都是部署應(yīng)用嘛。
容器比虛擬機更加輕量化
容器在操作系統(tǒng)級別進行虛擬化,而虛擬機在硬件級別進行虛擬化
容器共享操作系統(tǒng)內(nèi)核,其占用的內(nèi)存與虛擬機相比微乎其微
傳統(tǒng)虛擬機技術(shù)是虛擬出一套硬件后,在其上運行一個完整操作系統(tǒng),在該系統(tǒng)上再運行所需應(yīng)用進程;而容器內(nèi)的應(yīng)用進程直接運行于宿主的內(nèi)核,容器內(nèi)沒有自己的內(nèi)核,而且也沒有進行硬件虛擬。因此容器要比傳統(tǒng)虛擬機更為輕便。
跑偏了跑偏了,但做為學(xué)習(xí)者,我認為Google給出的定義解釋比較中肯:容器是輕量級應(yīng)用代碼包,它還包含依賴項,例如編程語言運行時的特定版本和運行軟件服務(wù)所需的庫。
容器技術(shù)就像集裝箱運載一樣,我把貨物一輛蘭博基尼跑車(好比開發(fā)好的應(yīng)用APP),打包放到一容器集裝箱里,它通過貨輪可以輕而易舉的從上海碼頭(CentOS7.2環(huán)境)運送到紐約碼頭(Ubuntu14.04環(huán)境)。而且運輸期間,我的蘭博基尼(APP)沒有受到任何的損壞(文件沒有丟失),在另外一個碼頭卸貨后,依然可以完美風(fēng)騷的賽跑(啟動正常)。
以上紅字引用
作者:王中陽Go
來源:稀土掘金
如果只看容器技術(shù),過于抽象。結(jié)合docker了解容器技術(shù)。Docker 使用 Google 公司推出的 Go 語言 進行開發(fā)實現(xiàn),基于 Linux 內(nèi)核的 cgroup,namespace,以及 OverlayFS 類的 Union FS 等技術(shù),對進程進行封裝隔離,屬于 操作系統(tǒng)層面的虛擬化技術(shù)。由于隔離的進程獨立于宿主和其它的隔離的進程,因此也稱其為容器。最初實現(xiàn)是基于 LXC,從 0.7 版本以后開始去除 LXC,轉(zhuǎn)而使用自行開發(fā)的 libcontainer,從 1.11 版本開始,則進一步演進為使用 runC 和 containerd。
1、鏡像(Image)
2、容器(Container)
3、倉庫(Repository)
作系統(tǒng)分為 內(nèi)核 和 用戶空間。對于 Linux 而言,內(nèi)核啟動后,會掛載 root 文件系統(tǒng)為其提供用戶空間支持。而 Docker 鏡像(Image),就相當(dāng)于是一個 root 文件系統(tǒng)。比如官方鏡像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系統(tǒng)的 root 文件系統(tǒng)。
Docker 鏡像 是一個特殊的文件系統(tǒng),除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。鏡像不包含任何動態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會被改變。
因為鏡像包含操作系統(tǒng)完整的 root 文件系統(tǒng),其體積往往是龐大的,因此在 Docker 設(shè)計時,就充分利用 Union FS 的技術(shù),將其設(shè)計為分層存儲的架構(gòu)。所以嚴(yán)格來說,鏡像并非是像一個 ISO 那樣的打包文件,鏡像只是一個虛擬的概念,其實際體現(xiàn)并非由一個文件組成,而是由一組文件系統(tǒng)組成,或者說,由多層文件系統(tǒng)聯(lián)合組成。
鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計中的 類 和 實例 一樣,鏡像是靜態(tài)的定義,容器是鏡像運行時的實體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等。
容器的實質(zhì)是進程,但與直接在宿主執(zhí)行的進程不同,容器進程運行于屬于自己的獨立的 命名空間。因此容器可以擁有自己的 root 文件系統(tǒng)、自己的網(wǎng)絡(luò)配置、自己的進程空間,甚至自己的用戶 ID 空間。容器內(nèi)的進程是運行在一個隔離的環(huán)境里,使用起來,就好像是在一個獨立于宿主的系統(tǒng)下操作一樣。這種特性使得容器封裝的應(yīng)用比直接在宿主運行更加安全。
容器存儲層的生存周期和容器一樣,容器消亡時,容器存儲層也隨之消亡。因此,任何保存于容器存儲層的信息都會隨容器刪除而丟失。
按照 Docker 最佳實踐的要求,容器不應(yīng)該向其存儲層內(nèi)寫入任何數(shù)據(jù),容器存儲層要保持無狀態(tài)化。所有的文件寫入操作,都應(yīng)該使用 數(shù)據(jù)卷(Volume)、或者 綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網(wǎng)絡(luò)存儲)發(fā)生讀寫,其性能和穩(wěn)定性更高。
鏡像構(gòu)建完成后,可以很容易的在當(dāng)前宿主機上運行,但是,如果需要在其它服務(wù)器上使用這個鏡像,我們就需要一個集中的存儲、分發(fā)鏡像的服務(wù),Docker Registry 就是這樣的服務(wù)。
云容器了解了前文,那么云容器其實就是“云上”的容器。云容器是位于云中的可移植數(shù)字“隔間”,其中容納單個運行時環(huán)境中的一系列應(yīng)用文件。它們與其他技術(shù)容器大同小異,==唯一的區(qū)別在于所處的位置。==不再贅述
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧