溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何為Docker鏡像提供代理/緩存功能

發(fā)布時(shí)間:2021-09-01 17:50:59 來(lái)源:億速云 閱讀:201 作者:chen 欄目:云計(jì)算

本篇內(nèi)容介紹了“如何為Docker鏡像提供代理/緩存功能”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

需要的軟件

  • Sonatype Nexus OSS 3.15.0(或更高版本)

  • Docker 17.09(或更高版本)

我設(shè)置了兩個(gè)基于 Ubuntu LTS 版本的虛擬機(jī),一個(gè)運(yùn)行了Sonatype Nexus 3.14.0 的 Docker 容器(這個(gè)機(jī)器稱作docker-host),另一個(gè)只運(yùn)行 Docker(稱作docker-client)。

請(qǐng)注意一些網(wǎng)絡(luò)配置或許跟你的配置不一樣(例如 IP)但是方法是相同的。同樣,請(qǐng)注意那臺(tái)運(yùn)行 Nexus OSS 的機(jī)器(docker-host)需要有訪問(wèn)互聯(lián)網(wǎng)的權(quán)限。

[更新,2018年10月] 請(qǐng)使用 Nexus 3.15 或者更高版本因?yàn)閺?3.14 到 3.15 中間修復(fù)了多個(gè) CVE 的漏洞問(wèn)題。

配置 Nexus OSS

我們?cè)?Nexus 中至少配置 3 樣?xùn)|西,給倉(cāng)庫(kù)命名,以及一些安全配置。請(qǐng)記住在公司中不要按照這些方法來(lái)做,因?yàn)榭赡軙?huì)考慮到一些性能問(wèn)題,比如修改 Blobstore 配置。

為 Docker Hub 添加 Docker Proxy Repository

使用有管理員權(quán)限的賬號(hào)登錄到你的 Nexus 實(shí)例,轉(zhuǎn)到 Admin 頁(yè)面。點(diǎn)擊 Repository -> Repositories,然后點(diǎn)擊 ‘Create repository’。

如何為Docker鏡像提供代理/緩存功能

選擇‘docker(proxy)’然后開(kāi)始配置。

如何為Docker鏡像提供代理/緩存功能

你需要為這個(gè) Proxy 添加一個(gè)唯一的名字,確保它是 ‘Oneline’ 狀態(tài)。

為了避免我們?cè)谖kU(xiǎn)的邊緣試探,我們不會(huì)為這個(gè) Repository 提供 V1 API(勾掉 ‘Enable Docker V1 API’ 選項(xiàng)),但我們是允許匿名訪問(wèn)的權(quán)限的。

這非常重要,所以再次強(qiáng)調(diào)下:

勾掉 ‘Force Basic Authentication’。

這會(huì)允許我們的 Docker Clients 在不需要提供憑據(jù)的前提下訪問(wèn)我們的 Repository。這是最簡(jiǎn)單的方法了!

在 ‘Proxy’ 下面輸入如下信息:

Remote storage:https://registry-1.docker.io/

**Docker Index:**Use Docker Hub

所有的配置信息如下所示。

如何為Docker鏡像提供代理/緩存功能

為 Private Repository 添加 Docker Proxy Repository(可選)

該部分是可選環(huán)節(jié),這要取決于在 Docker Cloud 中怎樣訪問(wèn)你的私有倉(cāng)庫(kù)。

仍舊是創(chuàng)建一個(gè)唯一的名字,設(shè)置為 ‘oneline’,禁止 V1 API,允許匿名訪問(wèn),在 ‘Proxy’ 下面輸入如下信息:

Remote storage:https://registry-1.docker.io

**Docker Index:**Use proxy registry

不同的地方是在頁(yè)面底部的Authentication-部分,你需要在該位置輸入可以訪問(wèn) Docker Cloud 私有倉(cāng)庫(kù)的用戶名跟密碼。

所有配置如下所示。

如何為Docker鏡像提供代理/緩存功能

為 Docker Repository 添加 Group

組可以為多個(gè)倉(cāng)庫(kù)提供一個(gè)單獨(dú)的權(quán)限。這是 Docker 所不具備的功能,當(dāng) Docker Client 嘗試訪問(wèn) Docker Hub 時(shí),這是唯一訪問(wèn)的入口。

當(dāng)我們不想讓它只包括 Docker Hub 還想包括其他我們想要的倉(cāng)庫(kù)(例如 私有的 Docker Cloud 倉(cāng)庫(kù)、我們內(nèi)部局域網(wǎng)托管的 Docker 倉(cāng)庫(kù),等等)時(shí),所有檢索到的 Docker 鏡像都可以通過(guò) Nexus 傳輸,不需要 Client 知道去哪里查看哪個(gè)鏡像。

Repository Group 僅僅是一個(gè) Repositories 的集合,但是我們需要 Docker Client 能夠與它通信。

添加一個(gè)唯一的名字,設(shè)置為 ‘oneline’,禁用 V1 API,允許匿名訪問(wèn)權(quán)限。

我們需要配置一個(gè) Repository Connector,它為 Repository Group 存儲(chǔ)的內(nèi)容提供了可訪問(wèn)的端口。我選擇使用 8181(Nexus 默認(rèn)端口為8081)并且只配置 HTTP 因?yàn)槲艺娴奶珣辛瞬幌肱渲?HTTPS 的了。:)

你需要選擇 Docker Repository(一個(gè)托管的倉(cāng)庫(kù)或者一個(gè)代理亦或?yàn)榱硪粋€(gè)組)作為這個(gè) Group 需要的 Members,然后保存配置。

所有的配置如下所示。

如何為Docker鏡像提供代理/緩存功能

配置安全設(shè)置

為了確保匿名權(quán)限可以正常訪問(wèn)我們的倉(cāng)庫(kù),我們需要在 Nexus 中添加‘Docker Bearer Token Realm’ 到 Active Realms 中。

切換到 Administrator -> Scurity -> Realms 然后選擇 ‘Available’ Realms 列表中的 Realm。點(diǎn)擊右側(cè)的箭頭按鈕然后保存。

如何為Docker鏡像提供代理/緩存功能

齊活兒!

配置 Docker Client

現(xiàn)在我們的 Nexus 實(shí)例已經(jīng)成功配置了,需要確保我們的 Docker Client 可以從這個(gè)地方獲取所有的 Docker 鏡像,而非互聯(lián)網(wǎng)。

這需要我們配置 Docker Client Daemon,能讓它們將 Nexus 作為鏡像源。還有,因?yàn)樗褂玫氖?HTTP 而非 HTTPS 我們需要 Docker 能夠理解該協(xié)議是可以的并且可以通過(guò) Nexus 查看鏡像。

使用 root 用戶,創(chuàng)建或者是編輯下面的文件:/etc/docker/daemon.json

{
        "insecure-registries": ["10.0.2.2:8181"],
        "registry-mirrors": ["http://10.0.2.2:8181"]
}

需要注意的是,這會(huì)跟你配置的有較大差別,因?yàn)槲疫\(yùn)行的虛擬機(jī)。這個(gè) IP 是我主機(jī)上 VM1 出來(lái)映射用來(lái)解決 VM2 上的問(wèn)題的 IP。

如果需要的話,你可以安全的將你的 主機(jī)名或者 IP 替換為 10.0.2.2。請(qǐng)做全量替換。

文件保存后,Docker 需要重啟。如果成功: docker info 命令信息會(huì)如下圖所示:

如何為Docker鏡像提供代理/緩存功能

Insecure Registries:
 10.0.2.2:8181
 127.0.0.0/8
Registry Mirrors:
 http://10.0.2.2:8181/

大功告成!

現(xiàn)在你可以在 Docker Client 不需要訪問(wèn)互聯(lián)網(wǎng)的前提下從 Nexus 獲取 Docker 鏡像了。

docker pull mysql

如何為Docker鏡像提供代理/緩存功能

它會(huì)在 Nexus 的 Docker Group Repository 中顯示出來(lái),你會(huì)看到緩存的 blobs,標(biāo)簽和清單。

如何為Docker鏡像提供代理/緩存功能

“如何為Docker鏡像提供代理/緩存功能”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI