?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
從DockerEngine的1.10版本開始,我們完全改變了磁盤上圖像數(shù)據(jù)的尋址方式。以前,每個(gè)圖像和層都使用一個(gè)隨機(jī)分配的UUID。在1.10中,基于圖像和層數(shù)據(jù)的安全散列,我們使用ID實(shí)現(xiàn)了內(nèi)容可尋址方法。
這種新方法為用戶提供了更多的安全性,提供了一種避免ID沖突的內(nèi)置方式,并保證了在拉動(dòng)、推送、加載或保存后的數(shù)據(jù)完整性。它還帶來了更好的層共享,允許許多圖像自由地共享它們的層,即使它們不是來自同一個(gè)構(gòu)建。
通過其內(nèi)容對(duì)圖像進(jìn)行尋址,還可以讓我們更容易地檢測(cè)是否已經(jīng)下載了一些內(nèi)容。因?yàn)槲覀冇蟹珠_的圖像和層,所以您不必為原始構(gòu)建鏈中的每一個(gè)映像提取配置。我們也不需要為沒有修改文件系統(tǒng)的構(gòu)建指令創(chuàng)建層。
內(nèi)容可尋址性是新發(fā)行特性的基礎(chǔ)。圖像拉和推代碼已經(jīng)被重新加工,使用下載/上傳管理器的概念,這使得推拉圖像更加穩(wěn)定,并減輕了任何并行請(qǐng)求問題。下載管理器還會(huì)對(duì)失敗的下載進(jìn)行重試,并為并發(fā)下載提供更好的優(yōu)先級(jí)。
我們還引入了一種新的清單格式,它構(gòu)建在內(nèi)容可尋址基礎(chǔ)之上。它直接引用內(nèi)容可尋址圖像配置和層校驗(yàn)和。新的清單格式還使清單列表能夠用于針對(duì)多個(gè)體系結(jié)構(gòu)/平臺(tái)。移動(dòng)到新的清單格式將是完全透明的。
為了使新模型能夠訪問當(dāng)前映像,我們必須將它們遷移到內(nèi)容可尋址存儲(chǔ)。這意味著計(jì)算當(dāng)前數(shù)據(jù)的安全校驗(yàn)和。
當(dāng)您第一次啟動(dòng)DockerEngine 1.10時(shí),所有當(dāng)前的圖像、標(biāo)簽和容器都會(huì)自動(dòng)遷移到新的基礎(chǔ)上。在加載容器之前,守護(hù)進(jìn)程將計(jì)算當(dāng)前數(shù)據(jù)所需的所有校驗(yàn)和,完成后,所有圖像和標(biāo)記都將具有全新的安全I(xiàn)D。
雖然這是一個(gè)簡(jiǎn)單的操作,但是如果您有大量的圖像數(shù)據(jù),計(jì)算SHA 256校驗(yàn)和文件可能需要時(shí)間。平均而言,您應(yīng)該假設(shè)Migrator可以以100 MB/s的速度處理數(shù)據(jù)。在此期間,您的Docker守護(hù)進(jìn)程將無法響應(yīng)請(qǐng)求。
如果您可以接受這一次hit,那么升級(jí)Docker引擎并重新啟動(dòng)守護(hù)進(jìn)程將透明地遷移您的映像。但是,如果希望最小化守護(hù)進(jìn)程的停機(jī)時(shí)間,則可以在舊守護(hù)進(jìn)程仍在運(yùn)行時(shí)運(yùn)行遷移實(shí)用程序。
這個(gè)工具將找到所有當(dāng)前圖像并計(jì)算它們的校驗(yàn)和。升級(jí)并重新啟動(dòng)守護(hù)進(jìn)程之后,遷移圖像的校驗(yàn)和數(shù)據(jù)將已經(jīng)存在,從而使守護(hù)進(jìn)程從該計(jì)算工作中解脫出來。如果在遷移和升級(jí)之間出現(xiàn)了新的圖像,這些圖像將在升級(jí)到1.10時(shí)處理。
您可以在這里下載遷移工具。
遷移工具也可以作為Docker映像運(yùn)行。在運(yùn)行Migrator映像時(shí),需要向容器公開Docker數(shù)據(jù)目錄。如果使用默認(rèn)路徑,則會(huì)運(yùn)行:
$ docker run --rm -v /var/lib/docker:/var/lib/docker docker/v1.10-migrator
如果使用devicemapper存儲(chǔ)驅(qū)動(dòng)程序,還需要傳遞標(biāo)志。--privileged
若要使工具訪問存儲(chǔ)設(shè)備,請(qǐng)執(zhí)行以下操作。