您好,登錄后才能下訂單哦!
本篇內容介紹了“如何為Docker鏡像提供代理/緩存功能”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Sonatype Nexus OSS 3.15.0(或更高版本)
Docker 17.09(或更高版本)
我設置了兩個基于 Ubuntu LTS 版本的虛擬機,一個運行了Sonatype Nexus 3.14.0 的 Docker 容器(這個機器稱作docker-host),另一個只運行 Docker(稱作docker-client)。
請注意一些網絡配置或許跟你的配置不一樣(例如 IP)但是方法是相同的。同樣,請注意那臺運行 Nexus OSS 的機器(docker-host)需要有訪問互聯網的權限。
[更新,2018年10月] 請使用 Nexus 3.15 或者更高版本因為從 3.14 到 3.15 中間修復了多個 CVE 的漏洞問題。
我們在 Nexus 中至少配置 3 樣東西,給倉庫命名,以及一些安全配置。請記住在公司中不要按照這些方法來做,因為可能會考慮到一些性能問題,比如修改 Blobstore 配置。
使用有管理員權限的賬號登錄到你的 Nexus 實例,轉到 Admin 頁面。點擊 Repository -> Repositories,然后點擊 ‘Create repository’。
選擇‘docker(proxy)’然后開始配置。
你需要為這個 Proxy 添加一個唯一的名字,確保它是 ‘Oneline’ 狀態。
為了避免我們在危險的邊緣試探,我們不會為這個 Repository 提供 V1 API(勾掉 ‘Enable Docker V1 API’ 選項),但我們是允許匿名訪問的權限的。
這非常重要,所以再次強調下:
勾掉 ‘Force Basic Authentication’。
這會允許我們的 Docker Clients 在不需要提供憑據的前提下訪問我們的 Repository。這是最簡單的方法了!
在 ‘Proxy’ 下面輸入如下信息:
Remote storage:https://registry-1.docker.io/
**Docker Index:**Use Docker Hub
所有的配置信息如下所示。
該部分是可選環節,這要取決于在 Docker Cloud 中怎樣訪問你的私有倉庫。
仍舊是創建一個唯一的名字,設置為 ‘oneline’,禁止 V1 API,允許匿名訪問,在 ‘Proxy’ 下面輸入如下信息:
Remote storage:https://registry-1.docker.io
**Docker Index:**Use proxy registry
不同的地方是在頁面底部的Authentication-部分,你需要在該位置輸入可以訪問 Docker Cloud 私有倉庫的用戶名跟密碼。
所有配置如下所示。
組可以為多個倉庫提供一個單獨的權限。這是 Docker 所不具備的功能,當 Docker Client 嘗試訪問 Docker Hub 時,這是唯一訪問的入口。
當我們不想讓它只包括 Docker Hub 還想包括其他我們想要的倉庫(例如 私有的 Docker Cloud 倉庫、我們內部局域網托管的 Docker 倉庫,等等)時,所有檢索到的 Docker 鏡像都可以通過 Nexus 傳輸,不需要 Client 知道去哪里查看哪個鏡像。
Repository Group 僅僅是一個 Repositories 的集合,但是我們需要 Docker Client 能夠與它通信。
添加一個唯一的名字,設置為 ‘oneline’,禁用 V1 API,允許匿名訪問權限。
我們需要配置一個 Repository Connector,它為 Repository Group 存儲的內容提供了可訪問的端口。我選擇使用 8181(Nexus 默認端口為8081)并且只配置 HTTP 因為我真的太懶了不想配置 HTTPS 的了。:)
你需要選擇 Docker Repository(一個托管的倉庫或者一個代理亦或為另一個組)作為這個 Group 需要的 Members,然后保存配置。
所有的配置如下所示。
為了確保匿名權限可以正常訪問我們的倉庫,我們需要在 Nexus 中添加‘Docker Bearer Token Realm’ 到 Active Realms 中。
切換到 Administrator -> Scurity -> Realms 然后選擇 ‘Available’ Realms 列表中的 Realm。點擊右側的箭頭按鈕然后保存。
齊活兒!
現在我們的 Nexus 實例已經成功配置了,需要確保我們的 Docker Client 可以從這個地方獲取所有的 Docker 鏡像,而非互聯網。
這需要我們配置 Docker Client Daemon,能讓它們將 Nexus 作為鏡像源。還有,因為它使用的是 HTTP 而非 HTTPS 我們需要 Docker 能夠理解該協議是可以的并且可以通過 Nexus 查看鏡像。
使用 root 用戶,創建或者是編輯下面的文件:/etc/docker/daemon.json
{ "insecure-registries": ["10.0.2.2:8181"], "registry-mirrors": ["http://10.0.2.2:8181"] }
需要注意的是,這會跟你配置的有較大差別,因為我運行的虛擬機。這個 IP 是我主機上 VM1 出來映射用來解決 VM2 上的問題的 IP。
如果需要的話,你可以安全的將你的 主機名或者 IP 替換為 10.0.2.2。請做全量替換。
文件保存后,Docker 需要重啟。如果成功: docker info 命令信息會如下圖所示:
Insecure Registries: 10.0.2.2:8181 127.0.0.0/8 Registry Mirrors: http://10.0.2.2:8181/
現在你可以在 Docker Client 不需要訪問互聯網的前提下從 Nexus 獲取 Docker 鏡像了。
docker pull mysql
它會在 Nexus 的 Docker Group Repository 中顯示出來,你會看到緩存的 blobs,標簽和清單。
“如何為Docker鏡像提供代理/緩存功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。