<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          cockerC 語言實(shí)現(xiàn)的容器引擎

          聯(lián)合創(chuàng)作 · 2023-09-27 15:39

          1. 概述

          1.1. cocker是什么

          cocker是我個(gè)人用C語言完全自研的容器引擎(對標(biāo)Docker),主要解決如下工作場景中的痛點(diǎn):

          • 原生支持多進(jìn)程架構(gòu)的容器使用模式,無須引入第三方組件。

          • 按虛擬主機(jī)方式管理容器,交互式構(gòu)建鏡像,寫過復(fù)雜Dockerfile的人都深惡痛絕。

          • 鏡像多版本共存管理。

          • (更多...)

          cocker使用到了以下Linux底層技術(shù):LXCcgroupoverlayfsiptablesptms等。

          1.2. 系統(tǒng)架構(gòu)

          images/cocker_architecture.png

          在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)遷移圖

          images/cocker_state_transition_diagram.png

          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)

          images/cocker_overlayfs.png

          層疊文件系統(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、容器主目錄containersssh鏡像倉庫srepo,以及日志文件cocker.log

          1.2.3. 網(wǎng)絡(luò)

          images/cocker_network.png

          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)資源限制

          images/cocker_cgroup.png

          cocker目前只實(shí)現(xiàn)了CPU核分配、時(shí)間片占用百分比分配、內(nèi)存分配,其它系統(tǒng)資源在后續(xù)版本中會逐漸完善。

          1.2.5. 偽終端

          images/cocker_pty.png

          自帶容器根進(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,如果你使用中碰到了問題請告訴我,謝謝 ^_^

          源碼托管地址 : 開源中國github

          2.2. 關(guān)于作者

          厲華,主手C,寫過小到性能卓越方便快捷的日志庫、HTTP解析器、日志采集器等,大到交易平臺/中間件等,分布式系統(tǒng)實(shí)踐者,容器技術(shù)愛好者,目前在某城商行負(fù)責(zé)基礎(chǔ)架構(gòu)。

          通過郵箱聯(lián)系我 : 網(wǎng)易Gmail

          瀏覽 45
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  激情婷婷五月丁香 | 国产一卡二卡三卡免费观看 | 爽妇网888 | 天天日日天天干 | 九九九九九九精品视频 |