網站首頁 編程語言 正文
摘要
隨著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服務--> systemctl reload docker <!--查找registry鏡像--> docker search registry docker pull registry <!--registry鏡像可以直接先pull下來,也可以不下載,根據自己情況而定--> docker run -d -p 5000:5000 --name registry --restart=always -v /opt/registry:/var/lib/registry registry <!--查看docker運行的容器--> docker ps <!--查看docker所有鏡像--> docker images <!--配置docker服務支持registry服務--> vim /etc/docker/daemon.json {"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"], "insecure-registries":["192.168.100.10:5000"] <!--添加此行--> } <!--重新啟動docker服務--> systemctl reload docker docker info
三、上傳與下載鏡像
# 給鏡像打標簽 docker tag mysql 192.168.25.140:5000/mysql # 上傳的鏡像 docker push 192.168.25.140:5000/mysql <!--客戶端安裝docker服務,配置鏡像加速--> <!--配置docker支持registry服務 --> vim /etc/docker/daemon.json {"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"], "insecure-registries":["192.168.100.10:5000"] <!--添加此行--> } <!--重新啟動docker服務--> systemctl restart docker <!--客戶端下載私有倉庫中的鏡像--> docker pull 192.168.25.140:5000/mysql docker images <!--查看鏡像是否下載成功-->
四、配置registry加載身份驗證
但是現在存在一個問題,如果這也部署的話企業(yè)內部所有人員皆可訪問我們的私有倉庫,為了安全起見,接下來為registry添加一個身份驗證,只有通過了身份驗證才可以上傳或者下載私有倉庫中的鏡像。
<!--安裝加密工具httpd-tools--> yum -y install httpd-tools <!--創(chuàng)建存放驗證密鑰目錄--> mkdir /opt/registry-auth <!--配置registry身份驗證數據庫--> <!--"-Bbn”參數解釋:B強制密碼加密;b在命令中輸入密碼,不提示輸入密碼;n不更新密鑰文件--> htpasswd -Bbn bob pwd@123 > /opt/registry-auth/htpasswd <!--刪除此服務器上的所有容器,接下來重新生成一個需要身份驗證的私有倉庫容器--> 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
- 上一篇:使用C語言如何輸出逆序數_C 語言
- 下一篇:c++?KMP字符串匹配算法_C 語言
相關推薦
- 2022-07-28 Redis基本數據類型哈希Hash常用操作命令_Redis
- 2022-02-19 小程序監(jiān)聽屏幕滾動 判斷滾動方向上下滾動且滾動到一定位置
- 2022-11-04 python使用tqdm模塊處理文件閱讀進度條顯示_python
- 2022-12-09 Python?keras.metrics源代碼分析_python
- 2022-05-27 一起來看看python的裝飾器代碼_python
- 2022-05-23 C#多線程之線程同步_C#教程
- 2022-09-30 Python學習之pip包管理工具的使用_python
- 2022-06-17 C語言深入講解函數參數的使用_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支