網(wǎng)站首頁 編程語言 正文
摘要
隨著docker使用的鏡像越來越多,就需要有一個保存鏡像的地方,這就是倉庫。目前常用的兩種倉庫:公共倉庫和私有倉庫。最方便的就是使用公共倉庫上傳和下載,下載公共倉庫的鏡像是不需要注冊的,但是上傳時,是需要注冊的。私有倉庫最常用的就是Registry、Harbor兩種,那接下來詳細介紹如何搭建registry私有倉庫。
一、環(huán)境準備
兩臺CentOS7.4,一臺為Docker私有倉庫;另一臺為Docker客戶端,測試使用;
二、配置registry私有倉庫
# <!--docker宿主機開啟路由功能--> echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf <!--刷新配置--> sysctl -p net.ipv4.ip_forward = 1 <!--配置鏡像加速--> vim /etc/docker/daemon.json <!--添加阿里云加速--> {"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]} <!--重新啟動docker服務(wù)--> systemctl reload docker <!--查找registry鏡像--> docker search registry docker pull registry <!--registry鏡像可以直接先pull下來,也可以不下載,根據(jù)自己情況而定--> docker run -d -p 5000:5000 --name registry --restart=always -v /opt/registry:/var/lib/registry registry <!--查看docker運行的容器--> docker ps <!--查看docker所有鏡像--> docker images <!--配置docker服務(wù)支持registry服務(wù)--> vim /etc/docker/daemon.json {"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"], "insecure-registries":["192.168.100.10:5000"] <!--添加此行--> } <!--重新啟動docker服務(wù)--> systemctl reload docker docker info
三、上傳與下載鏡像
# 給鏡像打標簽 docker tag mysql 192.168.25.140:5000/mysql # 上傳的鏡像 docker push 192.168.25.140:5000/mysql <!--客戶端安裝docker服務(wù),配置鏡像加速--> <!--配置docker支持registry服務(wù) --> vim /etc/docker/daemon.json {"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"], "insecure-registries":["192.168.100.10:5000"] <!--添加此行--> } <!--重新啟動docker服務(wù)--> systemctl restart docker <!--客戶端下載私有倉庫中的鏡像--> docker pull 192.168.25.140:5000/mysql docker images <!--查看鏡像是否下載成功-->
四、配置registry加載身份驗證
但是現(xiàn)在存在一個問題,如果這也部署的話企業(yè)內(nèi)部所有人員皆可訪問我們的私有倉庫,為了安全起見,接下來為registry添加一個身份驗證,只有通過了身份驗證才可以上傳或者下載私有倉庫中的鏡像。
<!--安裝加密工具httpd-tools--> yum -y install httpd-tools <!--創(chuàng)建存放驗證密鑰目錄--> mkdir /opt/registry-auth <!--配置registry身份驗證數(shù)據(jù)庫--> <!--"-Bbn”參數(shù)解釋:B強制密碼加密;b在命令中輸入密碼,不提示輸入密碼;n不更新密鑰文件--> htpasswd -Bbn bob pwd@123 > /opt/registry-auth/htpasswd <!--刪除此服務(wù)器上的所有容器,接下來重新生成一個需要身份驗證的私有倉庫容器--> docker run -d -p 5000:5000 --restart=always \ -v /opt/registry-auth/:/auth/ \ -v /opt/registry:/var/lib/registry --name registry-auth -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry <!--重新運行一個支持身份驗證的registry私有鏡像倉庫容器--> docker tag tomcat:latest 192.168.100.10:5000/image/tomcat:1.0 docker push 192.168.100.10:5000/image/tomcat:1.0 <!--測試不通過身份驗證是否可以往私有倉庫上傳鏡像--> <!--提示沒有身份驗證,上傳不了--> no basic auth credentials <!--登錄私有鏡像倉庫,通過身份驗證即可上傳--> docker login 192.168.100.10:5000 Username: bob <!--輸入bob--> Password: <!--輸入密碼--> <!--再次上傳鏡像到私有倉庫--> docker push 192.168.100.10:5000/image/tomcat:1.0 <!--docker客戶端不通過身份驗證直接下載私有倉庫中的鏡像直接被拒絕--> docker pull 192.168.100.10:5000/image/tomcat:1.0 Error response from daemon: Get http://192.168.100.10:5000/v2/image/tomcat/manifests/1.0: no basic auth credentials <!--登錄私有倉庫,通過身份驗證--> docker login 192.168.100.10:5000 Username: bob <!--輸入bob--> Password: <!--輸入密碼--> docker pull 192.168.100.10:5000/image/tomcat:1.0 <!--下載私有倉庫中的鏡像--> <!--查看docker客戶端鏡像--> docker images
五、?docker registry 私有倉庫查詢、刪除
修改tag (以hello-world為例)
拉取鏡像 docker pull hello-world 修改鏡像 docker tag hello-world hub.test.com:5000/hello-world:1.0 上傳、刪除、再下載鏡像,刪除后能下載成功 docker images docker push hub.test.com:5000/hello-world:1.0 docker rmi hub.test.com:5000/hello-world:1.0 docker images docker pull hub.test.com:5000/hello-world:1.0 docker images
?查看倉庫鏡像
curl hub.test.com:5000/v2/_catalog
registry開啟刪除
#查看默認配置 docker exec -it registry sh -c 'cat /etc/docker/registry/config.yml' #開啟刪除(添加 delete: enabled: true) docker exec -it registry sh -c "sed -i '/storage:/a\ delete:' /etc/docker/registry/config.yml" docker exec -it registry sh -c "sed -i '/delete:/a\ enabled: true' /etc/docker/registry/config.yml" #重啟 docker restart registry
查詢、刪除鏡像?
#查詢鏡像 curl <倉庫地址>/v2/_catalog #查詢鏡像tag(版本) curl <倉庫地址>/v2/<鏡像名>/tags/list #刪除鏡像API curl -I -X DELETE "<倉庫地址>/v2/<鏡像名>/manifests/<鏡像digest_hash>" #獲取鏡像digest_hash curl <倉庫地址>/v2/<鏡像名>/manifests/<tag> \ --header "Accept: application/vnd.docker.distribution.manifest.v2+json"
博文參考
https://www.jb51.net/article/187864.htm
原文鏈接:https://blog.csdn.net/weixin_41605937/article/details/122367707
相關(guān)推薦
- 2023-06-13 Python的加密模塊之hashlib?與?base64詳解及常用加密方法_python
- 2022-06-01 如何利用Python將字典轉(zhuǎn)為成員變量_python
- 2022-09-19 React?Hook?四種組件優(yōu)化總結(jié)_React
- 2022-11-18 如何使用Python生成Hilbert矩陣_python
- 2022-06-02 C#?操作Windows注冊表的實現(xiàn)方法_C#教程
- 2022-02-18 yml配置文件中存在@無法識別,報錯:found character ‘@‘ that cannot
- 2022-03-14 -bash: 未預期的符號 `(‘ 附近有語法錯誤的解決辦法
- 2022-12-23 Kubernetes存儲系統(tǒng)數(shù)據(jù)持久化管理詳解_云其它
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支