本文講的是<b>如何通過提前Bake Docker鏡像加快基礎設施的啟動速度</b>【編者的話】本文介紹了如何預熱Docker鏡像來減少基礎設施的啟動時間,比如通過Ansible工具、删除key.json檔案和Docker PID檔案等等。
我們的微服務應用托管于Docker容器,可以從Docker倉庫或私有倉庫中拉取(pull)。不像在Ubuntu伺服器上使用bash腳本進行安裝和配置,每個應用所對應的獨立Docker鏡像可以單獨複制到所需執行個體。這意味着在處理較大負載時可以快速添加執行個體,如果此方法可行,值得在組織中推廣應用。
使用者體驗的頭一件事是示範流程,展示應用如何為團隊的Github 分支(branches)建立環境。我們預先為應用demo在EC2 AMI建立單獨鏡像。這樣,我們僅為需要運作應用的使用者啟動Docker容器。
可擴充IT自動化工具Ansible可以完成大部分工作。我們用它運作各種簡單任務,如更新伺服器host檔案,生成證書,拉取需要的Docker鏡像。舉個例子,我們可以運作指定指令以及使用在Ansible YAML設定檔案中的指定變量。在bake鏡像時,Ansible拉取Docker鏡像方法如下:
考慮到bake到EC2鏡像的東西必須是唯一的,否則如果每個鏡像都有相同的标志檔案,就沒有辦法加以區分。為了将Docker安裝到AMI以及将容器bake到AMI,我們需要删除Docker key.json檔案和Docker pid file。Docker在下次啟動時還會生成這些檔案,是以删掉也沒關系。
執行個體必須和使用者連結,這樣我們才能協助他們的應用以及确定他們所使用的資源量。為了使執行個體在部署之後更加個性化,我們将亞馬遜SSM代理bake到鏡像中,這樣就可以實作在第一時間與執行個體進行互動。為使用者配置設定和配置執行個體的速度越快,内部DNS和路由配置允許應用通路的速度也就越快。
對于預先bake Docker鏡像到亞馬遜AMI這種做法,盡管目前支援它的理由還比較有限,但還是值得推廣到幾乎所有的架構。特别是Runnable這種一個執行個體可以對應各種應用、資料庫和服務的情況,隻要你知道執行個體在部署時需要什麼,就可以使用上述方法。可以使用多個AMI來填補所有角色需要,或者隻用一個有多個Docker鏡像的執行個體,這些鏡像不被運作也沒有資源消耗。這種做法對高可用基礎設施的擴充速度非常有幫助,可以将其縮短到數秒鐘。
需要運作什麼,就bake什麼,這種做法了解起來很簡單。由于存在重複的問題,我們還不能做到先發制人的準備好證書和指定配置,不過這些都是不計算在等待時間内的小程序。網絡傳輸,也可能有磁盤I/O通常在伺服器建立和啟動新的Docker容器的過程中耗費較多時間,是以減少這類時間消耗能顯著的提高啟動速度。另外,這些考慮并非隻針對特定産品。建立預先bake的AMI這種做法對任何團隊來說,都能在建立新執行個體的時候節省等待時間。
<b>原文釋出時間為:</b>2017-01-19
<b>本文作者:</b>馬遠征
<b>本文來自雲栖社群合作夥伴Dockerone.io,了解相關資訊可以關注Dockerone.io。</b>
<b></b>
<b>原文标題:</b><b>如何通過提前Bake Docker鏡像加快基礎設施的啟動速度</b>