基于證書訪問的Docker Registry的搭建

楔子

我們一般測試開發(fā)的時候嫌套,都習(xí)慣于直接從公共鏡像倉庫hub.docker.com拉取所需鏡像薯鳍,但是實際生產(chǎn)環(huán)境中可能涉及自建鏡像和網(wǎng)絡(luò)等各方面的原因富寿,這個時候或許預(yù)先搭建自己的鏡像倉庫可能會更方便些见秽,如下就來講講基于證書訪問的docker registry的搭建流程。

創(chuàng)建自簽名證書

首先桅打,不管是Registry客戶端還是服務(wù)器端都默認已經(jīng)安裝docker是嗜、openssl等工具轻纪。另外這兒Registry Server和客戶端是一臺主機且IP是10.0.2.15,域名vienfu.dockerhub.com叠纷,因此要做域名的解析配置:

echo "10.0.2.15 vienfu.dockerhub.com" >> /etc/hosts

然后開始創(chuàng)建自簽名證書:

mkdir -p /root/certs.d
cd /root/certs.d
openssl req -newkey rsa:2048 -nodes -sha256 -keyout ./domain.key -x509 -days 365 -out ./domain.crt  # 根據(jù)提示依次填入所需信心,注意Common Name處要填入之前被解析的域名vienfu.dockerhub.com

# 客戶端證書拷貝
mkdir -p /etc/docker/certd.d/vienfu.dockerhub.com:5000
cp /root/certs.d/domain.crt /etc/docker/certd.d/vienfu.dockerhub.com:5000/ca.crt

# 如果后續(xù)欲通過curl證書訪問registry接口潦嘶,還需要做如下操作:
cat /root/certs.d/domain.crt >> /etc/ssl/certs/ca-certificates.crt

以上所有操作完成后涩嚣,重啟dockersystemctl restart docker

創(chuàng)建Registry容器

首先,可以預(yù)先拉取registry鏡像:

docker pull registry:2

如果考慮到持久化和鏡像的刪除問題掂僵,可以預(yù)先做如下操作:

mkdir -p /root/docker_image_mgr/registry

cat << EOF >> /root/docker_image_mgr/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
  delete:
    enabled: true  # 其中delete.enabled是為鏡像刪除設(shè)置的字段
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
EOF

啟動registry容器:

docker run -d -p 5000:5000 --name my-registry -v /root/docker_image_mgr/registry:/var/lib/registry -v /root/docker_image_mgr/config.yml:/etc/docker/config.yml -v /root/certs.d:/root -e REGISTRY_HTTP_TLS_CERTIFICATE=/root/domain.crt -e REGISTRY_HTTP_TLS_KEY=/root/domain.key registry:2

# 啟動之后航厚,docker ps看一下啟動狀態(tài)
root@kolla:~# docker ps
CONTAINER ID        IMAGE                                     COMMAND                  CREATED             STATUS              PORTS                               NAMES
ed96182fa77d        registry:2                                "/entrypoint.sh /etc/"   15 hours ago        Up 15 hours         0.0.0.0:5000->5000/tcp              my-registry

如此Registry Server啟動完成,下面不妨測試一下可否向該Registry Server上傳鏡像锰蓬。

docker tag hello-world vienfu.dockerhub.com:5000/hello-world:test
docker push vienfu.dockerhub.com:5000/hello-world:test

簡單通過curl命令來查看鏡像是否上傳:

root@kolla:~#curl -X GET https://vienfu.dockerhub.com:5000/v2/_catalog
{"repositories":["hello-world"]}

如此我們看到鏡像也的確上傳成功了幔睬。

倉庫加鑒權(quán)

出于安全考慮,一般在認證之后還需要做一個鑒權(quán)來控制用戶的訪問權(quán)限芹扭,這兒僅介紹最基本的鑒權(quán)方式:用戶名和密碼訪問模式麻顶。

首先創(chuàng)建一個用戶及訪問的密碼,這兒假設(shè)用戶名和密碼分別是vienfu舱卡、Fch19880810

mkdir -p /root/auth
docker run --entrypoint htpasswd registry:2 -Bbn vienfu Fch19880810 > /root/auth/htpasswd

然后把之前起的容器停掉并且刪除:

docker stop my-registry
docker rm my-registry

最后啟動一個帶鑒權(quán)的registry容器:

docker run -d -p 5000:5000 --name my-registry \
-v /root/auth:/auth \
-v /root/docker_image_mgr/registry:/var/lib/registry \
-v /root/docker_image_mgr/config.yml:/etc/docker/registry/config.yml \
-v /root/certs.d:/root \
-e "REGISTRY_AUTH=htpasswd" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/root/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/root/domain.key \
registry:2

那也不妨測試一下辅肾,實際上我們不難發(fā)現(xiàn),這個時候如果我們直接docker push來上傳鏡像會失敗轮锥,這是因為設(shè)置了鑒權(quán)訪問的參數(shù)需要先做如下操作:

docker login vienfu.dockerhub.com:5000 # 根據(jù)提示輸入之前設(shè)置的用戶名和密碼

如此我們再通過docker push上傳鏡像就ok啦矫钓,最后也通過curl命令來查看一下吧:

root@kolla:~# curl -u vienfu:Fch19880810 -X GET https://vienfu.dockerhub.com:5000/v2/_catalog
{"repositories":["hello-world"]}

好啦,自此私有鏡像倉庫的搭建工作算是完成了舍杜。

結(jié)語

以上完整講述了私有鏡像倉庫的搭建流程新娜,但實際生產(chǎn)環(huán)境中可能會涉及高可用、異地數(shù)據(jù)同步及一致性等問題既绩,這些問題都需要我們?nèi)ヒ灰唤鉀Q(這兒暫不做這方面的展開)概龄;另外,企業(yè)級應(yīng)用還可以考慮使用Harbor熬词,它會提供一整套的解決方案包括用戶管理旁钧、操作界面、鏡像簽名互拾、漏掃歪今、高可用等一系列功能,剛興趣的同學(xué)可參照我的另兩篇博客:基于NFS后端存儲搭建Harbor基于CEPH后端存儲搭建Harbor颜矿。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寄猩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子骑疆,更是在濱河造成了極大的恐慌田篇,老刑警劉巖替废,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泊柬,居然都是意外死亡椎镣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門兽赁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來状答,“玉大人,你說我怎么就攤上這事刀崖【疲” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵亮钦,是天一觀的道長馆截。 經(jīng)常有香客問我,道長蜂莉,這世上最難降的妖魔是什么蜡娶? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮映穗,結(jié)果婚禮上翎蹈,老公的妹妹穿的比我還像新娘。我一直安慰自己男公,他們只是感情好荤堪,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著枢赔,像睡著了一般澄阳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上踏拜,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天碎赢,我揣著相機與錄音,去河邊找鬼速梗。 笑死肮塞,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姻锁。 我是一名探鬼主播枕赵,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼位隶!你這毒婦竟也來了拷窜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎篮昧,沒想到半個月后赋荆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡懊昨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年窄潭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酵颁。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡狈孔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出材义,到底是詐尸還是另有隱情,我是刑警寧澤嫁赏,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布其掂,位于F島的核電站,受9級特大地震影響潦蝇,放射性物質(zhì)發(fā)生泄漏款熬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一攘乒、第九天 我趴在偏房一處隱蔽的房頂上張望贤牛。 院中可真熱鬧,春花似錦则酝、人聲如沸殉簸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽般卑。三九已至,卻和暖如春爽雄,著一層夾襖步出監(jiān)牢的瞬間蝠检,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工挚瘟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叹谁,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓乘盖,卻偏偏與公主長得像焰檩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子订框,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容