楊浚
摘 要:簡要介紹了docker容器的核心技術(shù)namespace和cgroup,以及實(shí)現(xiàn)容器隔離的方法。
關(guān)鍵詞:Docker;namespace;cgroup;虛擬化;linux
Docker當(dāng)前的定義是一個開源的容器引擎,可以方便地對容器進(jìn)行管理,封裝整個軟件的運(yùn)行環(huán)境,為開發(fā)者和系統(tǒng)管理者提供用于開發(fā)、設(shè)計(jì)、構(gòu)建、測試、發(fā)布、運(yùn)行的應(yīng)用平臺。得益于其輕量級的虛擬化,以及分層鏡像應(yīng)用,Docker在磁盤、性能和效率上比傳統(tǒng)虛擬化有明顯的優(yōu)勢。
Docker容器的核心技術(shù)就是namespace和cgourp,Docker本身就是軟件,其本質(zhì)就是主機(jī)上的進(jìn)程,它通過linux內(nèi)核提供的namespace功能實(shí)現(xiàn)了資源的隔離,通過cgroup實(shí)現(xiàn)了資源的限制。Namespace隔離有6種,分別是UTS(主機(jī)名)、IPC(內(nèi)部進(jìn)程通信)、PID(進(jìn)程號)、Network(網(wǎng)咯設(shè)備、端口等)、Mount(掛載點(diǎn))、User(用戶)。通過namespace,可是使得不同容器里的進(jìn)程置于一個獨(dú)立的系統(tǒng)運(yùn)行環(huán)境里,不能互相感知到,達(dá)到了隔離的目的。最常用的namespace的API就是clone(),通過clone()方法,可以在創(chuàng)建新進(jìn)程的同時創(chuàng)建namespace,代碼如下:
#define _GUN_SOURCE
#include
#include