官方的docker hub是乙個用於管理公共映象的好地方,我們可以在上面找到我們想要的映象,也可以把我們自己的映象推送上去。但是,有時候,我們的使用場景需要我們擁有乙個私有的映象倉庫用於管理我們自己的映象。這個可以通過開源軟體registry來達成目的。
registry在github上有兩份**:老**庫和新**庫。老**是採用python編寫的,存在pull和push的效能問題,出到0.9.1版本之後就標誌為deprecated,不再繼續開發。從2.0版本開始就到在新**庫進行開發,新**庫是採用go語言編寫,修改了映象id的生成演算法、registry上映象的儲存結構,大大優化了pull和push映象的效率。
官方在docker hub上提供了registry的映象,我們可以直接使用該registry映象來構建乙個容器,搭建我們自己的私有倉庫服務。
docker registry有三個角色,分別是index、registry和registry client。
角色 1 – index
index 負責並維護有關使用者帳戶、映象的校驗以及公共命名空間的資訊。它使用以下元件維護這些資訊:
web ui
元資料儲存
認證服務
符號化這也分解了較長的url,以方便使用和驗證使用者儲存庫。
角色 2 --registry
registry是映象和圖表的倉庫。然而,它沒有乙個本地資料庫,也不提供使用者的身份認證,由s3、雲檔案和本地檔案系統提供資料庫支援。此外,通過index auth service的token方式進行身份認證。registries可以有不同的型別。現在讓我們來分析其中的幾種型別:
sponsor registry:第三方的registry,供客戶和docker社群使用。
mirror registry:第三方的registry,只讓客戶使用。
vendor registry:由發布docker映象的**商提供的registry。
private registry:通過設有防火牆和額外的安全層的私有實體提供的registry。
角色 3 --registry client
docker充當registry客戶端來負責維護推送和拉取的任務,以及客戶端的授權
1、節約頻寬
2、可以自己定製系統
3、更加安全
2、利用harbor-registry,來搭建私庫
harbor是乙個用於儲存docker映象的企業級registry服務
通過官方docker-registry來配置私庫
1、執行下面命令獲取registry映象
docker pull registry
2、將registry映象執行並生成乙個容器
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
registry服務缺省會將上傳的映象儲存在容器的/var/lib/registry,將主機的/opt/registry目錄掛載到該目錄,即可實現將映象儲存到主機
的/opt/registry目錄了。
3、執行docker ps看一下容器運**況
docker ps -a
4、registry容器啟動後,開啟瀏覽器輸入http://ip_add:5000/v2/,看到下面情況說明registry執行正常
5、通過將映象push到registry來驗證,首先將主機的registry映象命名為符合倉庫要求
registry_url:port/imagename:tag的格式,如圖
6、通過docker tag命令來實現命名
docker tag 名稱:版本 192.168.179.128:5000/jdk_8u191:版本
7、通過docker image檢視本地映象,重新建立了乙個映象
docker image
8、上傳jdk映象到registry倉庫
docker push 192.168.179.128:5000/jdk_8u191:版本
注意可能會出現無法push映象到私有倉庫的問題這是因為我們啟動的registry服務不是安全可信賴的。這時需要修改客戶端docker的配置檔案/etc/docker/daemon.json,
新增下面的內容(registry服務位址):
#「registry-mirrors」: ["] 是阿里雲**的registry hub倉庫的位址,可以加快國內訪問registry hub倉庫的速度。
修改好之後需要重啟docker服務才能生效
systemctl restart docker
再push即可,push成功之後,檢視本地/opt/registry目錄下已經有了剛推送上來的registry映象,
也可以在瀏覽器中輸入http://ip_add:5000/v2/_catalog
該映象所處的registry、該映象包括所有層的校驗、以授權為目的的token
3、使用者通過響應後返回的token和registry溝通,registry全權負責映象,它用來儲存基本的映象和繼承的層。
4、registry現在要與index證實該token是被授權的。
b 使用者想要將映象推送到registry中。其中涉及的步驟如下:
1、使用者傳送附帶證書的請求到index要求分配庫名。
2、在認證成功,命名空間可用之後,庫名也被分配。index發出響應返回臨時的token。
3、映象連帶token,一起被推送到registry中。
4、registry與index證實token被授權,然後在index驗證之後開始讀取推送流。
5、該index由docker校驗的映象更新。
c 使用者想要從index或registry中刪除映象:
1、index接收來自docker乙個刪除庫的訊號。
2、如果index對庫驗證成功,它將刪除該庫,並返回乙個臨時的token。
3、registry現在接收到帶有該token的刪除訊號。
4、registry與index核實該token,然後刪除庫以及所有與其相關的資訊。
5、docker現在通知有關刪除的index,然後index移除庫的所有記錄。
Docker registry 私有倉庫
registry node mkdir p home registry 宿主機建立registry目錄 docker tag registry latest registry 1.0 為本地映象新增新標籤 docker run d p 5000 5000 privileged true v home...
Docker registry私服搭建
1 拉取私服映象 docker pull registry 2 啟動私服 docker run d p 5000 5000 v mtn docker registry var lib registry registry 3 檢視私服狀態 netstat an grep 5000 tcp6 0 0 5...
Docker Registry 管理映象
一 使用docker registry管理映象 a.登陸docker hub b.建立倉庫 c.推送映象 打標籤 docker push xiangzisaisai wing 輸入使用者名稱密碼 docker login docker push xiangzisaisai wing 報錯 error...