一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Google container registry 同步

 louy2 2018-12-30

一、起因

玩 Kubenretes 的基本都很清楚,Kubernetes 很多組件的鏡像全部托管在 gcr.io 這個(gè)域名下(現(xiàn)在換成了 k8s.gcr.io);由于眾所周知的原因,這個(gè)網(wǎng)站在國(guó)內(nèi)是不可達(dá)的;當(dāng)時(shí)由于 Docker Hub 提供了 Auto Build 功能,機(jī)智的想到一個(gè)解決辦法;就是利用 Docker Hub 的 Auto Build,創(chuàng)建只有一行的 Dockerfile,里面就一句 FROM gcr.io/xxxx,然后讓 Docker Hub 幫你構(gòu)建完成后拉取即可

這種套路的基本方案就是利用一個(gè)第三方公共倉(cāng)庫(kù),這個(gè)倉(cāng)庫(kù)可以訪問(wèn)不可達(dá)的 gcr.io,然后生成鏡像,我們?cè)購(gòu)倪@個(gè)倉(cāng)庫(kù) pull 即可;為此我創(chuàng)建了一個(gè) Github 倉(cāng)庫(kù)(docker-library);時(shí)隔這么久以后,我猜想大家都已經(jīng)有了這種自己的倉(cāng)庫(kù)…不過(guò)最近發(fā)現(xiàn)這個(gè)倉(cāng)庫(kù)仍然在有人 fork…

為了一勞永逸的解決這個(gè)問(wèn)題,只能擼點(diǎn)代碼解決這個(gè)問(wèn)題了

二、倉(cāng)庫(kù)使用

為了解決上述問(wèn)題,我寫了一個(gè) gcrsync 工具,并且借助 Travis CI 讓其每天自動(dòng)運(yùn)行,將所有用得到的 gcr.io 下的鏡像同步到了 Docker Hub

目前對(duì)于一個(gè) gcr.io 下的鏡像,可以直接替換為 gcrxio 用戶名,然后從 Docker Hub 直接拉取,以下為一個(gè)示例:

# 原始命令
docker pull k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0

# 使用同步倉(cāng)庫(kù)
docker pull gcrxio/kubernetes-dashboard-amd64:v1.10.0

三、同步細(xì)節(jié)說(shuō)明

為了保證同步鏡像的安全性,同步工具已經(jīng)開(kāi)源在 gcrsync 倉(cāng)庫(kù),同步細(xì)節(jié)如下:

  • 工具每天由 Travis CI 自動(dòng)進(jìn)行一次 build,然后進(jìn)行推送
  • 工具每次推送前首先 clone 元數(shù)據(jù)倉(cāng)庫(kù) gcr
  • 工具每次推送首先獲取 gcr.io 指定 namespace 下的所有鏡像(namesapce.travis.yml script 段定義)
  • 獲取 gcr.io 鏡像后,再讀取元數(shù)據(jù)倉(cāng)庫(kù)(gcr) 中與 namesapce 同名文件(實(shí)際是個(gè) json)
  • 接著對(duì)比雙方差異,得出需要同步的鏡像
  • 最后通過(guò) API 調(diào)用本地的 docker 進(jìn)行 pull、tag、push 操作,完成鏡像推送
  • 所有鏡像推送成功后,更新元數(shù)據(jù)倉(cāng)庫(kù)內(nèi) namespace 對(duì)應(yīng)的 json 文件,最后在生成 CHANGELOG,執(zhí)行 git push 到遠(yuǎn)程元數(shù)據(jù)倉(cāng)庫(kù)

綜上所述,如果想得知具體 gcrxio 用戶下都有那些鏡像,可直接訪問(wèn) gcr 元數(shù)據(jù)倉(cāng)庫(kù),查看對(duì)應(yīng) namesapce 同名的 json 文件即可;每天增量同步的信息會(huì)追加到 gcr 倉(cāng)庫(kù)的 CHANGELOG.md 文件中

四、gcrsync

為方便審查鏡像安全性,以下為 gcrsync 工具的代碼簡(jiǎn)介,代碼倉(cāng)庫(kù)文件如下:

?  gcrsync git:(master) tree -I vendor
.
├── CHANGELOG.md
├── Gopkg.lock
├── Gopkg.toml
├── LICENSE
├── README.md
├── cmd
│   ├── compare.go
│   ├── monitor.go
│   ├── root.go
│   ├── sync.go
│   └── test.go
├── dist
│   ├── gcrsync_darwin_amd64
│   ├── gcrsync_linux_386
│   └── gcrsync_linux_amd64
├── main.go
└── pkg
    ├── gcrsync
    │   ├── docker.go
    │   ├── gcr.go
    │   ├── git.go
    │   ├── registry.go
    │   └── sync.go
    └── utils
        └── common.go

cmd 目錄下為標(biāo)準(zhǔn)的 cobra 框架生成的子命令文件,其中每個(gè)命令包含了對(duì)應(yīng)的 flag 設(shè)置,如 namesapce、proxy 等;pkg/gcrsync 目錄下的文件為核心代碼:

  • docker.go 包含了對(duì)本地 docker daemon API 調(diào)用,包括 pull、tag、push 操作
  • gcr.go 包含了對(duì) gcr.io 指定 namespace 下鏡像列表獲取操作
  • registry.go 包含了對(duì) Docker Hub 下指定用戶(默認(rèn) gcrxio)的鏡像列表獲取操作(其主要用于首次執(zhí)行 compare 命令生成 json 文件)
  • sync.go 為主要的程序入口,其中包含了對(duì)其他文件內(nèi)方法的調(diào)用,設(shè)置并發(fā)池等

五、其他說(shuō)明

該倉(cāng)庫(kù)不保證鏡像實(shí)時(shí)同步,默認(rèn)每天同步一次(由 Travis CI 執(zhí)行),如有特殊需求,如增加 namesapce 等請(qǐng)開(kāi)啟 issue;最后,請(qǐng)不要再 fork docker-library 這個(gè)倉(cāng)庫(kù)了

轉(zhuǎn)載請(qǐng)注明出處,本文采用 CC4.0 協(xié)議授權(quán)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产福利一区二区三区四区| 欧美亚洲美女资源国产| 少妇人妻中出中文字幕| 午夜精品久久久免费视频| 懂色一区二区三区四区| 久久精品国产99精品亚洲| 婷婷色国产精品视频一区| 国产午夜福利在线免费观看| 亚洲高清中文字幕一区二区三区| 久一视频这里只有精品| 亚洲最新中文字幕在线视频| 欧美日韩国产免费看黄片| 熟妇人妻av中文字幕老熟妇| av免费视屏在线观看| 欧美成人久久久免费播放| 国产无摭挡又爽又色又刺激| 国产丝袜极品黑色高跟鞋| 欧美日韩人妻中文一区二区| 神马午夜福利一区二区| 亚洲精品国男人在线视频| 黄色日韩欧美在线观看| 亚洲熟女精品一区二区成人| 色欧美一区二区三区在线| 亚洲欧美日韩中文字幕二欧美 | 亚洲欧洲成人精品香蕉网| 国产高清视频一区不卡| 精品国产亚洲av成人一区| 91麻豆精品欧美一区| 色婷婷中文字幕在线视频| 国产精品伦一区二区三区四季| 国产精品久久精品毛片| 成人午夜激情免费在线| 国产日本欧美特黄在线观看| 白丝美女被插入视频在线观看| 日本深夜福利视频在线| 亚洲黑人精品一区二区欧美| 国产av熟女一区二区三区四区| 免费观看一区二区三区黄片| 高清国产日韩欧美熟女| 殴美女美女大码性淫生活在线播放 | 91人妻丝袜一区二区三区|