Docker多鏡像倉庫緩存代理方案

起因

  • 在最開始學(xué)習(xí)openstack的過程中一直希望有更方便的openstack部署方法钟鸵,無論在單機(jī)測試還是生產(chǎn)環(huán)境
  • 現(xiàn)在經(jīng)過openstack社區(qū)的蓬勃發(fā)展兢哭,出現(xiàn)了一系列openstack on k8s以及openstack on docker部署項(xiàng)目
  • 然而無論是部署kubernetes(k8s.gcr.io)還是部署openstack(quay.io/docker.io)所需的鏡像都來自海外
  • 此外在生產(chǎn)環(huán)境中集群化部署時(shí)每臺節(jié)點(diǎn)都需要拉取所需的鏡像聋亡,不過其中的絕大部分都是重復(fù)的
  • 以及若要部署相同版本openstack的多個(gè)集群時(shí)汰蓉,也會(huì)涉及鏡像需要重新拉取耗時(shí)耗力的問題
  • 因此本文的多鏡像倉庫緩存代理方案主要目的有以下三點(diǎn):
    1. 鏡像拉取加速
    2. 拉取同時(shí)緩存
      • 同時(shí)可將緩存拷貝遷移重復(fù)使用
    3. 一站式支持多個(gè)常用的鏡像倉庫珊佣,如
      • registry-1.docker.io
      • k8s.gcr.io
      • gcr.io
      • quay.io
  • 方案地址:https://github.com/ohmyadd/mirror

鏡像加速功能

  • 不用我多說了
  • 方案選擇上有兩個(gè)點(diǎn):
  • 從哪來
    • 其實(shí)就是配置在OUTPUT 還是 PREROUTING的問題
    • 最后因?yàn)槿萜骶W(wǎng)絡(luò)的特殊性和方案簡潔性,選擇了OUTPUT惯退,所有容器共用同一個(gè)網(wǎng)絡(luò)namespace
  • 怎么走:
    • TCP可以走REDIRECT赌髓,但不能走TPROXY
    • UDP可以走TUNNEL,也可以走TPROXY催跪,但不能走REDIRECT
    • 最后綜合選擇了TCP(REDIRECT) + UDP(TUNNEL)

鏡像緩存功能

  • 鏡像緩存功能由docker官網(wǎng)提供的registry鏡像提供
  • 官網(wǎng)registry鏡像的使用和配置锁蠕,在docker官方文檔中都詳細(xì)介紹
  • registry的配置文件就是一個(gè)yaml格式的文件,想要修改其配置有兩種方式
    1. 寫好整個(gè)yaml然后掛載進(jìn)容器
    2. 通過環(huán)境變量配置單個(gè)配置項(xiàng)懊蒸,如REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY配置如下代碼塊中的配置項(xiàng)
      • 可以看出規(guī)則是以REGITRY_開頭荣倾,后面配置項(xiàng)的路徑以_替換.,并寫英文全部大寫
storage:
  filesystem:
    rootdirectory: /var/lib/registry
  • 有關(guān)鏡像緩存代理的配置非常簡單榛鼎,只有三項(xiàng):
    • remoteurl: 想要代理的鏡像倉庫的地址逃呼,必填
    • username password:連接本代理使用的用戶名密碼鳖孤,可選
    • 根據(jù)上面的配置項(xiàng)轉(zhuǎn)換規(guī)則者娱,只需要把目標(biāo)倉庫地址寫在REGISTRY_PROXY_REMOTEURL環(huán)境變量即可

多庫集成功能

  • 方案中的鏡像緩存代理都沒有使用ssl,因此四個(gè)倉庫代理都會(huì)開在80端口
  • 因此我們需要一個(gè)根據(jù)url路徑選擇反代對象的功能苏揣,這個(gè)是nginx本行
  • 所以寫好一個(gè)nginx反代配置黄鳍,掛在進(jìn)官方nginx鏡像就好了
  • 最后如果需要添加新的倉庫代理的話,記得在nginx.conf里面也添加相應(yīng)的配置

How-To說明

  • 如何使用鏡像緩存代理

    • 本節(jié)指當(dāng)鏡像代理啟動(dòng)好后平匈,內(nèi)網(wǎng)其他主機(jī)如何使用本機(jī)提供的服務(wù)
    • 因此本節(jié)配置都是寫在其他使用本機(jī)服務(wù)的主機(jī)
    • docker官方倉庫:
      • 內(nèi)容:"registry-mirrors": ["http://10.122.1.164"]
      • 路徑:/etc/docker/daemon.json
    • 其他倉庫:
      • 內(nèi)容:"insecure-registries": ["k8s.gcr.io", "quay.io", "gcr.io"]
      • 路徑:/etc/docker/daemon.json
      • 需要在集群DNS或本機(jī)hosts文件中把這三個(gè)域名指向緩存代理的IP地址
    • 記得把IP替換成你的IP
    • 修改配置后需要重啟docker
    • 最后daemon.json可以總結(jié)為{"mtu": 1350, "registry-mirrors": ["http://10.122.1.164"], "insecure-registries": ["k8s.gcr.io", "quay.io", "gcr.io"]}
  • 如何遷移鏡像的緩存

    • 本文方案的所有registry的數(shù)據(jù)文件全部掛載在/var/lib/registry
    • 因此無論是備份還是復(fù)制遷移框沟,只需要操作/var/lib/registry,再啟動(dòng)新的compose增炭,就可以使用之前緩存好的鏡像文件了

Finally

  • docker-compose中的bridge類型network是可選的
    • 之所以添加是因?yàn)槲覀兊讓泳W(wǎng)絡(luò)的mtu不是1500忍燥,而是由于底層是overlay的網(wǎng)絡(luò)而mtu減小的網(wǎng)絡(luò)
    • 因此必須在容器網(wǎng)絡(luò)中配置mtu相應(yīng)的減小,不然傳輸大文件時(shí)會(huì)丟數(shù)據(jù)包
    • 底層網(wǎng)絡(luò)是物理以太網(wǎng)絡(luò)時(shí)就不是必須修改mtu隙姿,但配置的小一點(diǎn)也沒有問題
    • 如果要?jiǎng)h除這個(gè)network的話梅垄,記得把容器連接網(wǎng)絡(luò)的配置也刪掉
  • 一個(gè)有意思的事情是
    • 去年的時(shí)候(2019)quay.io還不支持v2版本的manifest
    • 所以其他三個(gè)倉庫使用2.7版本的registry,而quay.io只能用2.3.0版本的
    • 當(dāng)時(shí)被quay.io著實(shí)惡心了一下输玷,然而2.3.0版本是proxy功能 與 manifest v1功能的交集版本
    • 所以又因?yàn)樽约红`機(jī)一動(dòng)找到了這個(gè)版本作為解決方式很開心哈哈
    • 不過都已經(jīng)是過去時(shí)了队丝,現(xiàn)在(2020)quay.io已經(jīng)支持了manifest v2靡馁,只是在這里小小記錄一下
  • 再次感謝開源世界
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市机久,隨后出現(xiàn)的幾起案子臭墨,更是在濱河造成了極大的恐慌,老刑警劉巖膘盖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胧弛,死亡現(xiàn)場離奇詭異,居然都是意外死亡衔憨,警方通過查閱死者的電腦和手機(jī)叶圃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來践图,“玉大人掺冠,你說我怎么就攤上這事÷氲常” “怎么了德崭?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長揖盘。 經(jīng)常有香客問我眉厨,道長,這世上最難降的妖魔是什么兽狭? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任憾股,我火速辦了婚禮,結(jié)果婚禮上箕慧,老公的妹妹穿的比我還像新娘服球。我一直安慰自己,他們只是感情好颠焦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布斩熊。 她就那樣靜靜地躺著,像睡著了一般伐庭。 火紅的嫁衣襯著肌膚如雪粉渠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天圾另,我揣著相機(jī)與錄音霸株,去河邊找鬼。 笑死集乔,一個(gè)胖子當(dāng)著我的面吹牛去件,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼箫攀,長吁一口氣:“原來是場噩夢啊……” “哼肠牲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起靴跛,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤缀雳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后梢睛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肥印,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年绝葡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了深碱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡藏畅,死狀恐怖敷硅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布排作,位于F島的核電站,受9級特大地震影響殖演,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望澡屡。 院中可真熱鬧,春花似錦咐旧、人聲如沸驶鹉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梁厉。三九已至辜羊,卻和暖如春踏兜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背八秃。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工碱妆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昔驱。 一個(gè)月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓疹尾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子纳本,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359