映象 Docker Hub 庫
用例
如果在您的環境中運行了多個 Docker 例項(例如,多臺物理機或虛擬機器都執行 Docker),每個守護程序都會連線到網際網路並從 Docker 倉庫獲取本地沒有的映象。您可以執行一個本地 Registry 映象並將所有守護程序指向那裡,以避免額外的網際網路流量。
注意
Docker 官方映象屬於 Docker 的智慧財產權。
替代方案
另一種方法是,如果您使用的映象集界限明確,您可以簡單地手動拉取它們並將其推送到一個簡單的本地私有 Registry。
此外,如果您的映象都是內部構建的,完全不使用 Hub,而完全依賴您的本地 Registry,這是最簡單的場景。
注意事項
目前無法映象另一個私有 Registry。只能映象中心 Hub。
注意
Docker Hub 映象仍然受 Docker 合理使用政策 的約束。
解決方案
Registry 可以配置為拉取快取。在這種模式下,Registry 響應所有正常的 docker pull 請求,但會將所有內容儲存在本地。
工作原理
您第一次從本地 Registry 映象請求映象時,它會從公共 Docker Registry 拉取映象並將其儲存在本地,然後返回給您。隨後的請求,本地 Registry 映象就能夠從其自身儲存提供映象。
如果 Hub 上的內容發生變化怎麼辦?
使用標籤嘗試拉取時,Registry 會檢查遠端倉庫,以確保它具有請求內容的最新版本。否則,它會獲取並快取最新內容。
我的磁碟空間怎麼辦?
在高流失率環境中,快取中可能會累積陳舊資料。作為拉取快取執行時,Registry 會定期刪除舊內容以節省磁碟空間。隨後對已刪除內容的請求會觸發遠端獲取並重新快取到本地。
為了確保最佳效能和保證正確性,Registry 快取應配置為使用 filesystem
驅動程式進行儲存。
執行 Registry 作為拉取快取
將 Registry 作為拉取快取執行的最簡單方法是執行官方 Registry 映象。至少,您需要在 /etc/docker/registry/config.yml
中指定 proxy.remoteurl
,如下一小節所述。
可以在同一個後端上部署多個 Registry 快取。單個 Registry 快取確保併發請求不會拉取重複資料,但對於 Registry 快取叢集而言則不適用。
配置快取
要將 Registry 配置為拉取快取執行,需要在配置檔案中新增一個 proxy
部分。
要訪問 Docker Hub 上的私有映象,可以提供使用者名稱和密碼。
proxy:
remoteurl: https://registry-1.docker.io
username: [username]
password: [password]
警告
如果您指定使用者名稱和密碼,非常重要的一點是,此使用者在 Docker Hub 上有權訪問的私有資源將在您的映象上可用。如果您希望這些資源保持私有,則必須透過實現身份驗證來保護您的映象!
警告
要使排程程式清除舊條目,必須在 Registry 配置中啟用
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
它告訴您該檔案在本地快取中尚不存在,正在從上游拉取。