GCP发布Kaniko:在非特权容器和Kubernetes中构建容器镜像的工具
看新聞很累?看技術(shù)新聞更累?試試下載InfoQ手機(jī)客戶端,每天上下班路上聽新聞,有趣還有料!
\\\Google發(fā)布了“Kaniko”,一種用于在未授權(quán)容器或Kubernetes集群中構(gòu)建容器鏡像的開源工具。雖然Kaniko也是根據(jù)用戶給定的Dockerfile構(gòu)建鏡像,但是并不依賴于Docker守護(hù)進(jìn)程,而是在用戶空間中完全執(zhí)行每個命令,并對所導(dǎo)致的文件系統(tǒng)更改做快照。
\\要從一個標(biāo)準(zhǔn)Dockerfile構(gòu)建鏡像,通常依賴于對Docker守護(hù)進(jìn)程的交互訪問,這需要具有運行Docker守護(hù)進(jìn)程主機(jī)的root訪問權(quán)限。在宣布Kaniko發(fā)布的GCP(Google Cloud Platform)官方博客帖子中指出,對于Kubernetes集群等環(huán)境,不方便甚至是不能安全地暴露Docker守護(hù)進(jìn)程,這使得容器鏡像難以構(gòu)建。
\\Kaniko解決了上述挑戰(zhàn),它無需授權(quán)root訪問權(quán)限,即可從Dockerfile構(gòu)建容器鏡像。Kaniko支持通過Docker和gcloud SDK,運行在標(biāo)準(zhǔn)Kubernetes集群(使用Kubernetes Secrets,其中只包括向Docker倉庫推送最終鏡像所需的認(rèn)證信息)、Google Container Builder中,或是在本地運行。
\\Kaniko以容器鏡像方式運行,它需要指定三個參數(shù):Dockerfile、構(gòu)建上下文,以及推送最終鏡像的倉庫(registry)名。所使用的鏡像是從空白(Scratch)鏡像開始構(gòu)建的。空白鏡像中只包括了靜態(tài)的Go二進(jìn)制文件,以及推送和拉取鏡像所需配置文件。Kaniko執(zhí)行器可獲取并抽取給定基礎(chǔ)鏡像中的文件系統(tǒng),并將其置于容器的根文件系統(tǒng)。這里所說的“基礎(chǔ)鏡像”,就是在給定的Dockerfile中由FROM指令所指定的鏡像。
\\之后,Kaniko按Dockerfile定義的順序,依次執(zhí)行Dockerfile中的每個指令,并在執(zhí)行完一個指令后,對文件系統(tǒng)做一次快照。快照創(chuàng)建于用戶空間中,在文件系統(tǒng)中按層次組織,并依次將當(dāng)前快照與先前存儲在內(nèi)存中的狀態(tài)進(jìn)行對比。快照將文件系統(tǒng)的任何更改存儲為基礎(chǔ)鏡像的一個新層,并將任何相關(guān)的更改反映到鏡像元數(shù)據(jù)中。在Dockerfile中所有指令執(zhí)行完成后,新構(gòu)建的鏡像將由Kaniko執(zhí)行器推送到指定的Docker倉庫。所有上述步驟,完全是在執(zhí)行器鏡像的用戶空間中完成的。這就是為什么Kaniko能避免授權(quán)主機(jī)訪問,因為“Docker守護(hù)進(jìn)程和CLI并未參與其中”。
\\\\Kaniko容器鏡像構(gòu)建流程圖(圖片來源:GCP官方博客)
\\Kaniko支持執(zhí)行大部分Dockerfile指令,但目前尚不支持SHELL、HEALTHCHECK、STOPSIGNAL和ARG指令,也未支持多階段構(gòu)建(Multi-Stage)Dockerfile。據(jù)Kaniko團(tuán)隊稱,解決這些局限的相關(guān)工作正在開展中。
\\目前還有一些類似于Kaniko的工具,其中包括img、orca-build、buildah、FTL和Bazel rules_docker。img支持在容器內(nèi)以非root用戶運行,但是需要容器具有“RawProc訪問權(quán)限”,這樣才能創(chuàng)建嵌套容器(與之相對比,Kaniko并不需要創(chuàng)建嵌套容器,因此也不需要具有RawProc訪問權(quán)限)。orca-build依賴runC環(huán)境實現(xiàn)從Dockerfile構(gòu)建鏡像,但是runC本身不能運行在容器中。buildah需要具有運行Docker守護(hù)進(jìn)程同樣的權(quán)限。
\\FTL和Bazel的目的在于對一小部分鏡像實現(xiàn)盡可能最快速的Docker鏡像創(chuàng)建。Kankio的README文件指出,“它們可以看成是‘快速路徑’的一種特殊情況,可與Kaniko提供的對通用Dockerfile的支持聯(lián)合使用”。
\\對于如何將鏡像構(gòu)建融合到容器開發(fā)構(gòu)建和部署的整個生命周期中,感興趣的讀者可以參閱InfoQ的前期報道“Google發(fā)布Skaffold,簡化Kubernetes應(yīng)用程序持續(xù)開發(fā)”。文中總結(jié)了適用于此過程的多種工具,并給出了推薦的過程。
\\據(jù)Kaniko GitHub代碼庫的README.md文件所述,該工具目前尚不能用于生產(chǎn)環(huán)境,歡迎對項目給出貢獻(xiàn)、特性請求和軟件缺陷報告。關(guān)于Kaniko發(fā)布的更多信息,參見GCP官方博客帖子“Kaniko介紹:無需授權(quán)在Kubernetes和GCP中構(gòu)建容器鏡像”。
\\查看英文原文: GCP Release “kaniko”, a Tool to Build Container Images Inside Unprivileged Containers or Kubernetes
總結(jié)
以上是生活随笔為你收集整理的GCP发布Kaniko:在非特权容器和Kubernetes中构建容器镜像的工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Office CVE-2017-1188
- 下一篇: 使用SSIS Slow Changing