两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種鏡像文件的修改方法和裝置與流程

文檔序號:11620575閱讀:225來源:國知局
一種鏡像文件的修改方法和裝置與流程

本發(fā)明涉及計算機技術領域,尤其涉及一種鏡像文件的修改方法和裝置。



背景技術:

計算機虛擬化技術由來已久,從硬件仿真到全虛擬化,再到準虛擬化和操作系統(tǒng)虛擬化,各種技術種類繁多。相對于全虛擬化和半虛擬化而言,容器(英文名稱:container)是操作系統(tǒng)級別的輕量級虛擬化技術,而且它底層依賴的技術(例如linuxnamespace、linuxcgroup)完全是內核特性,沒有任何中間層開銷,對于資源的利用率極高,其性能接近物理機。

鏡像(英文名稱:image)是一個只讀的模板,例如:一個鏡像可以包含一個完整的操作系統(tǒng)環(huán)境。鏡像可以用來創(chuàng)建容器。容器是鏡像創(chuàng)建的運行實例,它可以被啟動、開始、停止、刪除,每個容器都是相互隔離的且保證安全的平臺。容器為運行中的程序提供隔離環(huán)境,容器嚴格控制其中的程序所能訪問的資源。創(chuàng)建并維護多個容器均需要基于鏡像文件來執(zhí)行,鏡像文件是保存容器數據的文件,鏡像文件可以保存、遷移到其它主機上運行。

容器在啟動的時候可以創(chuàng)建一個可寫的層(英文名稱:lay)作為最上層,鏡像文件是由一層層往上疊加覆蓋的多個層形成的,每一層都實現(xiàn)特定的功能,包含特定的組件。在應用容器引擎docker中,每一層都包含了特定組件的鏡像文件,有些層實現(xiàn)配置功能,上層的鏡像文件會覆蓋下層的鏡像文件,在容器最終運行的文件系統(tǒng)中,如果同時存在上層的鏡像文件和下層的鏡像文件,處于最上層的鏡像文件可以被讀也可以被寫,下層被覆蓋的鏡像文件都是只讀的。

現(xiàn)有技術提供的鏡像文件修改方法如下:在最頂層增加一個新的層,在新建的層中添加鏡像文件、修改鏡像文件或刪除鏡像文件,將新增的層提交保存到容器,實現(xiàn)覆蓋更新。但是本發(fā)明的發(fā)明人在實現(xiàn)本發(fā)明的過程中發(fā)現(xiàn)現(xiàn)有技術至少存在如下問題:現(xiàn)有技術中的鏡像文件修改方法會產生文件 冗余和層的冗余。并且隨著每修改一次鏡像文件,都會在原有的層上新增加一個層,而docker對總層次的數目有限制,容易導致鏡像層的飽和,導致無法再繼續(xù)往上增加新的層。



技術實現(xiàn)要素:

本發(fā)明實施例提供了一種鏡像文件的修改方法和裝置,用于避免增加冗余文件和冗余層的情況下實現(xiàn)對鏡像文件的修改。

為解決上述技術問題,本發(fā)明實施例提供以下技術方案:

第一方面,本發(fā)明實施例提供一種鏡像文件的修改方法,包括:

從容器中導出待修改的鏡像層;

對待修改的鏡像文件進行修改,并將修改后的鏡像文件保存到所述待修改的鏡像層從而得到修改后的鏡像層;

將所述修改后的鏡像層導入所述容器中。

在本發(fā)明的上述實施例中,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到待修改的鏡像層,將修改后的鏡像文件通過修改后的鏡像層導入到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,所述待修改的鏡像層,包括:第一鏡像文件所在的第一鏡像層,所述第一鏡像文件為待修改的鏡像文件;

所述對待修改的鏡像文件進行修改,并將修改后的鏡像文件保存到所述待修改的鏡像層從而得到修改后的鏡像層,包括:

對導出的所述第一鏡像層中的第一鏡像文件進行修改從而得到修改后的第一鏡像文件所在的第一鏡像層,所述修改后的鏡像層具體為修改后的第一鏡像文件所在的第一鏡像層。

在本發(fā)明的上述實施例中,第一鏡像層為待修改的鏡像層,導出第一鏡像層之后,可以對該第一鏡像層中的第一鏡像文件進行修改,生成修改后的第一鏡像文件所在的第一鏡像層,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第一方面的第一種可能的實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式中,所述對導出的所述第一鏡像層中的第一鏡像文件進行修改從而得到修改后的第一鏡像文件所在的第一鏡像層,包括:

對所述第一鏡像層中的所有鏡像文件進行解壓縮;

從所述第一鏡像層中解壓縮后的所有鏡像文件中確定出第一鏡像文件;

對所述第一鏡像文件進行修改,得到修改后的第一鏡像文件;

將修改后的第一鏡像文件保存到所述第一鏡像層中,對保存有修改后的第一鏡像文件的第一鏡像層進行壓縮,得到修改后的第一鏡像文件所在的第一鏡像層。

在本發(fā)明的上述實施例中,進一步的,若第一鏡像層中的鏡像文件采用壓縮存儲時可以先解壓縮然后再對第一鏡像文件進行修改,修改完成之后重新壓縮,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第一方面,在第一方面的第三種可能的實現(xiàn)方式中,所述待修改的鏡像層,包括:第二鏡像層和第三鏡像層,所述第二鏡像層為所述容器中待刪除的鏡像層,所述第三鏡像層為所述容器中位于所述第二鏡像層之上的相鄰鏡像層;

所述對待修改的鏡像文件進行修改,并將修改后的鏡像文件保存到所述待修改的鏡像層從而得到修改后的鏡像層,包括:

將所述第二鏡像層從導出的所述待修改的鏡像層中刪除,并將所述第三鏡像層的父子層關系修改為位于所述第二鏡像層之下且與所述第二鏡像層相鄰的第四鏡像層從而得到修改后的鏡像層,所述修改后的鏡像層包括:父子層關系修改后的第三鏡像層。

在本發(fā)明的上述實施例中,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到第二鏡像層和第三鏡像層,將第二鏡像層刪除,再將第三鏡像層的父子層關系修改,重新導入第三鏡像層到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第一方面的第三種可能的實現(xiàn)方式,在第一方面的第四種可能的實 現(xiàn)方式中,所述將所述第二鏡像層從導出的所述待修改的鏡像層中刪除,包括:

將所述待修改的鏡像層中的第二鏡像層包括的所有鏡像文件以及所有的配置信息文件刪除。

在本發(fā)明的上述實施例中,刪除第二鏡像層可以是將第二鏡像層中的所有鏡像文件以及所有配置信息文件都刪除掉,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第一方面,在第一方面的第五種可能的實現(xiàn)方式中,所述從容器中導出待修改的鏡像層,包括:

確定需要在所述容器中增加的第五鏡像層的位置;

根據所述第五鏡像層的位置從所述容器中導出第六鏡像層,所述待修改的鏡像層包括:所述第六鏡像層,所述第六鏡像層為所述容器中位于所述第五鏡像層之上的相鄰鏡像層。

在本發(fā)明的上述實施例中,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到第六鏡像層,將修改后的第六鏡像層和新增加的第五鏡像層導入到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免在原有的所有層之上再新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第一方面的第五種可能的實現(xiàn)方式,在第一方面的第六種可能的實現(xiàn)方式中,所述對待修改的鏡像文件進行修改,并將修改后的鏡像文件保存到所述待修改的鏡像層從而得到修改后的鏡像層,包括:

將所述第六鏡像層的父子層關系修改為所述第五鏡像層;

將所述第五鏡像層和父子層關系修改后的第六鏡像層保存到所述待修改的鏡像層從而得到修改后的鏡像層,所述修改后的鏡像層包括:所述第五鏡像層和父子層關系修改后的第六鏡像層。

在本發(fā)明的上述實施例中,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到第六鏡像層,將修改后的第六鏡像層和新增加的第五鏡像層導入到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免在原有的所有層之上再新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余 層。

結合第一方面的第六種可能的實現(xiàn)方式,在第一方面的第七種可能的實現(xiàn)方式中,所述對待修改的鏡像文件進行修改,并將修改后的鏡像文件保存到所述待修改的鏡像層從而得到修改后的鏡像層,還包括:

在所述第五鏡像層中增加鏡像文件和配置信息文件;

將所述第五鏡像層的配置信息文件中的父子層關系配置為所述容器中位于所述第六鏡像層之下且與所述第六鏡像層相鄰的第七鏡像層。

在本發(fā)明的上述實施例中,描述了新增加的第五鏡像層的實現(xiàn)方式,從而可以實現(xiàn)對容器中新增加一個鏡像層,避免在原有的所有層之上再新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

第二方面,本發(fā)明實施例還提供一種鏡像文件的修改裝置,包括:

層導出模塊,用于從容器中導出待修改的鏡像層;

修改模塊,用于對待修改的鏡像文件進行修改,并將修改后的鏡像文件保存到所述待修改的鏡像層從而得到修改后的鏡像層;

層導入模塊,用于將所述修改后的鏡像層導入所述容器中。

在本發(fā)明的上述實施例中,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到待修改的鏡像層,將修改后的鏡像文件通過修改后的鏡像層導入到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述待修改的鏡像層,包括:第一鏡像文件所在的第一鏡像層,所述第一鏡像文件為待修改的鏡像文件;

所述修改模塊,具體用于對導出的所述第一鏡像層中的第一鏡像文件進行修改從而得到修改后的第一鏡像文件所在的第一鏡像層,所述修改后的鏡像層具體為修改后的第一鏡像文件所在的第一鏡像層。

在本發(fā)明的上述實施例中,第一鏡像層為待修改的鏡像層,導出第一鏡像層之后,可以對該第一鏡像層中的第一鏡像文件進行修改,生成修改后的第一鏡像文件所在的第一鏡像層,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第二方面的第一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,所述修改模塊,包括:

解壓縮單元,用于對所述第一鏡像層中的所有鏡像文件進行解壓縮;

文件確定單元,用于從所述第一鏡像層中解壓縮后的所有鏡像文件中確定出第一鏡像文件;

第一文件修改單元,用于對所述第一鏡像文件進行修改,得到修改后的第一鏡像文件;

文件保存單元,用于將修改后的第一鏡像文件保存到所述第一鏡像層中,

壓縮單元,用于對保存有修改后的第一鏡像文件的第一鏡像層進行壓縮,得到修改后的第一鏡像文件所在的第一鏡像層。

在本發(fā)明的上述實施例中,進一步的,若第一鏡像層中的鏡像文件采用壓縮存儲時可以先解壓縮然后再對第一鏡像文件進行修改,修改完成之后重新壓縮,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第二方面,在第二方面的第三種可能的實現(xiàn)方式中,所述待修改的鏡像層,包括:第二鏡像層和第三鏡像層,所述第二鏡像層為所述容器中待刪除的鏡像層,所述第三鏡像層為所述容器中位于所述第二鏡像層之上的相鄰鏡像層;

所述修改模塊,包括:層刪除單元和第二文件修改單元,其中,

所述層刪除單元,用于將所述第二鏡像層從導出的所述待修改的鏡像層中刪除;

所述第二文件修改單元,用于將所述第三鏡像層的父子層關系修改為位于所述第二鏡像層之下且與所述第二鏡像層相鄰的第四鏡像層從而得到修改后的鏡像層,所述修改后的鏡像層包括:父子層關系修改后的第三鏡像層。

在本發(fā)明的上述實施例中,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到第二鏡像層和第三鏡像層,將第二鏡像層刪除,再將第三鏡像層的父子層關系修改,重新導入第三鏡像層到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第二方面的第三種可能的實現(xiàn)方式,在第二方面的第四種可能的實現(xiàn)方式中,所述層刪除單元,具體用于將所述待修改的鏡像層中的第二鏡像層包括的所有鏡像文件以及所有的配置信息文件刪除。

在本發(fā)明的上述實施例中,刪除第二鏡像層可以是將第二鏡像層中的所有鏡像文件以及所有配置信息文件都刪除掉,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第二方面,在第二方面的第五種可能的實現(xiàn)方式中,所述層導出模塊,包括:

層確定單元,用于確定需要在所述容器中增加的第五鏡像層的位置;

層導出單元,用于根據所述第五鏡像層的位置從所述容器中導出第六鏡像層,所述待修改的鏡像層包括:所述第六鏡像層,所述第六鏡像層為所述容器中位于所述第五鏡像層之上的相鄰鏡像層。

在本發(fā)明的上述實施例中,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到第六鏡像層,將修改后的第六鏡像層和新增加的第五鏡像層導入到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免在原有的所有層之上再新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第二方面的第五種可能的實現(xiàn)方式,在第二方面的第六種可能的實現(xiàn)方式中,所述修改模塊,包括:第三文件修改單元和層修改單元,其中,

所述第三文件修改單元,用于將所述第六鏡像層的父子層關系修改為所述第五鏡像層;

所述層修改單元,用于將所述第五鏡像層和父子層關系修改后的第六鏡像層保存到所述待修改的鏡像層從而得到修改后的鏡像層,所述修改后的鏡像層包括:所述第五鏡像層和父子層關系修改后的第六鏡像層。

在本發(fā)明的上述實施例中,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到第六鏡像層,將修改后的第六鏡像層和新增加的第五鏡像層導入到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免在原有的所有層之上再新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

結合第二方面的第六種可能的實現(xiàn)方式,在第二方面的第七種可能的實現(xiàn)方式中,所述第三文件修改單元,還用于在所述第五鏡像層中增加鏡像文件和配置信息文件;將所述第五鏡像層的配置信息文件中的父子層關系配置為所述容器中位于所述第六鏡像層之下且與所述第六鏡像層相鄰的第七鏡像層。

在本發(fā)明的上述實施例中,描述了新增加的第五鏡像層的實現(xiàn)方式,從而可以實現(xiàn)對容器中新增加一個鏡像層,避免在原有的所有層之上再新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

附圖說明

為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域的技術人員來講,還可以根據這些附圖獲得其他的附圖。

圖1為本發(fā)明實施例提供的一種鏡像文件的修改方法的流程方框示意圖;

圖2-a為本發(fā)明實施例提供的另一種鏡像文件的修改方法的流程方框示意圖;

圖2-b為本發(fā)明實施例提供的修改單個中間層文件的修改過程示意圖;

圖3-a為本發(fā)明實施例提供的另一種鏡像文件的修改方法的流程方框示意圖;

圖3-b為本發(fā)明實施例提供的刪除鏡像層的過程示意圖;

圖4-a為本發(fā)明實施例提供的另一種鏡像文件的修改方法的流程方框示意圖;

圖4-b為本發(fā)明實施例提供的增加鏡像層的過程示意圖;

圖5-a為本發(fā)明實施例提供的一種鏡像文件的修改裝置的組成結構示意圖;

圖5-b為本發(fā)明實施例提供的一種修改模塊的組成結構示意圖;

圖5-c為本發(fā)明實施例提供的另一種修改模塊的組成結構示意圖;

圖5-d為本發(fā)明實施例提供的另一種鏡像文件的修改裝置的組成結構示 意圖;

圖6為本發(fā)明實施例提供的一種鏡像文件的修改裝置的組成結構示意圖。

具體實施方式

本發(fā)明實施例提供了一種鏡像文件的修改方法和裝置,用于避免增加冗余文件和冗余層的情況下實現(xiàn)對鏡像文件的修改。

為使得本發(fā)明的發(fā)明目的、特征、優(yōu)點能夠更加的明顯和易懂,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,下面所描述的實施例僅僅是本發(fā)明一部分實施例,而非全部實施例?;诒景l(fā)明中的實施例,本領域的技術人員所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。

本發(fā)明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的術語在適當情況下可以互換,這僅僅是描述本發(fā)明的實施例中對相同屬性的對象在描述時所采用的區(qū)分方式。此外,術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,以便包含一系列單元的過程、方法、系統(tǒng)、產品或設備不必限于那些單元,而是可包括沒有清楚地列出的或對于這些過程、方法、產品或設備固有的其它單元。

以下分別進行詳細說明。

本發(fā)明鏡像文件的修改方法的一個實施例,可應用于開源的應用容器docker中,請參閱圖1所示,本發(fā)明一個實施例提供的鏡像文件的修改方法,可以包括如下步驟:

101、從容器中導出待修改的鏡像層。

在本發(fā)明實施例中,容器中設置有多個鏡像層,在每個鏡像層中都保存有鏡像文件,當需要修改鏡像文件時,先從容器中導出待修改的鏡像層。待修改的鏡像層可以根據容器中需要修改的鏡像文件來確定,在具體的實現(xiàn)場景下可以確定出具體的待修改的鏡像文件。進一步的,待修改的鏡像層可以根據容器中需要修改的鏡像文件的具體修改方式來確定,在具體的實現(xiàn)場景下可以有相應的鏡像文件修改方式,在后續(xù)實施例中可以針對鏡像文件的具 體修改方式來進行詳細說明。

102、對待修改的鏡像文件進行修改,并將修改后的鏡像文件保存到待修改的鏡像層從而得到修改后的鏡像層。

在本發(fā)明實施例中,從容器中導出待修改的鏡像層之后,可以對預先確定的待修改的鏡像文件進行修改,例如,對鏡像文件的修改可以包括:將容器中的鏡像文件的數據內容進行修改,或者將容器中的鏡像文件刪除,或者在容器中新增加鏡像文件,詳細后續(xù)實施例中對不同修改方式的具體說明。當待修改的鏡像文件修改完成之后得到修改后的鏡像文件,則可以將修改后的鏡像文件保存到待修改的鏡像層從而得到修改后的鏡像層,修改后的鏡像層是是在從容器中導出的待修改的鏡像層上添加修改后的鏡像文件得到的鏡像層。本發(fā)明實施例中對容器中鏡像文件的修改是通過對鏡像層從容器中導出后進行操作的,而不需要按照現(xiàn)有技術在原有的鏡像層之上新增加一個層來保存修改后的鏡像文件。

103、將修改后的鏡像層導入容器中。

在本發(fā)明實施例中,通過步驟102得到修改后的鏡像層,修改后的鏡像層包括有修改后的鏡像文件,只需要確定修改層次上下層接口的兼容就可以將該修改后的鏡像層導入到容器中,從而可以完成容器中多個鏡像層的鏡像文件的修改。本發(fā)明實施例提供的鏡像文件的修改方式是將鏡像層從容器中導出后進行修改最后再導入,這種方式不同于現(xiàn)有技術中采用直接增加新的鏡像層的方式,因此不會帶來冗余文件和冗余層。

通過前述實施例對本發(fā)明的描述說明可知,首先從容器中導出待修改的鏡像層,然后對待修改的鏡像文件進行修改,并將修改后的鏡像文件保存到待修改的鏡像層從而得到修改后的鏡像層,最后將修改后的鏡像層導入容器中。由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到待修改的鏡像層,將修改后的鏡像文件通過修改后的鏡像層導入到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

接下來以對待修改的鏡像文件進行數據內容的修改為例進行說明,請參閱如圖2-a所示,本發(fā)明實施例提供的鏡像文件的修改方法可以包括如下步 驟:

201、從容器中導出第一鏡像文件所在的第一鏡像層,第一鏡像文件為待修改的鏡像文件。

在本發(fā)明實施例中,以對容器中的第一鏡像文件的數據內容修改為例,首先確定該第一鏡像文件所在的鏡像層為第一鏡像層,從容器中導出該第一鏡像層,然后執(zhí)行步驟202。

202、對導出的第一鏡像層中的第一鏡像文件進行修改從而得到修改后的第一鏡像文件所在的第一鏡像層,修改后的鏡像層具體為修改后的第一鏡像文件所在的第一鏡像層。

在本發(fā)明實施例中,第一鏡像層為待修改的鏡像層,導出第一鏡像層之后,可以對該第一鏡像層中的第一鏡像文件進行修改,生成修改后的第一鏡像文件所在的第一鏡像層,則前述實施例中步驟102中所述的修改后的鏡像層具體為修改后的第一鏡像文件所在的第一鏡像層。

在本發(fā)明的一些實施例中,步驟202對導出的第一鏡像層中的第一鏡像文件進行修改從而得到修改后的第一鏡像文件所在的第一鏡像層,包括:

a1、對第一鏡像層中的所有鏡像文件進行解壓縮;

a2、從第一鏡像層中解壓縮后的所有鏡像文件中確定出第一鏡像文件;

a3、對第一鏡像文件進行修改,得到修改后的第一鏡像文件;

a4、將修改后的第一鏡像文件保存到第一鏡像層中,對保存有修改后的第一鏡像文件的第一鏡像層進行壓縮,得到修改后的第一鏡像文件所在的第一鏡像層。

其中,從第一鏡像層中解壓該層所有的鏡像文件,確定出第一鏡像文件,然后用目標文件來修改替換該第一鏡像文件,得到修改后的第一鏡像文件,再將該修改后的第一鏡像文件保存到第一鏡像層,打包修改后的第一鏡像層。將打包修改后的第一鏡像層導入到容器中,形成修改后的容器。請參閱如圖2-b所示,為本發(fā)明實施例提供的修改單個中間層文件的修改過程示意圖,以docker容器中建立有四個鏡像層為例,各個鏡像層中保存的鏡像文件分別為四種不同的應用程序,例如四種應用程序分別為:debian、samba、vim、apache,若待修改的鏡像文件為vim,則可以從docker容器中導出vim所在的第三個 鏡像層,導出vim所在的第三個鏡像層之后,可以對該鏡像層進行修改,層修改完成之后,再將vim所在的第三個鏡像層導入到docker容器中,從而可以完成對vim鏡像文件的修改。若按照現(xiàn)有技術的鏡像文件修改方法,就需要在最上層(即apache所在的第四個鏡像層)之上再新增加一個鏡像層,新增加的鏡像層用于保存newvim鏡像文件,從而docker容器就包括五個鏡像層,隨著對docker容器的多次修改,docker容器的總層數會不斷增加,不但會帶來冗余文件和冗余層,還會導致docker容器的總層數達到最大限制的層數,此時就無法再修改docker容器中的鏡像文件了。

203、將修改后的第一鏡像文件所在的第一鏡像層導入容器中。

在本發(fā)明實施例中,通過步驟202得到修改后的第一鏡像文件所在的第一鏡像層,再將修改后的第一鏡像文件所在的第一鏡像層導入到容器中,從而可以完成容器中鏡像層包括的鏡像文件的修改。本發(fā)明實施例提供的鏡像文件的修改方式是將鏡像層從容器中導出后進行修改最后再導入,這種方式不同于現(xiàn)有技術中采用直接增加新的鏡像層的方式,因此不會帶來冗余文件和冗余層。

通過前述實施例對本發(fā)明的描述說明可知,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到第一鏡像層,將修改后的第一鏡像文件通過修改后的第一鏡像層導入到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

接下來以對待修改的鏡像文件從容器中刪除為例進行說明,請參閱如圖3-a所示,本發(fā)明實施例提供的鏡像文件的修改方法可以包括如下步驟:

301、從容器中導出待修改的鏡像層,待修改的鏡像層包括:第二鏡像層和第三鏡像層,第二鏡像層為容器中待刪除的鏡像層,第三鏡像層為容器中位于第二鏡像層之上的相鄰鏡像層。

在本發(fā)明實施例中,以對容器中第二鏡像層的刪除為例,首先確定待修改的鏡像層包括:第二鏡像層和第三鏡像層,第三鏡像層和第二鏡像層是容器中位置相鄰的上下兩個鏡像層,從容器中導出待修改的鏡像層然后執(zhí)行步驟302。

302、將第二鏡像層從導出的待修改的鏡像層中刪除,并將第三鏡像層的父子層關系修改為位于第二鏡像層之下且與第二鏡像層相鄰的第四鏡像層從而得到修改后的鏡像層,修改后的鏡像層包括:父子層關系修改后的第三鏡像層。

在本發(fā)明實施例中,第二鏡像層和第三鏡像層為待修改的鏡像層,導出待修改的鏡像層之后,可以將第二鏡像層從導出的待修改的鏡像層中刪除,并將第三鏡像層的父子層關系修改為位于第二鏡像層之下且與第二鏡像層相鄰的第四鏡像層從而得到修改后的鏡像層,則前述實施例中步驟102中所述的修改后的鏡像層具體包括:父子層關系修改后的第三鏡像層。第三鏡像層、第二鏡像層、第四鏡像層是容器中位置相鄰的上下三個鏡像層,當處于第三鏡像層和第四鏡像層之間的第二鏡像層被刪除掉之后,第三鏡像層和第四鏡像層成了相鄰的上下兩個鏡像層,則第三鏡像層的父子層關系需要被修改為第四鏡像層。從容器中導出的待修改的鏡像層包括:第二鏡像層和第三鏡像層,修改后的鏡像層只包括第三鏡像層,從而完成對第二鏡像層的刪除,

在本發(fā)明的一些實施例中,步驟302中將第二鏡像層從導出的待修改的鏡像層中刪除,具體包括如下步驟:

b1、將待修改的鏡像層中的第二鏡像層包括的所有鏡像文件以及所有的配置信息文件刪除。

其中,刪除第二鏡像層可以是將第二鏡像層中的所有鏡像文件以及所有配置信息文件都刪除掉。接下來進行說明。例如,從容器中導出整個容器中鏡像文件所有層,然后根據層配置信息找到待刪除的第二鏡像層,然后將該第二鏡像層的鏡像文件和配置信息文件都刪除,最后修改第三鏡像層的父子層配置信息文件,配置刪除后正確的父子層關系,打包形成新的容器。請參閱如圖3-b所示,為本發(fā)明實施例提供的刪除鏡像層的過程示意圖,以docker容器中建立有四個鏡像層為例,各個鏡像層中保存的鏡像文件分別為四種不同的應用程序,例如四種應用程序分別為:debian、samba、vim、apache,若待刪除的鏡像層為vim所在的鏡像層,則可以從docker容器中導出所有的鏡像層,可以對vim所在的鏡像層進行刪除,層刪除完成之后,再將apache所在的鏡像層的配置信息文件中的父子層關系進行重新配置,將apache所在 的鏡像層的父子層修改為samba所在的鏡像層,并將apache所在的鏡像層導入到docker容器中,從而可以完成對vim所在鏡像層的修改。若按照現(xiàn)有技術的鏡像文件修改方法,就需要在最上層(即apache所在的第四個鏡像層)之上再新增加一個鏡像層,新增加的鏡像層用于保存對vim鏡像文件所在鏡像層的刪除,從而docker容器就包括五個鏡像層,隨著對docker容器的多次修改,docker容器的總層數會不斷增加,不但會帶來冗余文件和冗余層,還會導致docker容器的總層數達到最大限制的層數,此時就無法再修改docker容器中的鏡像文件了。

303、將父子層關系修改后的第三鏡像層導入容器中。

在本發(fā)明實施例中,通過步驟302得到父子層關系修改后的第三鏡像層,再將父子層關系修改后的第三鏡像層導入到容器中,從而可以完成容器中鏡像層包括的鏡像文件的修改。本發(fā)明實施例提供的鏡像文件的修改方式是將鏡像層從容器中導出后進行修改最后再導入,這種方式不同于現(xiàn)有技術中采用直接增加新的鏡像層的方式,因此不會帶來冗余文件和冗余層。

通過前述實施例對本發(fā)明的描述說明可知,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到第二鏡像層和第三鏡像層,將第二鏡像層刪除,再將第三鏡像層的父子層關系修改,重新導入第三鏡像層到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

接下來以將待修改的鏡像文件增加到容器為例進行說明,請參閱如圖4-a所示,本發(fā)明實施例提供的鏡像文件的修改方法可以包括如下步驟:

401、確定需要在容器中增加的第五鏡像層的位置。

402、根據第五鏡像層的位置從容器中導出第六鏡像層,待修改的鏡像層包括:第六鏡像層,第六鏡像層為容器中位于第五鏡像層之上的相鄰鏡像層。

在本發(fā)明實施例中,首先定義在容器中需要增加的鏡像層為第五鏡像層,可以按照業(yè)務組件的劃分方式確定需要增加的第五鏡像層的位置,然后根據第五鏡像層的位置確定出第六鏡像層,以對容器中的第六鏡像層修改為例,從容器中導出該第六鏡像層,然后執(zhí)行步驟403。

403、將第六鏡像層的父子層關系修改為第五鏡像層。

其中,在容器中第六鏡像層的父子層關系描述的是插入第五鏡像層之前與該第六鏡像層相鄰的下一個鏡像層,例如位于第六鏡像層之下且與第六鏡像層相鄰的是第七鏡像層,若第五鏡像層插入在第六鏡像層之下,則該第六鏡像層的父子層關系需要從第七鏡像層修改為第五鏡像層。

404、將第五鏡像層和父子層關系修改后的第六鏡像層保存到待修改的鏡像層從而得到修改后的鏡像層,修改后的鏡像層包括:第五鏡像層和父子層關系修改后的第六鏡像層。

在本發(fā)明實施例中,第六鏡像層為待修改的鏡像層,導出第六鏡像層之后,可以將第五鏡像層和父子層關系修改后的第六鏡像層保存到待修改的鏡像層從而得到修改后的鏡像層,則前述實施例中步驟102中所述的修改后的鏡像層具體為第五鏡像層和父子層關系修改后的第六鏡像層。

在本發(fā)明的一些實施例中,本發(fā)明實施例提供的鏡像文件的修改方法除了包括步驟401至步驟405之外,還可以包括如下步驟:

c1、在第五鏡像層中增加鏡像文件和配置信息文件;

c2、將第五鏡像層的配置信息文件中的父子層關系配置為容器中位于第六鏡像層之下且與第六鏡像層相鄰的第七鏡像層。

其中,步驟c1至步驟c2中描述了第五鏡像層的生成方式,可以先在第五鏡像層中增加鏡像文件和配置信息文件,然后再對該配置信息文件進行修改,例如將第五鏡像層的配置信息文件中的父子層關系配置為容器中位于第六鏡像層之下且與第六鏡像層相鄰的第七鏡像層。接下來進行說明。例如,確定增加的第五鏡像層的位置,一般按業(yè)務組件合理劃分,將新增層的所有鏡像文件都放在層數據中,新建層配置信息文件,描述該第五鏡像層,然后配置增加層的上下層關系并配置到層信息文件中,將增加層的鏡像文件和配置信息文件都打包到第五鏡像層里面。導出增加層的上一層(即第六鏡像層)配置信息,配置上一層的的父層為新增的層。將修改后的層全部導入到容器,重新打包形成新的容器。請參閱如圖4-b所示,為本發(fā)明實施例提供的增加鏡像層的過程示意圖,以docker容器中建立有三個鏡像層為例,各個鏡像層中保存的鏡像文件分別為三種不同的應用程序,例如三種應用程序分別為:debian、samba、apache,若待增加的鏡像層為vim所在的鏡像層,待增加的 vim所在的鏡像層為samba所在的鏡像層和apache所在的鏡像層之間,apache所在的鏡像層為位于vim所在的鏡像層之上,則可以從docker容器中導出apache所在的鏡像層,可以將vim所在的鏡像層和apache所在的鏡像層進行打包,將apache所在的鏡像層的配置信息文件中的父子層關系進行重新配置,在原容器中apache所在的鏡像層的父子層為samba所在的鏡像層,將apache所在的鏡像層的父子層修改為vim所在的鏡像層,并將apache所在的鏡像層和vim所在的鏡像層導入到docker容器中,從而可以完成對vim所在鏡像層的增加。若按照現(xiàn)有技術的鏡像文件修改方法,就需要在最上層(即apache所在的鏡像層)之上再新增加一個鏡像層,新增加的鏡像層用于保存對vim鏡像文件所在鏡像層的增加,從而docker容器就包括四個鏡像層,隨著對docker容器的多次修改,docker容器的總層數會不斷增加,不但會帶來冗余文件和冗余層,還會導致docker容器的總層數達到最大限制的層數,此時就無法再修改docker容器中的鏡像文件了。

405、將第五鏡像層和父子層關系修改后的第六鏡像層導入容器中。

在本發(fā)明實施例中,通過步驟404得到第五鏡像層和父子層關系修改后的第六鏡像層,再將第五鏡像層和父子層關系修改后的第六鏡像層導入到容器中,從而可以完成容器中鏡像層包括的鏡像文件的修改。本發(fā)明實施例提供的鏡像文件的修改方式是將鏡像層從容器中導出后進行修改最后再導入,這種方式不同于現(xiàn)有技術中采用直接增加新的鏡像層的方式,因此不會帶來冗余文件和冗余層。

通過前述實施例對本發(fā)明的描述說明可知,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到第六鏡像層,將修改后的第六鏡像層和新增加的第五鏡像層導入到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免在原有的所有層之上再新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例 均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。

為便于更好的實施本發(fā)明實施例的上述方案,下面還提供用于實施上述方案的相關裝置。

請參閱圖5-a所示,本發(fā)明實施例提供的一種鏡像文件的修改裝置500,該鏡像文件的修改裝置可以應用于docker容器的文件系統(tǒng)中,該鏡像文件的修改裝置500可以包括:層導出模塊501、修改模塊502和層導入模塊503,其中,

層導出模塊501,用于從容器中導出待修改的鏡像層;

修改模塊502,用于對待修改的鏡像文件進行修改,并將修改后的鏡像文件保存到所述待修改的鏡像層從而得到修改后的鏡像層;

層導入模塊503,用于將所述修改后的鏡像層導入所述容器中。

在本發(fā)明的一些實施例中,所述待修改的鏡像層,包括:第一鏡像文件所在的第一鏡像層,所述第一鏡像文件為待修改的鏡像文件;

所述修改模塊502,具體用于對導出的所述第一鏡像層中的第一鏡像文件進行修改從而得到修改后的第一鏡像文件所在的第一鏡像層,所述修改后的鏡像層具體為修改后的第一鏡像文件所在的第一鏡像層。

在本發(fā)明的一些實施例中,如圖5-b所示,所述修改模塊502,包括:

解壓縮單元5021,用于對所述第一鏡像層中的所有鏡像文件進行解壓縮;

文件確定單元5022,用于從所述第一鏡像層中解壓縮后的所有鏡像文件中確定出第一鏡像文件;

第一文件修改單元5023,用于對所述第一鏡像文件進行修改,得到修改后的第一鏡像文件;

文件保存單元5024,用于將修改后的第一鏡像文件保存到所述第一鏡像層中,

壓縮單元5025,用于對保存有修改后的第一鏡像文件的第一鏡像層進行壓縮,得到修改后的第一鏡像文件所在的第一鏡像層。

在本發(fā)明的一些實施例中,所述待修改的鏡像層,包括:第二鏡像層和第三鏡像層,所述第二鏡像層為所述容器中待刪除的鏡像層,所述第三鏡像層為所述容器中位于所述第二鏡像層之上的相鄰鏡像層;

如圖5-c所示,所述修改模塊502,包括:層刪除單元5026和第二文件修改單元5027,其中,

所述層刪除單元5026,用于將所述第二鏡像層從導出的所述待修改的鏡像層中刪除;

所述第二文件修改單元5027,用于將所述第三鏡像層的父子層關系修改為位于所述第二鏡像層之下且與所述第二鏡像層相鄰的第四鏡像層從而得到修改后的鏡像層,所述修改后的鏡像層包括:父子層關系修改后的第三鏡像層。

在本發(fā)明的一些實施例中,所述層刪除單元5026,具體用于將所述待修改的鏡像層中的第二鏡像層包括的所有鏡像文件以及所有的配置信息文件刪除。

在本發(fā)明的一些實施例中,如圖5-d所示,所述層導出模塊501,包括:

層確定單元5011,用于確定需要在所述容器中增加的第五鏡像層的位置;

層導出單元5012,用于根據所述第五鏡像層的位置從所述容器中導出第六鏡像層,所述待修改的鏡像層包括:所述第六鏡像層,所述第六鏡像層為所述容器中位于所述第五鏡像層之上的相鄰鏡像層。

進一步的,所述修改模塊502,包括:第三文件修改單元5028和層修改單元5029,其中,

所述第三文件修改單元5028,用于將所述第六鏡像層的父子層關系修改為所述第五鏡像層;

所述層修改單元5029,用于將所述第五鏡像層和父子層關系修改后的第六鏡像層保存到所述待修改的鏡像層從而得到修改后的鏡像層,所述修改后的鏡像層包括:所述第五鏡像層和父子層關系修改后的第六鏡像層。

在本發(fā)明的一些實施例中,所述第三文件修改單元5028,還用于在所述第五鏡像層中增加鏡像文件和配置信息文件;將所述第五鏡像層的配置信息文件中的父子層關系配置為所述容器中位于所述第六鏡像層之下且與所述第六鏡像層相鄰的第七鏡像層。

需要說明的是,上述裝置各模塊/單元之間的信息交互、執(zhí)行過程等內容,由于與本發(fā)明方法實施例基于同一構思,其帶來的技術效果與本發(fā)明方法實 施例相同,具體內容可參見本發(fā)明前述所示的方法實施例中的敘述,此處不再贅述。

通過前述實施例對本發(fā)明的描述說明可知,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到第一鏡像層,將修改后的第一鏡像文件通過修改后的第一鏡像層導入到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

本發(fā)明實施例還提供一種計算機存儲介質,其中,該計算機存儲介質存儲有程序,該程序執(zhí)行包括上述方法實施例中記載的部分或全部步驟。

接下來介紹本發(fā)明實施例提供的另一種鏡像文件的修改裝置,請參閱圖6所示,鏡像文件的修改裝置600包括:

接收器601、發(fā)射器602、處理器603和存儲器604(其中鏡像文件的修改裝置600中的處理器603的數量可以一個或多個,圖6中以一個處理器為例)。在本發(fā)明的一些實施例中,接收器601、發(fā)射器602、處理器603和存儲器604可通過總線或其它方式連接,其中,圖6中以通過總線連接為例。

存儲器604可以包括只讀存儲器和隨機存取存儲器,并向處理器603提供指令和數據。存儲器604的一部分還可以包括非易失性隨機存取存儲器(英文全稱:non-volatilerandomaccessmemory,英文縮寫:nvram)。存儲器604存儲有操作系統(tǒng)和操作指令、可執(zhí)行模塊或者數據結構,或者它們的子集,或者它們的擴展集,其中,操作指令可包括各種操作指令,用于實現(xiàn)各種操作。操作系統(tǒng)可包括各種系統(tǒng)程序,用于實現(xiàn)各種基礎業(yè)務以及處理基于硬件的任務。

處理器603控制鏡像文件的修改裝置的操作,處理器603還可以稱為中央處理單元(英文全稱:centralprocessingunit,英文簡稱:cpu)。具體的應用中,鏡像文件的修改裝置的各個組件通過總線系統(tǒng)耦合在一起,其中總線系統(tǒng)除包括數據總線之外,還可以包括電源總線、控制總線和狀態(tài)信號總線等。但是為了清楚說明起見,在圖中將各種總線都稱為總線系統(tǒng)。

上述本發(fā)明實施例揭示的方法可以應用于處理器603中,或者由處理器603實現(xiàn)。處理器603可以是一種集成電路芯片,具有信號的處理能力。在實 現(xiàn)過程中,上述方法的各步驟可以通過處理器603中的硬件的集成邏輯電路或者軟件形式的指令完成。上述的處理器603可以是通用處理器、數字信號處理器(英文全稱:digitalsignalprocessing,英文縮寫:dsp)、專用集成電路(英文全稱:applicationspecificintegratedcircuit,英文縮寫:asic)、現(xiàn)成可編程門陣列(英文全稱:field-programmablegatearray,英文縮寫:fpga)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件。可以實現(xiàn)或者執(zhí)行本發(fā)明實施例中的公開的各方法、步驟及邏輯框圖。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)的處理器等。結合本發(fā)明實施例所公開的方法的步驟可以直接體現(xiàn)為硬件譯碼處理器執(zhí)行完成,或者用譯碼處理器中的硬件及軟件模塊組合執(zhí)行完成。軟件模塊可以位于隨機存儲器,閃存、只讀存儲器,可編程只讀存儲器或者電可擦寫可編程存儲器、寄存器等本領域成熟的存儲介質中。該存儲介質位于存儲器604,處理器603讀取存儲器604中的信息,結合其硬件完成上述方法的步驟。

本發(fā)明實施例中,處理器603用于執(zhí)行前述任意方法實施例中描述的鏡像文件的修改方法。

通過前述實施例對本發(fā)明的描述說明可知,由于本發(fā)明實施例中采用從容器中對鏡像層導出的方式獲取到第一鏡像層,將修改后的第一鏡像文件通過修改后的第一鏡像層導入到容器中,從而可以實現(xiàn)對容器中鏡像文件的修改,避免通過新增加層的方式來修改鏡像文件,從而不會產生冗余文件和冗余層。

另外需說明的是,以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上??梢愿鶕嶋H的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。另外,本發(fā)明提供的裝置實施例附圖中,模塊之間的連接關系表示它們之間具有通信連接,具體可以實現(xiàn)為一條或多條通信總線或信號線。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。

通過以上的實施方式的描述,所屬領域的技術人員可以清楚地了解到本 發(fā)明可借助軟件加必需的通用硬件的方式來實現(xiàn),當然也可以通過專用硬件包括專用集成電路、專用cpu、專用存儲器、專用元器件等來實現(xiàn)。一般情況下,凡由計算機程序完成的功能都可以很容易地用相應的硬件來實現(xiàn),而且,用來實現(xiàn)同一功能的具體硬件結構也可以是多種多樣的,例如模擬電路、數字電路或專用電路等。但是,對本發(fā)明而言更多情況下軟件程序實現(xiàn)是更佳的實施方式。基于這樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產品的形式體現(xiàn)出來,該計算機軟件產品存儲在可讀取的存儲介質中,如計算機的軟盤、u盤、移動硬盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、磁碟或者光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。

綜上所述,以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照上述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對上述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發(fā)明各實施例技術方案的精神和范圍。

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
克东县| 仁布县| 广南县| 正镶白旗| 邵阳县| 贵港市| 衡山县| 台东县| 珠海市| 嘉峪关市| 麦盖提县| 天长市| 邢台市| 海林市| 汉阴县| 从江县| 徐汇区| 德清县| 公安县| 璧山县| 塔城市| 大洼县| 定日县| 贵南县| 蒙阴县| 万荣县| 常德市| 苏尼特左旗| 武汉市| 塔河县| 永宁县| 东丽区| 清原| 左权县| 小金县| 珲春市| 南充市| 军事| 宣威市| 桃江县| 沽源县|