cockerC 語言實(shí)現(xiàn)的容器引擎
1. 概述
1.1. cocker是什么
cocker是我個(gè)人用C語言完全自研的容器引擎(對標(biāo)Docker),主要解決如下工作場景中的痛點(diǎn):
原生支持多進(jìn)程架構(gòu)的容器使用模式,無須引入第三方組件。
按虛擬主機(jī)方式管理容器,交互式構(gòu)建鏡像,寫過復(fù)雜Dockerfile的人都深惡痛絕。
鏡像多版本共存管理。
(更多...)
cocker使用到了以下Linux底層技術(shù):LXC、cgroup、overlayfs、iptables、ptms等。
1.2. 系統(tǒng)架構(gòu)
在LXC中,容器只是內(nèi)核命名空間隔離的根進(jìn)程以及子進(jìn)程樹,隔離域有主機(jī)名字、進(jìn)程空間、根文件系統(tǒng)、IPC、網(wǎng)絡(luò)等。cocker完整的實(shí)現(xiàn)了以上所有隔離域,在容器管理設(shè)計(jì)上傾向于虛擬主機(jī)方式,也支持類似Docker的單進(jìn)程方式。
cocker自帶了容器根進(jìn)程,負(fù)責(zé)通過偽終端方式橋接容器內(nèi)外,而不是必須通過ssh。
cgroup負(fù)責(zé)隔離域的系統(tǒng)資源管控,包括CPU、內(nèi)存等。
1.2.1. 狀態(tài)遷移圖
cocker鏡像可以本地構(gòu)建或從鏡像庫上傳下載,鏡像庫目前只支持ssh服務(wù)端,后續(xù)版本中會加入cocker原生服務(wù)器。
cocker鏡像允許不同版本共存,創(chuàng)建容器時(shí)可以指定鏡像版本,或者默認(rèn)最新版。鏡像可以復(fù)制和刪除,也可以修改版本號。
cocker容器創(chuàng)建出來后可以啟動、關(guān)閉和銷毀。修改容器屬性如虛擬IP、端口映射和卷映射必須在容器關(guān)閉狀態(tài)下進(jìn)行。
cocker鏡像可以轉(zhuǎn)化為cocker容器便于交互式修改,然后再轉(zhuǎn)化回來。
1.2.2. 層疊文件系統(tǒng)
層疊文件系統(tǒng)是多鏡像容器的存儲基礎(chǔ),cocker采用overlayfs作為其層疊文件系統(tǒng)引擎,可以疊加幾乎無限的鏡像層。
cocker的鏡像和容器等都存放在環(huán)境變量COCKER_HOME指向的主目錄中,所以規(guī)劃其容量是使用前必須要考慮的問題。如果沒有設(shè)置環(huán)境變量COCKER_HOME,則默認(rèn)指向/var/cocker。
COCKER_HOME主目錄中有鏡像主目錄images、容器主目錄containers、ssh鏡像倉庫srepo,以及日志文件cocker.log。
1.2.3. 網(wǎng)絡(luò)
cocker支持三種網(wǎng)絡(luò)模型:HOST、CUSTOM和BRIDGE。
| 網(wǎng)絡(luò)模型 | 說明 |
|---|---|
| HOST | 無預(yù)置網(wǎng)絡(luò)環(huán)境 |
| CUSTOM | 僅僅預(yù)置網(wǎng)絡(luò)命名空間,不創(chuàng)建容器內(nèi)外網(wǎng)卡等,由完全由用戶自設(shè)置 |
| BRIDGE | 預(yù)置以NAT方式的容器向宿主機(jī)的網(wǎng)絡(luò)連通方式、自定義多組指定端口映射轉(zhuǎn)發(fā)的宿主機(jī)向容器的網(wǎng)絡(luò)連通方式 |
首次執(zhí)行cocker會創(chuàng)建網(wǎng)橋設(shè)備cocker0,網(wǎng)段為166.88.0.x。
1.2.4. 系統(tǒng)資源限制
cocker目前只實(shí)現(xiàn)了CPU核分配、時(shí)間片占用百分比分配、內(nèi)存分配,其它系統(tǒng)資源在后續(xù)版本中會逐漸完善。
1.2.5. 偽終端
自帶容器根進(jìn)程接受客戶端cocker連接后會創(chuàng)建偽終端會話,就像登錄到虛擬主機(jī)上命令交互一樣,無需使用ssh。
1.3. 快速使用
使用主控工具cocker快速創(chuàng)建一個(gè)小型測試鏡像,里面調(diào)用了自帶腳本cocker_install_test.sh構(gòu)建根文件系統(tǒng)。
然后使用指令-a boot基于剛剛創(chuàng)建的鏡像test啟動一個(gè)容器test,并且直接打開一個(gè)會話連接到容器中的偽終端...退出偽終端后,使用指令-a shutdown關(guān)閉容器,最后使用指令-a destroy銷毀容器。
# cocker -a install_test OK # cocker -s images image_id version modify_datetime size -------------------------------------------------------------------- test _ 2018-11-10T09:21:12 24 MB # cocker -a create -m test -c test OK # cocker -a boot -c test -t connect to container ok --- Welcome to cocker contrainer --- [root@test /root] exit logout # cocker -a shutdown -c test OK # cocker -a destroy -c test OK
...
2. 最后
2.1. 關(guān)于cocker
歡迎使用cocker,如果你使用中碰到了問題請告訴我,謝謝 ^_^
2.2. 關(guān)于作者
厲華,主手C,寫過小到性能卓越方便快捷的日志庫、HTTP解析器、日志采集器等,大到交易平臺/中間件等,分布式系統(tǒng)實(shí)踐者,容器技術(shù)愛好者,目前在某城商行負(fù)責(zé)基礎(chǔ)架構(gòu)。
