大家好,感謝邀請(qǐng),今天來為大家分享一下containerd的問題,以及和containerd為啥比docker好用的一些困惑,大家要是還不太明白的話,也沒有關(guān)系,因?yàn)榻酉聛韺榇蠹曳窒恚M梢詭椭酱蠹遥鉀Q大家的問題,下面就開始吧!
containerd與docker區(qū)別
containerd和Docker是容器技術(shù)的相關(guān)組件,它們之間存在以下區(qū)別:
1.功能范圍:Docker是一個(gè)完整的容器平臺(tái),提供了構(gòu)建、分發(fā)和運(yùn)行容器的一系列工具和功能,包括容器鏡像管理、容器網(wǎng)絡(luò)、容器編排等。而containerd是一個(gè)更為底層的容器運(yùn)行時(shí),專注于容器的生命周期管理、鏡像操作和容器執(zhí)行。
2.架構(gòu)設(shè)計(jì):Docker基于client-server架構(gòu),其中包含Docker守護(hù)進(jìn)程(Dockerdaemon)和Docker客戶端(CLI)。而containerd則被設(shè)計(jì)為一個(gè)CRI(ContainerRuntimeInterface)實(shí)現(xiàn),為容器運(yùn)行時(shí)提供API接口和功能庫。
3.生態(tài)系統(tǒng)支持:Docker作為容器生態(tài)系統(tǒng)的領(lǐng)導(dǎo)者,擁有豐富的工具、服務(wù)和社區(qū)支持,具有廣泛的使用和良好的兼容性。而containerd在CRI規(guī)范的支持下成為多個(gè)容器平臺(tái)(如Kubernetes)底層容器運(yùn)行時(shí)的標(biāo)準(zhǔn)選擇。
4.可擴(kuò)展性與定制性:由于Docker提供了更完整的解決方案,用戶可以通過Docker的插件機(jī)制進(jìn)行各種自定義和擴(kuò)展。而containerd更加輕量化,專注于核心功能,更適合作為基礎(chǔ)架構(gòu)的一部分進(jìn)行擴(kuò)展。
總體而言,Docker是更高級(jí)和完整的容器平臺(tái),適合于快速開發(fā)和部署容器應(yīng)用。而containerd則是一個(gè)輕量、可嵌入的容器運(yùn)行時(shí),更適合作為基礎(chǔ)設(shè)施的一部分,為其他容器平臺(tái)提供容器管理的能力。
Go語言是什么
IT行業(yè)與其他行業(yè)的不同之處就在于技術(shù)更迭很快。下面我們就從Go語言和Docker技術(shù)入手,分別討論一下時(shí)下最熱的話題。
Go語言
今年是Go語言發(fā)布的第八個(gè)年頭,對(duì)于Go語言來說也是一個(gè)非常值得慶祝的生日,這八年間Go語言不斷更新功能來鞏固其作為云基礎(chǔ)架構(gòu)語言的地位,也從一個(gè)默默無聞的小卒成長(zhǎng)為話題度頗高的流行語言。
Go語言八周年之際,SteveFrancia如此寫道:
自Go首次公開源代碼以來,我們總計(jì)已經(jīng)進(jìn)行了10次語言,庫和工具的發(fā)布更新,超過1680名貢獻(xiàn)者向該項(xiàng)目的34個(gè)存儲(chǔ)庫提交了超過5萬次的commit;貢獻(xiàn)者數(shù)量增加了一倍多,僅兩年前就增加了一倍。今年我們宣布了關(guān)于Go2的計(jì)劃,這將是我們對(duì)Go語言和工具的第一次重大修訂。
Go1.0版本發(fā)布于2012年,雖然后續(xù)版本中增加了很多新功能,但這絲毫不妨礙它是一個(gè)非常穩(wěn)定的語言。Go語言七周年的時(shí)候,SueGee發(fā)表了《GoTurnsSevenWithLotsOfAttention》,如今它已更新了兩個(gè)版本,1.8版本的編譯器后端有了很大的改進(jìn),可以減少垃圾收集暫停,從而提高編譯后端的速度;1.9版本增加了對(duì)并行編譯的支持,并引入了類型別名來支持代碼修復(fù)。
Go語言是否真的流行起來了呢?對(duì)此,F(xiàn)rancia表示:
Go已被世界各地的開發(fā)人員所接受,目前約有100萬用戶。在剛剛發(fā)布的報(bào)告中,Go語言在最受歡迎的編程語言中位列第九,成功超越了C語言。同時(shí),Go語言也成功躋身GitHub2017增長(zhǎng)最快的編程語言,與上一年相比增長(zhǎng)52%,而JavaScript則以44%的增長(zhǎng)率從去年的第一位下降到第二位。
在StackOverflow的2017年開發(fā)者調(diào)查中,Go是唯一一個(gè)既是程序員最喜歡的編程語言Top5也是最需要的編程語言Top5。使用過Go語言的人都會(huì)深深愛上它,沒有使用Go語言的人都想擁有它。
繼2009年之后,2016年Go語言再度成為了TIOBE年度語言。
上圖顯示了從2010年到2017年11月,Go語言在TIOBE上的變化曲線。2016年中期,GO語言實(shí)現(xiàn)了直線快速增長(zhǎng),并很快達(dá)到最高峰,不過最近幾個(gè)月中回落了不少,目前在TIOBE上排名14。
如今,Go語言還在不斷擴(kuò)大,云會(huì)是很重要的方向。其博文稱:
Go已經(jīng)成為云基礎(chǔ)架構(gòu)的語言。今天,每個(gè)云公司都擁有在Go中實(shí)施云基礎(chǔ)架構(gòu)的關(guān)鍵組件,包括GoogleCloud,AWS,MicrosoftAzure,DigitalOcean,Heroku等等。Go是阿里巴巴,Cloudflare和Dropbox等云計(jì)算公司的重要組成部分。Go是開放式基礎(chǔ)設(shè)施的重要組成部分,包括Kubernetes,CloudFoundry,Openshift,NATS,Docker,Istio,Etcd,Consul,Juju等等。越來越多的公司選擇Go來構(gòu)建云基礎(chǔ)架構(gòu)解決方案
過去的成績(jī)固然值得驕傲,但是對(duì)于Go語言和程序員來說,更重要的是在2.0版本會(huì)有哪些新功能引入?讓我們一起期待吧!
Docker技術(shù):
最近,我們可能經(jīng)常會(huì)聽到一種說法"Docker正在徹底改變IT!"這種說法是否存在炒作嫌疑呢?Docker對(duì)于現(xiàn)有格局的破壞性到底在哪里?Docker和虛擬機(jī)之間有什么區(qū)別?Docker真正的附加價(jià)值在哪里?
我們與Docker大牛NicolasDeLoof探討了這些問題。
問:您是如何與Docker結(jié)緣的呢?
NicolasDeLoof:我工作的公司CloudBees是dotCloud的競(jìng)爭(zhēng)對(duì)手。我與Docker的第一次接觸大多是負(fù)面的,因?yàn)樗?dāng)時(shí)的運(yùn)行是非常不靈活的。后來,我漸漸發(fā)現(xiàn)了不可變基礎(chǔ)架構(gòu)的好處,以及Docker如何讓這一切變得更易于實(shí)現(xiàn)。
與此同時(shí),我們關(guān)閉了PaaS優(yōu)惠,我開始做更多的嘗試,Docker自然的走入了我的生活。
問:我們經(jīng)常聽到"Docker正在徹底改變IT",你認(rèn)同這種觀點(diǎn)嗎?Docker技術(shù)有什么破壞性?
NicolasDeLoof:容器并不是什么新鮮事物,谷歌已經(jīng)使用了十年了,之前許多運(yùn)營(yíng)團(tuán)隊(duì)都采用了LXC。那么是什么讓人們開始覺得“Docker有破壞性”呢?是因?yàn)樗x了一個(gè)更高的層次,以用戶為中心的“distributingandrunningstuff”抽象。
Docker的主要價(jià)值在于分發(fā)鏡像格式和管道。runtime也非常棒,因?yàn)樗峁┝撕侠淼哪J(rèn)設(shè)置,很多東西可以直接使用,當(dāng)然有經(jīng)驗(yàn)的用戶也可以調(diào)整runtime,實(shí)現(xiàn)細(xì)粒度的控制。
問:Docker與普通虛擬機(jī)有什么不同?
NicolasDeLoof:Docker與虛擬機(jī)的技術(shù)角度不同,當(dāng)然這并不表示它們是完全對(duì)立的,事實(shí)上我們可以使用虛擬機(jī)來實(shí)現(xiàn)Docker。但對(duì)于大多數(shù)用戶來說虛擬機(jī)的創(chuàng)建和管理是一成不變的,事實(shí)上它也需要我們升級(jí)維護(hù)。
虛擬機(jī)是一個(gè)完整系統(tǒng),所以出現(xiàn)問題時(shí)很難找到根源所在。Docker與虛擬機(jī)并不是互斥的,他們是不同用途的互補(bǔ)技術(shù),虛擬機(jī)允許用戶通過API管理主機(jī),并提供基礎(chǔ)設(shè)施的彈性。與此同時(shí),Docker允許將軟件定義為小型樂高塊來組裝,因此它們采用了不變的基礎(chǔ)架構(gòu),微服務(wù),分布式軟件等現(xiàn)代架構(gòu)。
問:您如何在日常工作中使用Docker?
NicolasDeLoof:就我個(gè)人來說,比較依賴Docker進(jìn)行各種測(cè)試,所以我要確保有一個(gè)可以與他人共享的可再生環(huán)境,防止對(duì)我工作站的影響。
除此之外,公司還提供了基于Docker的彈性CI/CD解決方案“CloudBeesJenkinsEnterprise”,作為Docker專家,我會(huì)嘗試讓它采用最好的Docker特性。
問:使用Docker時(shí)您遇到過什么問題?您認(rèn)為目前存在的挑戰(zhàn)是什么?
NicolasDeLoof:數(shù)據(jù)持久性是Docker用戶最容易誤解的元素。有人說,在Docker中不能運(yùn)行數(shù)據(jù)庫,也許他們只是錯(cuò)過了文檔中的“volumes”一章?
當(dāng)一個(gè)人試圖從多個(gè)容器訪問它們時(shí),就會(huì)遇到權(quán)限問題,這時(shí)如果我們?cè)噲D以“綁定掛載”的方式來管理時(shí),情況會(huì)變得更糟,而不會(huì)讓dockerdaemon執(zhí)行voodoosetup。
這并不是一個(gè)微不足道的問題,我希望Linux內(nèi)核/文件系統(tǒng)驅(qū)動(dòng)程序的上游功能做一些更改,以便更易于使用。
問:關(guān)于Docker生態(tài)系統(tǒng)的演變,您如何評(píng)價(jià)Docker決定向CNCF捐贈(zèng)containerdruntime?
NicolasDeLoof:正如我所說,Docker的技術(shù)價(jià)值不在containerruntime,這并不是一個(gè)巨大的復(fù)制工程。但對(duì)于生態(tài)系統(tǒng)健康,它們需要確保信任和互操作性,因此必須有一個(gè)開放標(biāo)準(zhǔn)和參考實(shí)現(xiàn)。
作為一個(gè)Java開發(fā)人員,我需要對(duì)這個(gè)方法有一個(gè)標(biāo)準(zhǔn)的API文檔和參考實(shí)現(xiàn),這并不能防止替代的實(shí)現(xiàn)或創(chuàng)新。Docker采用了一種獨(dú)特的方法:證明了可以工作,然后提取一個(gè)開源組件,并確保它成為由OCI驅(qū)動(dòng)的標(biāo)準(zhǔn)化容器生態(tài)系統(tǒng)的一部分。
問:您希望在下一個(gè)Docker發(fā)行版中看到什么功能?
NicolasDeLoof:首先,我希望獲得無特權(quán)嵌套容器“DockerinDocker”的支持。DinD的額外特權(quán)使得它很難安全,但在我的CI/CD用例的另一邊,我需要讓用戶在dockerized構(gòu)建環(huán)境中運(yùn)行docker。這在技術(shù)上是可行的,因?yàn)長(zhǎng)XD依賴Linux內(nèi)核可以做到。
我希望看到的另一個(gè)特性是在容器級(jí)別實(shí)現(xiàn)的用戶名稱空間,我可以在每個(gè)容器的基礎(chǔ)上配置用戶ID映射。有了文件系統(tǒng)的支持,這就使得組裝容器和完全支持共享volume變得很瑣碎。但這是一個(gè)長(zhǎng)期的努力,因?yàn)檫@仍然需要Linux內(nèi)核文件系統(tǒng)中的一些修復(fù)(工作正在進(jìn)行中)。
問:您能分享一個(gè)您在使用Docker時(shí)最喜歡的技巧嗎?
NicolasDeLoof:考慮到不可變的基礎(chǔ)設(shè)施,有很多中間件使用文件系統(tǒng)作為緩存,并且可能希望避免這種持久性。因此,我喜歡將它們作為只讀容器(dockerrun-read-only)來約束它們,以確切地知道它們需要訪問文件系統(tǒng)的位置,然后為實(shí)際的持久數(shù)據(jù)目錄創(chuàng)建一個(gè)volume,并為其他所有東西(通常是緩存或日志文件)創(chuàng)建一個(gè)tmpfs。
文章到此結(jié)束,如果本次分享的containerd和containerd為啥比docker好用的問題解決了您的問題,那么我們由衷的感到高興!