Docker Registry本地私有倉庫搭建

      網(wǎng)友投稿 995 2022-05-29

      相比docker Hub而言,Docker Registry的功能就不夠全面了,且需要自己手動配置、升級、維護和管理,所以說對于Docker鏡像管理不太熟悉的人員推薦使用Docker Hub。如果開發(fā)者想要嚴(yán)格控制鏡像存儲位置,完全擁有自己的鏡像分配渠道,或者要想將鏡像存儲和分布緊密嵌入到自己開發(fā)的程序中,則選擇Docker Registry更適合。接下來,本小節(jié)將針對Docker Registry本地私有鏡像倉庫的管理進行詳細(xì)講解。

      1.啟動Docker Registry

      使用Docker官方提供的Registry鏡像就可以搭建本地私有鏡像倉庫,具體指令如下。

      $ docker run -d

      -p 5000:5000

      –restart=always

      –name registry

      -v /mnt/registry:/var/lib/registry

      registry:2

      在上述指令中,涉及到的參數(shù)說明如下:

      ● -d:表示在后臺運行該容器;

      ● -p 5000:5000:表示將私有鏡像倉庫容器內(nèi)部默認(rèn)暴露的5000端口映射到宿主機的5000端口;

      ● --restart=always:表示容器啟動后自動啟動本地私有鏡像倉庫;

      ● --name registry:表示為生成的容器命名為registry;

      ● -v /mnt/registry:/var/lib/registry:表示將容器內(nèi)的默認(rèn)存儲位置/var/lib/registry中的數(shù)據(jù)掛載到宿主機的/mnt/registry目錄下,這樣當(dāng)容器銷毀后,在容器中/var/lib/registry目錄下的數(shù)據(jù)會自動備份到宿主機指定目錄。

      小提示:

      Docker Registry目前有v1和v2兩個版本,v2版本并不是v1版本的簡單升級,而是在很多功能上都有了改進和優(yōu)化。v1版本使用的是Python開發(fā)的,而v2版本是用go語言開發(fā)的;v1版本本地鏡像倉庫容器中數(shù)據(jù)默認(rèn)掛載點是/tmp/registry,而v2版本的本地鏡像倉庫容器中數(shù)據(jù)默認(rèn)掛載點是/var/lib/registry。

      2.重命名鏡像

      之前推送鏡像時,都是默認(rèn)推送到遠程鏡像倉庫,而本次是將指定鏡像推送到本地私有鏡像倉庫。由于推送到本地私有鏡像倉庫的鏡像名必須符合“倉庫IP:端口號/repository”的形式,因此需要按照要求修改鏡像名稱,具體操作指令如下。

      $ docker tag hellodocker:latest localhost:5000/myhellodocker

      執(zhí)行上述指令后,再次使用docker images命令查看現(xiàn)有鏡像,如圖1所示。

      圖1 鏡像列表

      從圖1中可以看出,在倉庫中多了一個名稱為localhost:5000/myhellodocker的鏡像。

      3.推送鏡像

      本地私有鏡像倉庫搭建并啟動完成,同時要推送的鏡像也已經(jīng)準(zhǔn)備就緒后,就可以將指定鏡像推送到本地私有鏡像倉庫了,具體操作指令如下。

      $ docker push localhost:5000/myhellodocker

      執(zhí)行上述指令后,就可以完成鏡像的推送。為了驗證推送結(jié)果,我們可以在宿主機瀏覽器上輸入地址http://localhost:5000/v2/myhellodocker/tags/list進行查看(使用該地址時注意鏡像名稱),其顯示效果如圖2所示。

      圖2 本地鏡像倉庫效果

      從圖2可以看出,瀏覽器已經(jīng)顯示出了相應(yīng)信息,這說明鏡像推送成功。

      我們在推送鏡像的過程中,還將數(shù)據(jù)映射到了本地磁盤,因此可以在本地磁盤的/mnt/registry/docker/registry/v2/repositories目錄(即-v參數(shù)指定的宿主機數(shù)據(jù)映射位置)進行查看,如圖3所示。

      圖3 本地鏡像倉庫效果

      需要注意的是,如果通過瀏覽器訪問發(fā)現(xiàn)推送成功,而本地磁盤位置卻未發(fā)現(xiàn)對應(yīng)的鏡像,這就需要確認(rèn)在啟動本地鏡像倉庫時是否使用了-v參數(shù),以及數(shù)據(jù)掛載位置是否正確。

      通過上一節(jié)搭建的Docker Registry本地鏡像倉庫雖然可以正常使用,但在實際開發(fā)中,為保障系統(tǒng)的安全性及私密性,我們還必須為本地搭建的私有鏡像倉庫配置認(rèn)證證書、登錄賬號等才能用于真正的服務(wù)。接下來,本小節(jié)將針對Docker Registry本地私有倉庫的配置進行詳細(xì)講解。

      1.Docker Registry本地私有倉庫配置

      在配置Docker Registry本地私有倉庫時,首先我們必須明確在哪臺Docker機器上搭建該私有倉庫,然后根據(jù)私有倉庫搭建的相關(guān)要求進行逐一配置,其具體操作步驟如下。

      (1)查看Docker Registry私有倉庫搭建地址

      這里我們?nèi)匀灰郧懊嫜菔綝ocker入門程序的Docker主機為例,將在該機器上搭建并配置Docker Registry本地私有倉庫。我們可以在Docker機器終端使用ifconfig命令查看該機器的IP地址,具體效果如圖1所示。

      圖1 本地鏡像倉庫ip地址

      從圖1可以看出,此次將要搭建和配置的Docker Registry本地私有倉庫的Docker主機IP地址為192.168.197.139。

      (2)生成自簽名證書

      要確保Docker Registry本地鏡像倉庫的安全性,還需要一個安全認(rèn)證證書,來保證其他Docker機器不能隨意訪問該機器上的Docker Registry本地鏡像倉庫,所以需要在搭建Docker Registry本地鏡像倉庫的Docker主機上先生成自簽名證書(如果已購買證書就無需生成),具體操作指令如下。

      $ mkdir registry && cd registry && mkdir certs && cd certs

      $ openssl req -x509 -days 3650 -subj ‘/CN=192.168.197.139:5000/’

      -nodes -newkey rsa:2048 -keyout domain.key -out domain.crt

      在終端home目錄下執(zhí)行上述指令后,首先會在home目錄下創(chuàng)建并進入registry/certs目錄,然后使用openssl生成一個自簽名的證書。

      關(guān)于openssl命令中的一些參數(shù)說明如下。

      ● -x509:x509是一個自簽發(fā)證書的格式;

      ● -days 3650:表示證書有效期;

      ● 192.168.197.139:5000:表示具體部署Docker Registry本地鏡像倉庫的地址和端口;

      ● rsa:2048:是證書算法長度;

      ● domain.key和domain.crt:就是生成的證書文件。

      需要特別注意的是,Docker Registry本地鏡像倉庫的地址和端口,要根據(jù)讀者自己機器的IP或者域名進行修改。

      (3)生成用戶名和密碼

      在Docker Registry本地鏡像倉庫所在的Docker主機上生成自簽名證書后,為了確保Docker機器與該Docker Registry本地鏡像倉庫的交互,還需要生成一個連接認(rèn)證的用戶名和密碼,使其他Docker用戶只有通過用戶名和密碼登錄后才允許連接到Docker Registry本地鏡像倉庫。

      生成連接認(rèn)證的具體操作指令如下(繼續(xù)在上面生成的certs目錄下執(zhí)行以下指令)。

      $ cd … && mkdir auth

      $ docker run --entrypoint htpasswd registry:2 -Bbn shitou 123 > auth/htpasswd

      執(zhí)行上述指令后,首先會在前面的registry目錄下再創(chuàng)建一個auth子目錄并進入該子目錄,然后使用docker run指令生成用于訪問Docker Registry本地鏡像倉庫服務(wù)的用戶名和密碼(shitou是用戶名,123是密碼)。

      (4)啟動Docker Registry本地鏡像倉庫服務(wù)

      完成上面的準(zhǔn)備工作后,就可以正式部署帶有安全認(rèn)證的本地私有鏡像倉庫了(需要將前面小節(jié)中運行的Docker Registry刪除),具體指令如下。

      $ docker run -d

      -p 5000:5000

      –restart=always

      –name registry

      -v /mnt/registry:/var/lib/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_TLS_CERTIFICATE=/certs/domain.crt

      -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key

      registry:2

      上述指令中的多個參數(shù)在7.4.3小節(jié)已經(jīng)有過介紹,除此之外還使用了-v和-e參數(shù)在啟動Docker Registry倉庫服務(wù)時配置了認(rèn)證證書和和連接的用戶信息。上述指令是在前面生成的registry目錄下執(zhí)行的,如果在其他目錄下執(zhí)行,需要修改-v參數(shù)中auth和certs所在的宿主機文件路徑。

      (5)配置Docker Registry訪問接口

      完成Docker Registry本地鏡像倉庫服務(wù)啟動后,還需要在搭建了Docker Registry本地鏡像倉庫所在的Docker主機上配置供其他Docker機器訪問的接口,具體指令如下。

      $ sudo mkdir -p /etc/docker/certs.d/192.168.197.139:5000

      Docker Registry本地私有倉庫搭建

      $ sudo cp certs/domain.crt /etc/docker/certs.d/192.168.197.139:5000

      在Docker Registry本地鏡像倉庫所在的Docker主機上分別執(zhí)行上述指令,就完成了Docker Registry訪問客戶端的配置。

      上述指令中,第一條指令用于創(chuàng)建一個證書目錄,要注意的是192.168.197.139:5000目錄名要與啟動的Docker Registry服務(wù)地址端口一致;第二條指令將生成的domain.crt證書復(fù)制到剛才創(chuàng)建的證書目錄下。

      2、驗證測試

      通過前面幾個步驟的操作,配置有安全認(rèn)證的Docker Registry本地私有倉庫就已經(jīng)完成啟動設(shè)置,接下來我們就可以在其他Docker主機上向該Docker Registry本地私有倉庫推送鏡像來進行測試了,具體步驟如下。

      (1)Docker Registry私有倉庫使用登記

      其他Docker機器如果想要與配置有自簽名證書和賬號認(rèn)證的私有倉庫進行通信,就必須在各自Docker主機上配置該私有倉庫地址,進行使用登記(此處就以部署了Docker Registry鏡像倉庫的Docker機器為例,在同一臺機器上進行演示)。

      在該Docker機器終端使用sudo vim /etc/docker/daemon.json命令編輯daemon.json文件,在該文件中添加如下內(nèi)容。

      {“insecure-registries”:[“192.168.197.139:5000”]}

      上述內(nèi)容中的192.168.197.139:5000就是要訪問的Docker Registry私有倉庫地址。

      需要注意的是,daemon.json文件中配置的內(nèi)容都是在同一個大括號“{}”中以“key:value”形式存在的文本,多個“key:value”配置中間用英文逗號“,”分隔,具體效果如圖2所示。

      圖2 daemon.json文件

      從圖2可以看出,daemon.json文件中的配置內(nèi)容包括前面小節(jié)介紹的鏡像加速器,以及Docker Registry私有倉庫地址。

      編輯完成并保存后,需要重啟Docker進程,具體指令如下。

      $ sudo /etc/init.d/docker restart

      執(zhí)行完上述操作后,配置了該倉庫服務(wù)地址的Docker主機就可以與Docker Registry私有倉庫進行通信,來完成鏡像的搜索、拉取和推送等操作。

      (2)準(zhǔn)備鏡像文件

      在該Docker主機上重命名一個Docker鏡像,具體指令如下。

      $ docker tag hello-world:latest 192.168.197.139:5000/myhelloworld

      執(zhí)行上述指令后,可以通過docker images命令查看當(dāng)前Docker主機上鏡像列表中存在的所有鏡像,效果如圖3所示。

      圖3 本地鏡像列表

      (3)推送鏡像

      通過docker push指令向Docker Registry本地私有鏡像倉庫推送該鏡像,具體指令如下。

      $ docker push 192.168.197.139:5000/myhelloworld

      執(zhí)行上述指令后,就會有錯誤信息提示,如圖4所示。

      圖4 推送鏡像

      從圖4可以看出,推送過程中出現(xiàn)錯誤,信息提示為:no basic auth credentials(即沒有通過身份驗證),所以無法進行推送,這也就說明身份驗證的配置有效。要想成功推送,需要先登錄成功后再推送。

      (4)登錄Docker Registry鏡像倉庫

      在該Docker主機上通過docker login指令先登錄到Docker Registry本地私有鏡像倉庫,具體指令如下。

      $ docker login 192.168.197.139:5000

      使用上述指令就可以進行Docker Registry本地私有鏡像倉庫的登錄了。需要注意的是,這里使用docker login指令后必須添加Docker Registry鏡像倉庫服務(wù)地址和端口。當(dāng)?shù)卿洺晒螅K端會返回有“Login Succeeded”登錄成功的提示信息。

      (5)再次推送鏡像

      登錄成功后,再次通過docker push指令向Docker Registry本地私有鏡像倉庫推送剛才命名的鏡像,具體指令與第二步指令相同。

      (6)結(jié)果驗證

      通常情況下,通過上一步推送后的返回信息就可以判斷是否推送成功,當(dāng)然最嚴(yán)謹(jǐn)和直觀的方法就是在Docker Registry服務(wù)掛載的鏡像目錄上進行結(jié)果驗證。在本地磁盤的(即-v命令指定的宿主機數(shù)據(jù)掛載點位置)/mnt/registry/docker/registry/v2/repositories目錄進行查看,其顯示結(jié)果如圖5所示。

      圖5 本地鏡像倉庫效果

      從圖5可以看出,名為myhelloworld的鏡像已成功推送到了Docker Registry本地私有鏡像倉庫。至此Docker Registry本地私有鏡像倉庫的具體管理配置就已講解完成。

      小提示:

      Docker官方提供的鏡像管理倉庫Docker Hub是一個可視化的并且集成了多種功能的鏡像管理工具,而Docker提供的本地私有鏡像倉庫Docker Registry卻沒有像樣的可視化管理工具,雖然這種本地私有鏡像倉庫完全不影響實際使用,但是從管理和效果上感覺卻不是很方便。針對這種情況,一些社區(qū)專門開發(fā)了Docker Registry的可視化管理工具來方便本地鏡像倉庫管理,其中比較流行的一款軟件叫做Portus,他集成了一些鏡像管理功能,可以完全可視化的管理倉庫鏡像和訪問用戶,感興趣的讀者可以自行查詢相關(guān)資料進行學(xué)習(xí)。

      Docker 容器

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:安卓應(yīng)用及鴻蒙應(yīng)用安全檢測指南
      下一篇:速度采樣頻率
      相關(guān)文章
      亚洲国产成人综合| 亚洲国产精品国自产拍电影| 亚洲国产精品综合一区在线| 亚洲av无码乱码国产精品fc2| 久久久精品国产亚洲成人满18免费网站| 亚洲AV成人精品一区二区三区| 亚洲熟妇少妇任你躁在线观看| 波多野结衣亚洲一级| 亚洲喷奶水中文字幕电影| 亚洲精品国产免费| 1区1区3区4区产品亚洲| 中文字幕亚洲色图| 亚洲国产高清美女在线观看| 亚洲同性男gay网站在线观看| 亚洲午夜成激人情在线影院| 国产精品亚洲自在线播放页码| 久久精品亚洲AV久久久无码| 亚洲AV成人一区二区三区在线看| 久久亚洲精品国产精品婷婷| 亚洲欧美乱色情图片| 国产亚洲一卡2卡3卡4卡新区| 女bbbbxxxx另类亚洲| 亚洲伦乱亚洲h视频| 亚洲欭美日韩颜射在线二| 亚洲国产精品va在线播放| 久久久久亚洲Av片无码v| 亚洲一区二区电影| 亚洲av永久综合在线观看尤物| 亚洲最大天堂无码精品区| 亚洲国产成人久久综合| 亚洲国产精品一区二区三区久久| 亚洲伊人久久成综合人影院| 亚洲情综合五月天| 亚洲欧洲第一a在线观看| 亚洲婷婷在线视频| 亚洲午夜无码久久久久小说| 国产成人亚洲综合无| 国产精品亚洲а∨天堂2021| 亚洲精品成人片在线观看| 久久国产亚洲精品麻豆| 亚洲精品视频在线播放|