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