鏡像 Docker Hub 程式庫
使用案例
如果您的環境中執行了多個 Docker 執行個體(例如多台執行 Docker 的實體或虛擬機器),每個 daemon 都會連網到 Docker 儲存庫擷取其本機不存在的映像檔。您可以執行本機註冊表鏡像,並將所有 daemon 指向該處,以避免這種額外的網路流量。
注意Docker 官方映像檔是 Docker 的智慧財產權。
替代方案
或者,如果您使用的映像檔集合範圍明確,您可以手動提取它們,然後將其推送至簡單的本機私有註冊表中。
此外,如果您的映像檔全都是內部建置的,完全不使用 Hub,則完全依賴本機註冊表是最簡單的方案。
注意事項
目前無法鏡像另一個私有註冊表。只能鏡像中央 Hub。
注意Docker Hub 的鏡像仍需遵守 Docker 的公平使用政策。
解決方案
註冊表可設定為提取快取。在此模式下,註冊表會回應所有正常的 docker pull 要求,但會在本地儲存所有內容。
在註冊表鏡像中使用註冊表存取管理 (RAM)
如果透過註冊表存取管理 (RAM) 設定限制了對 Docker Hub 的存取,即使您的註冊表鏡像中有該映像檔,您也無法提取源自 Docker Hub 的映像檔。
您將遇到以下錯誤
Error response from daemon: Access to docker.io has been restricted by your administrators.
如果您無法開放 Docker Hub 的存取權限,您可以從註冊表鏡像中手動提取,並選擇性地重新標記 (retag) 映像檔。例如:
docker pull <your-registry-mirror>[:<port>]/library/busybox
docker tag <your-registry-mirror>[:<port>]/library/busybox:latest busybox:latest
它是如何運作的?
當您第一次要求本機註冊表鏡像提供映像檔時,它會從公開的 Docker 註冊表中提取該映像檔並儲存在本機,然後再傳回給您。在隨後的請求中,本機註冊表鏡像就能直接從其自己的儲存空間中提供映像檔。
如果 Hub 上的內容變更了怎麼辦?
當嘗試使用標籤進行提取時,註冊表會檢查遠端以確保其擁有請求內容的最新版本。否則,它會擷取並快取最新內容。
我的磁碟空間呢?
在變動率高的環境中,快取中可能會累積陳舊資料。當以提取快取模式執行時,註冊表會定期移除舊內容以節省磁碟空間。後續對已移除內容的請求會觸發遠端擷取並重新進行本機快取。
為確保最佳效能並保證正確性,註冊表快取應設定為使用 filesystem 驅動程式進行儲存。
執行註冊表作為提取快取 (Pull-through cache)
執行註冊表作為提取快取的最簡單方法是執行官方的 Registry 映像檔。至少,您需要在 /etc/docker/registry/config.yml 中指定 proxy.remoteurl,如下一小節所述。
多個註冊表快取可以部署在同一個後端上。單一註冊表快取可確保並發請求不會提取重複資料,但此特性並不適用於註冊表快取叢集。
設定快取
若要將註冊表設定為以提取快取模式執行,需要在設定檔中加入 proxy 區段。
若要存取 Docker Hub 上的私有映像檔,可以提供使用者名稱和密碼。
proxy:
remoteurl: https://registry-1.docker.io
username: [username]
password: [password]警告如果您指定了使用者名稱和密碼,請務必了解該使用者在 Docker Hub 上可存取的私有資源將會在您的鏡像中變得可用。如果您希望這些資源保持私有,您必須實作驗證以保護您的鏡像!
警告為了讓排程器清理舊項目,必須在註冊表設定中啟用
delete。
設定 Docker 守護程式
手動啟動 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它是在告訴您該檔案尚未存在於本機快取中,並且正從上游提取。