Docker 1.10 RC版現已推出:關于引擎的更新及新的鏡像ID格式的重要提醒
【編者的話】Docker 1.10 RC版已經發布,它為我們帶來了全新的鏡像存儲方案以及鏡像ID標識,貼心的是Docker官方還為我們提供了一款遷移工具方便生產環境的平滑升級,還等什么,快來試試吧~
本文主要介紹的是Docker新版本將帶來的新的Docker引擎存儲鏡像及容器文件系統數據的方式。這些更新將在 Docker v1.10 版本起對用戶開放。
核心要點:
- 更安全的引用鏡像及分層
- 新的發行版清單及pull功能
- 針對現有鏡像的升級包含一個遷移步驟
- 使用遷移工具來最大限度地減少遷移時間
從v1.10版本起Docker采取了一種全新的方式在磁盤上定位鏡像數據。在此之前,每個鏡像及分層采用的是一串隨機生成的UUID。而在1.10里,我們通過一個根據鏡像及鏡像層數據的安全哈希所生成的ID實現了一套基于內容尋址的方案。
這一新的方案為用戶提供了更好的安全性支持,它通過一個內置的方法來避免ID沖突以及確保在pull,push,load,save之后的數據完整性。同時,它也帶來了更好的鏡像層共享支持,支持多個鏡像自由共享它們的分層,即使它們不是來自于同一個build。
基于內容來定位鏡像的話也使得我們更易于發現像有些部分已經事先下載好的這樣的情況。由于我們的鏡像和分層均是各自獨立的,因此,你不必再拉取屬于最初構建鏈里的每個鏡像的配置。我們也不需要再為那些根本不會對文件系統做出更改的構建指令創建對應的分層。
基于內容的尋址也是本次發行版的許多功能的實現基礎。鏡像的pull及push部分的代碼也已經被重寫成采用一個所謂的下載/上傳管理器來完成,這使得push和pull操作變得更加穩定,并且能夠一定程度地減少并發請求方面的問題。該下載管理器針對下載失敗的情況引入了重試機制并且在多并發下載方面有更好的優先級支持。
我們還在內容尋址的基礎上引入了一個新的清單格式。它直接引用了基于內容尋址的鏡像的配置及分層的校驗數據。新的清單格式也使得我們可以使用一個清單列表來定位不同的架構/平臺(更多內容敬請期待...)。遷移到新的清單格式這一過程對用戶來說也是完全透明的。
準備更新
為了讓你現有的鏡像可以通過新的模式訪問,我們不得不首先將它們遷移到一個可基于內容尋址的存儲上。這意味著需要為你現有的數據重新計算一次安全校驗。
當你第一次啟動升級后的Docker服務時,當前所有的鏡像,標簽以及容器都會被自動遷移到新的模式下。而在裝載你的容器之前,Docker守護進程會先為你現有的數據計算一次所有需要的校驗碼,在它完成之后,你所有的鏡像和標簽便會擁有一個全新的安全ID。
雖然這只是一個簡單的計算操作,但是如果你擁有很多鏡像數據的話,為這些文件計算相應的SHA256校驗還是需要花費一定的時間的。平均而言,你可以假定該遷移操作能以100MB/s的速度來處理數據。而在此期間,你的Docker服務將不會響應任何操作。
最大限度地減少遷移時間
如果你能夠接受這一次遷移的時間成本的話,那么接下來升級Docker引擎以及重啟服務等操作將可以做到對鏡像的無縫遷移。然而,如果你想最大限度的減少Docker服務的宕機時間的話,那么你可以考慮使用一個我們提供的遷移工具,它可以在運行的同時保證你現有的Docker服務仍然能正常工作。
該程序會找出你當前所有的鏡像,然后為它們計算對應的校驗數據。在你升級并重啟Docker服務后,已遷移鏡像的校驗數據便已經生成,這便能將Docker服務從這一計算任務中解放出來。而如果在遷移和升級的過程中間有新的鏡像出現的話,Docker服務會在升級到1.10的時候處理它們。
你可以從下面這個地址獲取該遷移工具: https://github.com/docker/v1.10-migrator/releases.
當然,該遷移工具也能夠以Docker鏡像的方式運行。當運行遷移工具的鏡像時,你需要將你Docker的數據目錄開放給該容器。如果你采用的是默認路徑的話那么它的執行命令可能看上去會是docker run --rm -v /var/lib/docker:/var/lib/docker docker/v1.10-migrator。如果你使用的是devicemapper存儲引擎的話,你可能還需要加上--privileged參數授權該工具訪問你的存儲設備。
Docker引擎 1.10 RC版現已推出。不妨試試,記錄下使用過程中遇到的任何問題然后反饋給我們吧!
原文鏈接: Docker 1.10 rc (翻譯:吳佳興)
來自: http://dockone.io/article/960