Docker Registry Server 搭建,配置免費(fèi)HTTPS證書(shū)驮樊,及擁有權(quán)限認(rèn)證、TLS 的私有倉(cāng)庫(kù)

環(huán)境準(zhǔn)備

  • 系統(tǒng):Ubuntu 17.04 x64
  • IP:198.13.48.154
  • 域名:hub.ymq.io,此域名需要dns 解析到198.13.48.154 作為私有倉(cāng)庫(kù)地址

本文出現(xiàn)的所有:hub.ymq.io 域名囚衔。使用時(shí)候請(qǐng)?zhí)鎿Q成自己的域名

Docker 環(huán)境

在部署私有倉(cāng)庫(kù)之前挖腰,需要在主機(jī)上安裝Docker。私有倉(cāng)庫(kù)是 registry images练湿,并在Docker中運(yùn)行猴仑。

我是用的vultr 的服務(wù)器,所以肥哎,下面操作辽俗,就不用配置國(guó)內(nèi)的,加速鏡像庫(kù)篡诽,直接用Docker官方的崖飘!

國(guó)內(nèi)加速倉(cāng)庫(kù),我其他文章有提到:Ubuntu 17.04 x64 安裝 Docker CE 初窺 Dockerfile 部署 Nginx
http://www.ymq.io/2017/12/30/Docker-Install/

安裝Docker CE

使用存儲(chǔ)庫(kù)進(jìn)行安裝

1.更新apt軟件包索引:

$ sudo apt-get update

2.裝軟件包以允許apt通過(guò)HTTPS使用存儲(chǔ)庫(kù):

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

3.添加Docker的官方GPG密鑰:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4.使用以下命令來(lái)設(shè)置穩(wěn)定的存儲(chǔ)庫(kù)

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

5.更新apt軟件包索引霞捡。

$ sudo apt-get update

7.安裝最新版本的Docker CE

$ sudo apt-get install docker-ce

8.通過(guò)運(yùn)行hello-world 映像驗(yàn)證是否正確安裝了Docker CE 坐漏。

$ sudo docker run hello-world

域名證書(shū)

acme.sh 實(shí)現(xiàn)了 acme 協(xié)議, 可以從 letsencrypt 生成免費(fèi)的證書(shū). https://github.com/Neilpang/acme.sh

給acme.sh組織贊助:Acknowledgments

很簡(jiǎn)單就兩個(gè)步驟:

  • 安裝 acme.sh
  • 生成證書(shū),及驗(yàn)證證書(shū)

1.安裝 acme.sh

安裝很簡(jiǎn)單, 一個(gè)命令:

$ curl  https://get.acme.sh | sh

這條命令碧信,會(huì)做的事情

1.把 acme.sh 安裝到你的 home 目錄下: 并創(chuàng)建 一個(gè) bashalias, 方便你的使用: acme.sh=~/.acme.sh/acme.sh

2.自動(dòng)為你創(chuàng)建 cronjob, 每天 0:00 點(diǎn)自動(dòng)檢測(cè)所有的證書(shū), 如果快過(guò)期了, 需要更新, 則會(huì)自動(dòng)更新證書(shū).

2.生成證書(shū)

如果你還沒(méi)有運(yùn)行任何 web 服務(wù), 且80 端口是空閑的, 那么 acme.sh 能假裝自己是一個(gè)webserver, 臨時(shí)聽(tīng)在80 端口, 完成驗(yàn)證:

注意:如果您使用的時(shí)候赊琳,請(qǐng)把,hub.ymq.io 替換成自己域名砰碴,此域名需要dns 解析到安裝私有倉(cāng)庫(kù)的服務(wù)器IP

$ cd ~/.acme.sh/
$ apt-get install socat
$ sh acme.sh  --issue -d hub.ymq.io   --standalone

如果看到如下信息躏筏,說(shuō)明證書(shū)驗(yàn)證并生成成功,證書(shū)生成位置在:/root/.acme.sh/hub.ymq.io/

Success
Verify finished, start to sign.
Cert success.
-----BEGIN CERTIFICATE-----

[Wed Jan  3 14:36:25 UTC 2018] Standalone mode.
[Wed Jan  3 14:36:25 UTC 2018] Registering account
[Wed Jan  3 14:36:27 UTC 2018] Registered
[Wed Jan  3 14:36:27 UTC 2018] ACCOUNT_THUMBPRINT='7TpUIE5N--hq2nhk2ruKmHBfgKB-LX-pBCkWzzmHzVM'
[Wed Jan  3 14:36:27 UTC 2018] Creating domain key
[Wed Jan  3 14:36:28 UTC 2018] The domain key is here: /root/.acme.sh/hub.ymq.io/hub.ymq.io.key
[Wed Jan  3 14:36:28 UTC 2018] Single domain='hub.ymq.io'
[Wed Jan  3 14:36:28 UTC 2018] Getting domain auth token for each domain
[Wed Jan  3 14:36:28 UTC 2018] Getting webroot for domain='hub.ymq.io'
[Wed Jan  3 14:36:28 UTC 2018] Getting new-authz for domain='hub.ymq.io'
[Wed Jan  3 14:36:29 UTC 2018] The new-authz request is ok.
[Wed Jan  3 14:36:29 UTC 2018] Verifying:hub.ymq.io
[Wed Jan  3 14:36:29 UTC 2018] Standalone mode server
[Wed Jan  3 14:36:34 UTC 2018] Success
[Wed Jan  3 14:36:34 UTC 2018] Verify finished, start to sign.
[Wed Jan  3 14:36:35 UTC 2018] Cert success.
-----BEGIN CERTIFICATE-----
MIIE9zCCA9+gAwIBAgISA6WV4ZFi6lr/kngVGx7/FoPMMA0GCSqGSIb3DQEBCwUA
******************************************
...

-----END CERTIFICATE-----
[Wed Jan  3 14:36:35 UTC 2018] Your cert is in  /root/.acme.sh/hub.ymq.io/hub.ymq.io.cer 
[Wed Jan  3 14:36:35 UTC 2018] Your cert key is in  /root/.acme.sh/hub.ymq.io/hub.ymq.io.key 
[Wed Jan  3 14:36:35 UTC 2018] The intermediate CA cert is in  /root/.acme.sh/hub.ymq.io/ca.cer 
[Wed Jan  3 14:36:35 UTC 2018] And the full chain certs is there:  /root/.acme.sh/hub.ymq.io/fullchain.cer 

搭建倉(cāng)庫(kù)

前提條件:域名的dns 解析到安裝私有倉(cāng)庫(kù)的服務(wù)器IP

復(fù)制證書(shū)

1.創(chuàng)建一個(gè)certs目錄。

$ cd /opt/
$ mkdir -p certs

2.移動(dòng)證書(shū)到certs目錄呈枉。

$ cd ~/.acme.sh/
$ sh acme.sh  --installcert  -d  hub.ymq.io   \
        --key-file   /opt/certs/hub.ymq.io.key \
        --fullchain-file /opt/certs/fullchain.cer

身份驗(yàn)證

為用戶創(chuàng)建一個(gè)帶有一個(gè)條目的密碼文件testuser趁尼,密碼為 testpassword

$ mkdir auth
$ docker run \
  --entrypoint htpasswd \
  registry:2 -Bbn testuser testpassword > auth/htpasswd

創(chuàng)建倉(cāng)庫(kù)

啟動(dòng)注冊(cè)表,指示它使用TLS證書(shū)猖辫。這個(gè)命令將certs/目錄綁定到容器中/certs/酥泞,并設(shè)置環(huán)境變量來(lái)告訴容器在哪里找到fullchain.cerhub.ymq.io.key文件。注冊(cè)表在端口443(默認(rèn)的HTTPS端口)上運(yùn)行啃憎。

docker run -d \
  --restart=always \
  --name registry \
  -v `pwd`/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -v `pwd`/certs:/certs \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.cer \
  -e REGISTRY_HTTP_TLS_KEY=/certs/hub.ymq.io.key \
  -p 443:443 \
  registry:2

查看日志

$ docker logs -f registry

登錄倉(cāng)庫(kù)

$ docker login hub.ymq.io
Username (testuser): testuser
Password: 輸入倉(cāng)庫(kù)密碼
Login Succeeded

拉取鏡像

Docker Hub拉取 ubuntu:16.04 鏡像

$ docker pull ubuntu:16.04

標(biāo)記鏡像

將鏡像標(biāo)記為 hub.ymq.io/my-ubuntu芝囤,在推送時(shí),Docker會(huì)將其解釋為倉(cāng)庫(kù)的位置辛萍。

$ docker tag ubuntu:16.04 hub.ymq.io/my-ubuntu

推送鏡像

將鏡像推送到本地鏡像標(biāo)記的倉(cāng)庫(kù)hub.ymq.io/my-ubuntu

$ docker push hub.ymq.io/my-ubuntu

刪除鏡像

刪除本地緩存ubuntu:16.04hub.ymq.io/my-ubuntu 鏡像悯姊,以便您可以測(cè)試從私有倉(cāng)庫(kù)中拉取鏡像。這不會(huì)hub.ymq.io/my-ubuntu 從您的私有倉(cāng)庫(kù)中刪除鏡像贩毕。

$ docker image remove ubuntu:16.04
$ docker image remove hub.ymq.io/my-ubuntu

拉取鏡像

拉取 hub.ymq.io 倉(cāng)庫(kù)的 my-ubuntu 鏡像悯许。

$ docker pull hub.ymq.io/my-ubuntu

查看鏡像

$ docker images hub.ymq.io/my-ubuntu
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
hub.ymq.io/my-ubuntu   latest              00fd29ccc6f1        2 weeks ago         111MB

在瀏覽器中查看倉(cāng)庫(kù)中的鏡像。需要輸入賬號(hào)密碼

hub.ymq.io
hub.ymq.io

操作API

Docker Registry HTTP API V2

倉(cāng)庫(kù)操作 API 官方文檔:https://docs.docker.com/registry/spec/api/

倉(cāng)庫(kù)搭建 官方文檔:https://docs.docker.com/registry/deploying/

Harbor

HarborVMware公司開(kāi)源的企業(yè)級(jí)DockerRegistry項(xiàng)目辉阶,項(xiàng)目地址為:https://github.com/vmware/harbor

其目標(biāo)是幫助用戶迅速搭建一個(gè)企業(yè)級(jí)的Dockerregistry服務(wù)先壕。它以Docker公司開(kāi)源的registry為基礎(chǔ)瘩扼,提供了管理UI,基于角色的訪問(wèn)控制(Role Based Access Control)启上,AD/LDAP集成邢隧、以及審計(jì)日志(Auditlogging) 等企業(yè)用戶需求的功能店印,同時(shí)還原生支持中文冈在。Harbor的每個(gè)組件都是以Docker容器的形式構(gòu)建的,使用Docker Compose來(lái)對(duì)它進(jìn)行部署

https://hub.ymq.io/harbor/projects

Harbor 的搭建按摘,及使用包券,正在整理中,會(huì)在下篇文章體現(xiàn)炫贤,關(guān)注公眾號(hào):“搜云庫(kù)” 我會(huì)在微信公眾號(hào)首發(fā)

Contact

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市兰珍,隨后出現(xiàn)的幾起案子侍郭,更是在濱河造成了極大的恐慌,老刑警劉巖掠河,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亮元,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡唠摹,警方通過(guò)查閱死者的電腦和手機(jī)爆捞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)勾拉,“玉大人煮甥,你說(shuō)我怎么就攤上這事∨涸蓿” “怎么了成肘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)斧蜕。 經(jīng)常有香客問(wèn)我双霍,道長(zhǎng),這世上最難降的妖魔是什么惩激? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任店煞,我火速辦了婚禮,結(jié)果婚禮上风钻,老公的妹妹穿的比我還像新娘顷蟀。我一直安慰自己,他們只是感情好骡技,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布鸣个。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掸驱,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天鬼癣,我揣著相機(jī)與錄音待秃,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛雄驹,可吹牛的內(nèi)容都是我干的象缀。 我是一名探鬼主播霞怀,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拂募,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡养涮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年悄谐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昏苏。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尊沸,死狀恐怖威沫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洼专,我是刑警寧澤棒掠,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站屁商,受9級(jí)特大地震影響烟很,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜡镶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一雾袱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧官还,春花似錦芹橡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至屯伞,卻和暖如春腿箩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劣摇。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工珠移, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人末融。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓钧惧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親滑潘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子垢乙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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