1. 程式人生 > >谷歌開源Docker映象分析比對工具container-diff

谷歌開源Docker映象分析比對工具container-diff

谷歌釋出了一個叫作 container-diff的工具,用於分析比對Docker映象。它支援檔案系統比對,並能夠感知到由apt、npm和pip這些包管理器所帶來的變更。

Dockerfile用於建立容器映象,一旦Dockerfile發生變更,就需要重新建立新的映象。Dockerfile是普通的文字檔案,使用原始碼控制系統的diff工具就可以比較出它們之間的區別。不過,要對Dockerfile檔案裡的命令所產生的映象變更記進行視覺化,或者列出具體的映象變更內容就很困難。應用程式被打包到映象之後,如果依賴了第三方特定版本的依賴項,事情就會變得複雜,況且,下游的依賴項也會讓跟蹤變得更加複雜。未被跟蹤的依賴項會導致映象體積膨脹,讓映象下載時間變長。

container-diff會分析映象的“語義”差別,將結果以一種使用者可理解的格式呈現給使用者,這樣使用者就可以採取相應的行動。container-diff支援Python的pip包管理器、Linux上的apt工具以及node.js包管理器npm。另外,它還可以用於分析檔案系統的變化。該工具可以一次性分析一個或幾個甚至所有包管理器的內容。

在分析映象時,可以指定本地的Docker後臺路徑、遠端的映象倉庫地址或檔案路徑。如果已經使用Docker的儲存命令匯出映象,那麼可以使用後者。在使用該工具分析後臺映象時,映象不需要處於執行狀態。該工具還能輸出單個映象的修改歷史。

其他類似的工具還有Anchore的diff工具以及Atomic專案的“atomic diff”命令。Docker的“docker history”命令只能列出每個Dockerfile的變更歷史,這個只需要檢查一下Dockerfile就知道了。一些反向工程可以揭示底層的一些細節,但很難將其抽取成事件,比如之前安裝了哪些包。Atomic的工具可以列出檔案系統的差別,而且可以用在RPM上,也就是說,它可以列出安裝了哪些RPM包。另外,“atomic diff”命令可以用於比較兩個容器、容器和映象、兩個映象之間的差別。

根據谷歌的文章所述,container-diff可以成為開發流程的一部分,可以與持續整合系統整合起來,提供自動化的變更日誌管理,而且它的輸出結果是JSON格式的。如果映象處於倉庫當中,不管是私有倉庫還是像Google Container Registry這樣的倉庫,container-diff都為它們提供了認證機制,這個認證機制是通過docker-credentials-helpers包來實現的。這個包使用本地程式(比如OSX上的osxkeychain)來儲存Docker認證資訊。