Linux
如何處理 Docker 容器內的安全更新?
在將應用程序部署到伺服器上時,應用程序與其自身捆綁的內容與它期望從平台(作業系統和已安裝的軟體包)提供的內容之間通常是分開的。其中一點是平台可以獨立於應用程序進行更新。例如,當需要將安全更新緊急應用到平台提供的包而不重建整個應用程序時,這很有用。
傳統上,安全更新只需執行包管理器命令即可在作業系統上安裝更新版本的包(例如 RHEL 上的“yum update”)。但是隨著容器技術(如 Docker)的出現,容器鏡像基本上將應用程序和平台捆綁在一起,保持容器系統最新的規範方法是什麼?主機和容器都有自己的、獨立的包集,需要在主機上更新和更新,不會更新容器內的任何包。隨著 RHEL 7 的發布,Docker 容器特別突出,聽聽 Redhat 推薦的處理容器安全更新的方法會很有趣。
關於幾個選項的想法:
- 讓包管理器更新主機上的包不會更新容器內的包。
- 必須重新生成所有容器映像以應用更新似乎打破了應用程序和平台之間的分離(更新平台需要訪問生成 Docker 映像的應用程序建構過程)。
- 在每個正在執行的容器中執行手動命令似乎很麻煩,並且下次從應用程序發布工件更新容器時,更改有被覆蓋的風險。
因此,這些方法似乎都不令人滿意。
Docker 映像捆綁了應用程序和“平台”,這是正確的。但通常鏡像是由基礎鏡像和實際應用組成的。
因此,處理安全更新的規範方法是更新基礎映像,然後重建您的應用程序映像。
這些容器應該是輕量級和可互換的。如果您的容器存在安全問題,您可以重建已修補的容器版本並部署新容器。(許多容器使用標準基礎鏡像,使用標準包管理工具,如 apt-get 來安裝它們的依賴項,重建將從儲存庫中提取更新)
雖然您可以在容器內部打更新檔,但這並不能很好地擴展。