背景
當下的云原生時代,容器逐漸成為軟件部署的標準。為了提升開發效率,函數計算提供容器鏡像函數,開發者可以把自己的容器鏡像作為函數的運行內容。容器鏡像函數具備以下優點:
- 低成本遷移,保持環境一致。簡化分發和部署的步驟。
- 容器鏡像具備分層緩存能力,提高鏡像上傳拉取效率。
基本原理
函數計算平臺在創建容器鏡像函數時,選擇自己的CRS倉庫鏡像,并需要輸入用戶名和密碼,啟動實例會拉取您選擇的鏡像,拉取成功后,根據指定的啟動命令啟動您的鏡像。
容器鏡像需要有HTTP Server。函數計算通過配置的端口監聽容器內的HTTP Server,此HTTP Server將接管函數計算的所有請求,包括通過API調用和通過HTTP調用的請求。您在開發函數具體的交互邏輯之前,一般需要確認開發的是通過API調用函數還是通過HTTP請求調用函數,原理如下所示:
使用限制
鏡像大小限制
最大支持10 GB(普通實例)的未解壓鏡像。
鏡像倉庫
支持拉取天翼云容器鏡像服務的鏡像。
鏡像訪問
僅支持同賬號同地域下私有鏡像倉庫讀取。
容器內文件讀寫權限
容器UID默認是Root用戶ID,即 UID=0。如果您在Dockerfile中指定了具體的使用者,則會以指定的使用者運行該容器鏡像。
容器可寫層存儲空間限制
容器產生的數據大小限制為512 MB或10 GB(同函數高級配置項中的磁盤大小一致)
解釋
容器可寫層數據會隨著容器被銷毀而刪除。如果需要持久化存儲,可以考慮使用函數計算掛載NAS或者ZOS。可以在函數配置->存儲中配置。
鏡像架構限制
目前函數計算僅支持AMD64鏡像架構,因此,針對ARM架構的機器(比如搭載M系列芯片的Mac電腦),構建鏡像時需要指定鏡像的編譯平臺為Linux/Amd64。參考命令如 docker build --platform linux/amd64 -t $IMAGE_NAME .。
解釋
構建完成后,可執行 docker inspect進行檢查。如果返回內容包含 "Architecture" : "amd64",則表示構建的鏡像正確。
HTTP Server配置要求
容器鏡像啟動的服務必須要監聽函數配置的監聽端口。
函數配置的監聽端口默認是9000。如果容器鏡像使用默認的監聽端口,那么實現的 HTTP Server監聽的端口也必須是9000。 同理,如果監聽端口是8080,那么實現的HTTP Server監聽的端口也必須是8080。
公共請求頭
容器鏡像函數的公共請求頭和自定義運行時函數的公共請求頭一致。更多信息,請參見自定義運行時上下文。
日志格式
容器鏡像函數中所有打印到標準輸出(Stdout)的日志會自動收集到您指定的日志服務中。關于配置日志功能的具體操作,請參見配置日志。
容器鏡像函數的日志格式與自定義運行時函數的日志格式一致。更多信息,請參見函數日志格式。
冷啟動優化最佳實踐
相比于其他函數上傳代碼方式部署,容器鏡像會帶來額外的數據下載和解壓的時間。為了更好的冷啟動體驗,推薦以下最佳實踐:
- 容器鏡像地址推薦使用與函數計算同地域的VPC鏡像地址,減少鏡像拉取延時。
- 鏡像進來裁剪體積,基于類似Alpine或Ubuntu這樣的最小鏡像或者是其他鏡像中精簡版本構建自定義鏡像。僅保留必要的依賴。
- 容器鏡像配合預留實例一起使用。
- 在資源允許和線程安全的情況下,搭配使用單實例多并發功能,可避免不必要的冷啟動,同時降低成本。更多信息,請參見配置單實例并發度。
計費說明
容器鏡像函數的計費項與其他類型函數的計費項一致。