docker在當下很火,那麼,當我們談docker,談容器的時候,我們在談什麼? 或者說,你對docker,對容器了解嗎?容器,到底是怎麼一回事兒? 這篇文章著重來講一下linux容器,為什麼強調linux容器,而不是docker,是因為docker是基於虛擬化技術來實現的,但是這篇文章涉及到linux容器的核心實現方面,兩者不同,所以著重強調一下.
容器其實是一種沙盒技術.顧名思義,沙盒就是能夠像乙個貨櫃一樣,把你的應用裝起來.這樣,應用與應用之間就有了邊界而不會相互干擾;同時裝在沙盒裡面的應用,也可以很方便的被搬來搬去,這也是paas想要的最理想的狀態. 但是說起來容易,等到真正實現起來的時候,就會有難度. 因為容器是執行在宿主機上面的,當它執行起來的時候,需要載入到記憶體中,需要cpu完成加法操作等等.也就是說,如果想要實現真正意義上的容器,就要解決這樣的問題,但現實中這樣的問題還沒辦法解決.
那麼我們所說的容器,又是說什麼呢?容器的核心功能又是什麼呢? 其實容器的核心功能,就是通過約束和修改程序的動態表現,從而創造出乙個"邊界".對於docker等大多數linux容器來說,cgroup技術是用來製造約束的主要手段,而namespace技術則是用來修改程序檢視的主要方法.
我們都知道,程序在靜態狀態下就是程式,只是磁碟上的二進位制檔案.而當它執行起來時,才成為程序.所以,當我們開始執行程式時,作業系統都會為程序分配乙個程序編號,這個編號就是程序的唯一標識.假設我們開始執行了乙個程式,它的pid=100.也就是說這個程式是第100個程序,在它前面還有99個程序.而現在,如果我們通過docker把這個程式執行在乙個容器當中,那麼docker就會在第100個程序建立時,給它施乙個"障眼法",讓它永遠看不到其他99個程序,這樣這個程式就會誤以為自己是第1個程序 這種機制,其實就是對被隔離應用的程序空間做了手腳,使得這些程序只能看到重新計算過的程序編號,比如上面的第100個程序,經過docker的"障眼法"之後,誤以為自己是第1個程序,但是實際上在宿主機的作業系統中,它還是原來的第100個程序. 而這種技術,就是linux裡的namespace機制. 這種機制,使得容器隔離成為了可能.
接下來我們來談談容器限制.
linux cgroups的全稱是linux control group.它最主要的作用,就是限制乙個程序組能夠使用的資源上限,包括cpu,記憶體,磁碟,網路頻寬等.cgroups的每一項子系統都有其獨有的資源限制能力,比如:
memory:為程序設定記憶體使用的限制;
linux cgroups的設計還是比較易用的,它就是乙個子系統目錄加上一組資源限制檔案的組合.對於docker等linux容器專案來說,它們只需要在每個子系統下面,為每個容器建立乙個控制組(即建立乙個新目錄),然後在啟動容器程序之後,把這個程序的pid填寫到對應控制組的tasks檔案中就可以了. 至於在這些控制組下面的資源檔案裡填什麼值,就由使用者執行docker run時的引數指定.
經過以上分析,我們可以了解到,容器這個聽起來玄而又玄的概念,實際上是一種特殊的程序而已. 所以,容器本身並沒有價值,有價值的是"容器編排". 當我們在談容器的時候,其實我們在談如何更好的去編排容器.這也是為什麼當下k8s這麼火的原因.
原文發表於 : blog.csdn.net/zll_0405/ar…
當我們談深度學習時,我們用它落地了什麼?
現今伴隨人工智慧在技術上的不斷突破,一些領域如計算機視覺,已開始與各個行業進行了深度融合。例如保險行業已通過人臉識別這種新時代的認證方式,來對使用者身份資訊進行識別與審核。深度學習對人工智慧的發展起著至關重要的影響。雲盾內容安全敏感人臉搜尋商業化發布 主要針對教育,學校,以及部分工廠企業,公安對於違...
容器服務中的節點失效時Docker容器重新排程介紹
生產環境部署的服務都會考慮單點失效情況下的高可用性。在容器服務中,當節點失效的時候,能否重新排程容器到健康節點上繼續提供服務對於生產環境中的服務高可用性尤為重要。下面我們就演示一下容器服務的重新排程功能。首先建立乙個含有3個節點的集群。我們使用如下編排模板建立乙個含有三個例項的nginx servi...
容器內元素float時,容器自動高度的解決方案
先看html 如下 1 div id wrap 2 div id header 3 h1 three colums layout.h1 4div 56 div id content 7 div id main 8 p hello,css html.p 9 p i love this game.p 1...