容器原理簡介

2022-03-16 20:46:46 字數 1778 閱讀 1352

容器是一種沙盒技術。

之前我們部署程式時對環境可能要做一系列的配置,這樣才能保證程式的正常執行;有了容器之後,它像乙個沙箱一樣,將我們的程式包起來,避免外部環境對影響容器內程式的正常執行,程式所需要的環境在沙箱內已經配置好,容器映象中包含了應用程式所需的整個作業系統的檔案和目錄,應用程式的執行環境在作業系統級別達到了一致性。無論將沙箱放到哪個環境,內部程式都可以正常執行。

容器類似於沙箱一樣,將應用程式包裹在沙箱內。其中的技術手段主要是namespace和cgroup

在容器內,我們只能看到這個容器所擁有的的資源,宿主機上的其他資源我們在容器內是看不到的。不準確的來說,容器就像乙個迷你版的伺服器。但是在宿主機上來看,容器只是乙個普通的程序。

通過namespace技術修改了程式看待這個計算機的檢視,達到上述目。namespace資訊是建立程序的一組引數,通過namespace可以對程序的 pid,network,user,mount,uts,ipc等資源檢視進行限制。

但是實際上塔還是執行在宿主機上的乙個普通程序,除了namespace這組引數外,有些資源是不能被namespace化的。比如時間,容器內程式通過系統呼叫修改了時間之後,整個計算機的時間就被修改了。

容器技術只是對程序進行了簡單的隔離,所以在容器內進行操作時就要注意哪些能做,哪些不能做。

還有如果程式依賴系統核心的某些功能,如果宿主機不滿足程式要求,則程式的這部分功能就會受到影響。

利用cgroup技術可以限制容器使用的資源,比如cpu,記憶體,視訊記憶體,磁碟空間,網路頻寬等資源。

它暴露出的介面是檔案系統,可以在/sys/fs/cgroup下看到這些檔案,通過檔案內的資訊對程序的資源進行限制。

mount讓容器程序可以只看到容器內的檔案。

程序在建立時,缺省會繼承宿主機的各個掛載點。程序對檔案系統的檢視和宿主機是一樣的。

容器程序在建立前,容器映象(根檔案系統)掛載到程序的根目錄(/)下,這樣容器程序看到的就是映象內的檔案系統了。linux中可以通過chroot命令實現這個功能,mount namespace 也是基於chroot被創造的,

mount namespace 可以修改程序對掛載點的認知,在掛載操作後,程序的對該掛載點的檢視就被修改了。在進行掛載操作前,程序看到的還是宿主機上該掛載點的檢視。

掛載掛載操作利用的是linux的bind mount(繫結掛載) 機制。掛載後,在掛載點上的操作只發生在被掛載的檔案,原掛載點的檔案被隱藏起來,不受影響。

繫結掛載的實際上是乙個inode的替換過程,將宿主機的/data目錄掛載到/test的目錄,實際上是將/test的inode的指標指向了/home的inode的指標;

volume 機制讓容器可以看到宿主機的檔案,並進行更新。

實現原理就是在容器進行chroot(掛載根檔案系統)操作之前,此時程序可以看到宿主機的檔案系統,此時將volume指定的宿主機目錄掛載到指定的容器目錄,volume的掛載操作就完成了。

容器本質上就是乙個程序。

容器的「單程序模型」,並不是指容器裡只能執行「乙個」程序,而是指容器沒有管理多個程序的能力。這是因為容器裡 pid=1 的程序就是應用本身,其他的程序都是這個 pid=1 程序的子程序。

所以我們在 docker run 容器時,一般將啟動命令或指令碼常駐在記憶體,否則啟動命令或指令碼執行完成後,這個容器也將退出。

容器在設計時,本身也希望和應用程式同生命週期,這樣應用程式結束時容器也隨之結束,可以從容器的生命週期判斷應用程式的生命週期。反之,如果程式已經結束,容器還處於執行狀態,這對於容器的排程增加了複雜度。

STL容器簡介

stl的容器可以分為以下幾個大類 一 序列容器,有vector,list,deque,string.二 關聯容器,有set,multiset,map,mulmap,hash set,hash map,hash multiset,hash multimap 三 其他的雜項 stack,queue,va...

IOC容器簡介

了解到spring框架的兩大核心模組 ioc容器和aop 原始碼分析首先從ioc容器開始,之後再來看aop 這一篇我們先來了解一下什麼是ioc容器,以及ioc容器的功能 1 正常開發模式 非依賴反轉 正常的,合作物件的引用或依賴關係的管理由具體物件來完成 持有被引用的物件 這導致了 高度耦合並且降低...

STL容器簡介

1 stl簡介 2 stl中的容器及底層實現 3 stl容器的公用函式 stl提供六大元件,彼此可以組合套用 1 容器 容器用來存放資料,從實現的角度看,stl容器是一種類模板,包括vector list deque set map等。2 演算法 stl演算法是一種函式模板,各種常用的演算法如sor...