本發(fā)明涉及計算機技術領域,尤其涉及一種應用容器的啟動方法及系統(tǒng)。
背景技術:
近年來,隨著計算機技術的不斷發(fā)展,以Docker為代表的應用容器技術作為輕量級虛擬化技術,廣泛應用于云計算、安全、智能操作系統(tǒng)等領域。Docker是一個開源的應用容器引擎,讓開發(fā)者可以打包他們的應用以及依賴包到一個可移植的應用容器中,然后發(fā)布到任何流行的Linux機器上。Docker應用容器可以為應用提供一個虛擬化的運行環(huán)境,各個應用容器之間完全隔離,相互之間不會有任何接口,而且?guī)缀鯖]有性能開銷,可以很容易地在主機上運行。
應用容器熱遷移技術,如CRIU技術,可以將應用容器及應用容器中運行的應用凍結(jié),并將應用容器狀態(tài)及所使用的資源保存到檢查點數(shù)據(jù)文件中,寫入到硬盤上,之后可以在同一個或不同的主機上的應用容器中恢復出原來的應用,繼續(xù)從凍結(jié)之前的狀態(tài)開始運行,應用容器熱遷移技術與現(xiàn)有的一些應用容器遷移方法如docker的export和save方法相比,不同點在于docker export導出應用容器會丟失歷史記錄和元數(shù)據(jù),而docker save只能用于遷移應用容器的鏡像而不能用于遷移單個應用容器。只有應用容器熱遷移技術如CRIU能夠在遷移的時候保存應用容器的狀態(tài),恢復應用容器的時候繼續(xù)從凍結(jié)之前的狀態(tài)開始運行。
目前,對于運行某些應用的應用容器來說,啟動的時候需要向內(nèi)存中寫入大量數(shù)據(jù),初始化時間非常長,整個啟動過程需要耗費大量的時間,而且每次啟動的時候都要重復這一過程,使得用戶每次啟動應用容器后都要要等待很久,大大降低了用戶體驗。
技術實現(xiàn)要素:
本發(fā)明的目的在于,提供一種應用容器的啟動方法及系統(tǒng),它利用應用容器熱遷移技術,將應用容器啟動過程由直接啟動應用容器改變?yōu)閺膽萌萜鳈z查點恢復已經(jīng)初始化完畢的狀態(tài),加速了應用容器啟動的過程,大大提升了用戶體驗。
為了實現(xiàn)上述目的,一方面,本發(fā)明提供了一種應用容器的啟動方法,該方法包括以下步驟:
創(chuàng)建應用運行所需應用容器,并配置運行環(huán)境,以及在應用容器中安裝運行所需應用。
在存儲器上創(chuàng)建保存檢查點數(shù)據(jù)文件的目錄,檢查點數(shù)據(jù)文件用于存儲應用容器和應用所使用的資源;啟動運行所需應用的進程,以及啟動熱遷移模塊,凍結(jié)應用容器及應用進程;熱遷移模塊用于收集應用容器和應用所使用的資源,保存到檢查點目錄。
再次啟動應用容器時,先創(chuàng)建相應的應用容器,讀取保存在存儲器上的檢查點數(shù)據(jù);以及解析檢查點數(shù)據(jù),恢復應用容器的所需資源,恢復所需應用的進程,啟動應用容器。
另一方面,本發(fā)明提供了一種應用容器的啟動系統(tǒng),該系統(tǒng)包括:
應用運行模塊,用于創(chuàng)建應用運行所需應用容器,并配置運行環(huán)境,以及在應用容器中安裝運行所需應用。
第一保存恢復模塊,用于在存儲器上創(chuàng)建保存檢查點數(shù)據(jù)文件的目錄,檢查點數(shù)據(jù)文件用于存儲應用容器和應用所使用的資源;啟動運行所需應用的進程,以及啟動熱遷移模塊,凍結(jié)應用容器及應用進程;熱遷移模塊用于收集應用容器和應用所使用的資源,保存到檢查點目錄。
第二保存恢復模塊,用于再次啟動應用容器時,先創(chuàng)建相應的應用容器,讀取保存在存儲器上的檢查點數(shù)據(jù);以及解析檢查點數(shù)據(jù),恢復應用容器的所需資源,恢復所需應用的進程,啟動應用容器。
本發(fā)明提供的一種應用容器的啟動方法及系統(tǒng),通過對包含已經(jīng)啟動好的應用的應用容器進行凍結(jié)和狀態(tài)存儲,并在下一次啟動應用容器的時候直接從檢查點恢復應用容器和應用,同時采用應用容器熱遷移技術,提高了應用容器的啟動速度,提升了用戶體驗度。
附圖說明
圖1為本發(fā)明實施例提供的一種應用容器的啟動方法的方法流程圖;
圖2為本發(fā)明實施例提供的一種應用容器的啟動系統(tǒng)的結(jié)構(gòu)框圖。
具體實施方式
下面通過附圖和實施例,對本發(fā)明的技術方案作進一步的詳細描述。
圖1為本發(fā)明實施例提供的一種應用容器的啟動方法的方法流程圖。如圖1所示,該方法包括步驟101-103。
步驟101,創(chuàng)建應用運行所需應用容器,并配置運行環(huán)境,以及在應用容器中安裝運行所需應用。
在docker中創(chuàng)建應用運行所需要的應用容器。應用容器的鏡像應選擇應用運行所需要的操作系統(tǒng),在應用容器中應配置應用運行所需要的運行環(huán)境,其中,運行環(huán)境包括應用運行所依賴的其他程序、庫文件和配置環(huán)境變量,以使應用能夠在應用容器中正常啟動。
步驟102,在存儲器上創(chuàng)建保存檢查點數(shù)據(jù)文件的目錄,檢查點數(shù)據(jù)文件用于存儲應用容器和應用所使用的資源;啟動運行所需應用的進程,以及啟動熱遷移模塊,凍結(jié)應用容器及應用進程;熱遷移模塊用于收集應用容器和應用所使用的資源,保存到檢查點目錄。
將應用容器作為一組進程樹,通過CRIU(熱遷移模塊)指令獲取其pid,通過/proc/$pid/task/目錄獲取相關線程,凍結(jié)應用容器及運行在應用容器中的應用進程。
其中,CRIU指令可以內(nèi)置于docker引擎中,這樣可以直接根據(jù)運行應用的應用容器的ID或者名稱,通過執(zhí)行docker checkpoint指令凍結(jié)應用容器及運行在應用容器中的應用進程。
CRIU程序會收集應用容器和應用所使用的所有資源及與應用相關的應用容器狀態(tài),寫入檢查點目錄中,(同時還會寫入CRIU文件描述符)。除本地資源外,CRIU程序還會收集應用與外部服務器鏈接的狀態(tài),如服務器IP地址、端口號、HTTP請求報文等等,將這些信息單獨保存到一個檢查點文件中,然后斷開外部鏈接。
CRIU程序可以選擇一個工作路徑,在其中寫入應用容器狀態(tài)保存記錄日志。
步驟103,再次啟動應用容器時,先創(chuàng)建相應的應用容器,讀取保存在存儲器上的檢查點數(shù)據(jù);以及解析檢查點數(shù)據(jù),恢復應用容器的所需資源,恢復所需應用的進程,啟動應用容器。
當再次啟動該應用容器的時候,利用步驟102中使用的應用容器,保證應用能夠正常啟動。同時,調(diào)用CRIU指令,讀取步驟102中寫入檢查點目錄中的數(shù)據(jù)文件。
當不使用步驟102中使用的應用容器時,可以重復步驟101創(chuàng)建一個新的可用的應用容器。
CRIU解析檢查點數(shù)據(jù),找出哪些進程共享哪些資源,恢復共享資源,調(diào)用fork()函數(shù)恢復進程,恢復除了內(nèi)存映射、計時器、證書和線程外的所有基礎任務,恢復其他資源,最后讀取應用與外部服務器鏈接狀態(tài)保存文件內(nèi)容,與外部服務器重新建立連接,使整個應用容器正常啟動。
可選地,當要在不同主機上啟動應用容器時,可以重復步驟102,在非本地主機上創(chuàng)建一個新的可用的應用容器。同時要將步驟102中寫入檢查點目錄中的數(shù)據(jù)文件通過網(wǎng)絡或其他途徑拷貝到新的主機上指定的檢查點目錄中,再通過調(diào)動CRIU指令讀取數(shù)據(jù)。
本發(fā)明提供的一種應用容器熱遷移技術加速應用容器啟動方法,通過對包含已經(jīng)啟動好的應用的應用容器進行凍結(jié)和狀態(tài)存儲,并在下一次啟動應用容器的時候直接從檢查點恢復應用容器和應用,同時采用應用容器熱遷移技術,提高了應用容器的啟動速度,提升了用戶體驗度。
圖2為本發(fā)明實施例提供的一種應用容器熱遷移技術加速應用容器啟動系統(tǒng)的結(jié)構(gòu)框圖。如圖2所示,該裝置500包括應用運行模塊501、第一保存恢復模塊502、第二保存恢復模塊503和數(shù)據(jù)存儲模塊504。其中,
應用運行模塊501,用于創(chuàng)建應用運行所需應用容器,并配置運行環(huán)境,以及在應用容器中安裝運行所需應用。
第一保存恢復模塊502,用于創(chuàng)建保存檢查點文件的目錄,啟動運行所需應用,以及啟動熱遷移模塊,凍結(jié)應用容器及應用進程;
第二保存恢復模塊503,用于再次啟動應用容器時,先創(chuàng)建相應的應用容器,讀取保存在存儲器上的檢查點數(shù)據(jù);以及解析檢查點數(shù)據(jù),恢復應用容器的所需資源,恢復所需應用的進程,啟動應用容器。
數(shù)據(jù)存儲模塊504,用于保存及遷移檢查點數(shù)據(jù)。
本發(fā)明提供的一種應用容器熱遷移技術加速應用容器啟動裝置,通過對包含已經(jīng)啟動好的應用的應用容器進行凍結(jié)和狀態(tài)存儲,并在下一次啟動應用容器的時候直接從檢查點恢復應用容器和應用,同時采用應用容器熱遷移技術,提高了應用容器的啟動速度,提升了用戶體驗度。
以上所述的具體實施方式,對本發(fā)明的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發(fā)明的具體實施方式而已,并不用于限定本發(fā)明的保護范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。