將 Registry 作為 Pull Through Cache
使用案例
如果您的環境中有多個 Docker 執行個體,例如多個執行 Docker 的實體或虛擬機器,每個 Daemon 都會連到網際網路並從 Docker 儲存庫擷取本地沒有的映像檔。您可以執行本地 Registry 鏡像,並將所有 Daemon 指向該處,以避免額外的網際網路流量。
注意
Docker 官方映像檔是 Docker 的智慧財產權。
替代方案
或者,如果您使用的映像檔集合有明確的界定,您可以手動提取它們,然後將它們推送到一個簡單的本地私有 Registry。
此外,如果您的映像檔都是內部建置的,完全不使用 Hub 並且完全依賴您的本地 Registry,這是最簡單的情況。
陷阱
目前無法鏡像另一個私有 Registry。只有中央 Hub 可以被鏡像。
注意
Docker Hub 的鏡像仍然受 Docker 的合理使用政策約束。
解決方案
Registry 可以設定為 Pull Through Cache。在此模式下,Registry 會回應所有正常的 Docker Pull 請求,但會將所有內容儲存在本地。
運作方式
第一次從本地 Registry 鏡像請求映像檔時,它會從公開 Docker Registry 提取映像檔並將其儲存在本地,然後再將其交給您。後續請求時,本地 Registry 鏡像可以從其自身的儲存空間提供映像檔。
如果 Hub 上的內容發生變化怎麼辦?
當嘗試使用標籤 Pull 時,Registry 會檢查遠端以確保它是否具有請求內容的最新版本。否則,它會擷取並快取最新內容。
我的磁碟空間怎麼辦?
在高流失率的環境中,過時的資料可能會在快取中累積。當作為 Pull Through Cache 執行時,Registry 會定期移除舊內容以節省磁碟空間。後續對已移除內容的請求將導致遠端擷取和本地重新快取。
為了確保最佳效能並保證正確性,應將 Registry 快取設定為使用 filesystem
驅動程式進行儲存。
將 Registry 作為 Pull Through Cache 執行
將 Registry 作為 Pull Through Cache 執行的最簡單方法是執行官方的 Registry 映像檔。至少,您需要在 /etc/docker/registry/config.yml
中指定 proxy.remoteurl
,如下一小節所述。
可以在同一個後端部署多個 Registry 快取。單個 Registry 快取可確保並行請求不會提取重複的資料,但此屬性不適用於 Registry 快取叢集。
注意
使用 Docker Hub 時,所有付費 Docker 訂閱每天限制為 5000 次提取。如果您需要更多提取次數,可以購買增強型服務帳戶附加元件。請參閱服務帳戶以了解更多詳細資訊。
設定快取
要將 Registry 設定為以 Pull Through Cache 方式執行,需要在設定檔中新增 proxy
區段。
要存取 Docker Hub 上的私有映像檔,可以提供使用者名稱和密碼。
proxy:
remoteurl: https://registry-1.docker.io
username: [username]
password: [password]
警告
如果您指定使用者名稱和密碼,務必瞭解此使用者可存取 Docker Hub 的私有資源將會在您的鏡像上公開。如果您希望這些資源保持私有,則必須透過實作身份驗證來保護您的鏡像!
警告
為了讓排程器清除舊項目,必須在 Registry 設定中啟用
delete
。
設定 Docker Daemon
手動啟動 dockerd
時傳遞 --registry-mirror
選項,或編輯 /etc/docker/daemon.json
並新增 registry-mirrors
鍵和值,以使變更永久生效。
{
"registry-mirrors": ["https://<my-docker-mirror-host>"]
}
儲存檔案並重新載入 Docker 以使變更生效。
注意
一些看似錯誤的日誌訊息實際上是資訊訊息。
檢查
level
欄位,以判斷訊息是警告錯誤還是提供資訊。例如,以下記錄訊息提供的是資訊:time="2017-06-02T15:47:37Z" level=info msg="error statting local store, serving from upstream: unknown blob" go.version=go1.7.4
它告訴您,本地快取中尚不存在該檔案,正在從上游提取。