簡介
Docker私有倉庫的Registry是一個服務,主要用于存儲、管理和分發Docker鏡像。具體來說,Registry的功能包括:
-
存儲鏡像:Registry提供一個集中的地方來存儲Docker鏡像,包括鏡像的層次結構和元數據。
-
版本控制:Registry允許同一鏡像的不同版本存在,通過標簽來區分不同版本或變體。
-
訪問控制:Registry可以配置訪問權限,使鏡像倉庫可以是公開的或私有的。這對于組織內部開發、知識產權保護、合規性要求高的項目非常重要。
-
鏡像分發:Registry允許用戶上傳、下載和分享Docker鏡像。用戶可以通過簡單的Docker命令來實現這些操作,而無需直接操作Registry。
構建私有Registry的主要好處是用戶可以完全掌控鏡像的存儲和分發。這對于一些特殊要求的場景,如內部開發、知識產權保護、合規性要求高的項目非常重要。同時,私有Registry還可以提高數據傳輸的效率,特別是在生產環境托管在數據中心機房的情況下,部署在同一機房的Registry可以通過內網進行數據傳輸,從而提高效率。
Docker公司提供的官方Registry稱為Docker Hub,這是一個公共的Docker Registry,包含了數量龐大的公共鏡像供全球用戶使用。然而,在一些場景下,如企業內部開發、安全性需求高的項目,構建私有Registry是更可行的選擇。Docker專門提供了一個名為Docker Distribution的軟件包,用戶可以通過安裝這個軟件包快速構建私有Registry。
環境
Redhat 9.2
主機IP 192.168.200.133
docker版本 26.1.1
步驟
docker以以及部署完成,安裝docker請參考:docker 應用部署-CSDN博客
拉取registry鏡像
[root@admin ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
79e9f2f55bf5: Pull complete
0d96da54f60b: Pull complete
5b27040df4a2: Pull complete
e2ead8259a04: Pull complete
3790aef225b9: Pull complete
Digest: sha256:169211e20e2f2d5d115674681eb79d21a217b296b43374b8e39f97fcf866b375
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest
[root@admin ~]#
[root@admin ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest b8604a3fe854 2 years ago 26.2MB
[root@admin ~]#
創建私有倉庫
[root@admin ~]# docker run -id --name registry -p5000:5000 -v /docker_registry/:/var/lib/registry --restart=always registry:latest
bd9b6b85169dbc8b749f969171ecdaae25b6e94b8e47bf3c44283efeb0b5c01c
[root@admin ~]#
關閉防火墻查看端口
[root@admin ~]# systemctl stop firewalld.service
[root@admin ~]# systemctl disable firewalld.service
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
[root@admin ~]# setenforce 0
[root@admin ~]# ss -anltp | grep 5000
LISTEN 0 4096 0.0.0.0:5000 0.0.0.0:* users:(("docker-proxy",pid=85628,fd=4))
LISTEN 0 4096 [::]:5000 [::]:* users:(("docker-proxy",pid=85634,fd=4))
[root@admin ~]#
?瀏覽器訪問,http://私有倉庫服務器地址:5000/v2/_catalog,能過夠看到 {"repositories":[]} 表示私有倉庫搭建成功
打開配置文件添加私有倉庫的地址和訪問端口
[root@admin ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["https://7f40piyw.mirror.aliyuncs.com"], //注意這里要加逗號分隔"insecure-registries": ["192.168.200.133:5000"] //添加此行
}
[root@admin ~]# systemctl restart docker.service
為鏡像打標簽
為什么要打標簽?如果鏡像是上傳到docker hub默認是不需要為鏡像打標簽,應為默認?的就是公共倉庫(docker hub),如 果是上傳到本地私有倉庫,那么標簽是為了指定本地私有倉庫的地址。
私有倉庫鏡像打標簽語法:docker tag 原鏡像名:原tag 倉庫地址:5000/鏡像名:tag
[root@admin ~]# docker tag registry:latest 192.168.200.133:5000/registry:v1
[root@admin ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.200.133:5000/registry v1 b8604a3fe854 2 years ago 26.2MB
registry latest b8604a3fe854 2 years ago 26.2MB
[root@admin ~]#
上傳鏡像到私有倉庫
格式:docker push 鏡像名:tag
[root@admin ~]# docker push 192.168.200.133:5000/registry:v1
The push refers to repository [192.168.200.133:5000/registry]
aeccf26589a7: Pushed
f640be0d5aad: Pushed
aa4330046b37: Pushed
ad10b481abe7: Pushed
69715584ec78: Pushed
v1: digest: sha256:36cb5b157911061fb610d8884dc09e0b0300a767a350563cbfd88b4b85324ce4 size: 1363
[root@admin ~]#
瀏覽器查看
[root@admin ~]# docker tag mysql:latest 192.168.200.133:5000/mysql:v1
[root@admin ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.200.133:5000/mysql v1 3218b38490ce 2 years ago 516MB
mysql latest 3218b38490ce 2 years ago 516MB
registry latest b8604a3fe854 2 years ago 26.2MB
192.168.200.133:5000/registry <none> b8604a3fe854 2 years ago 26.2MB
[root@admin ~]# docker push 192.168.200.133:5000/mysql:v1
The push refers to repository [192.168.200.133:5000/mysql]
d67a9f3f6569: Pushed
fc8a043a3c75: Pushed
118fee5d988a: Pushed
c654c2afcbba: Pushed
1d1f48e448f9: Pushed
aad27784b762: Pushed
0d17fee8db40: Pushed
d7a777f6c3a4: Pushed
a0c2a050fee2: Pushed
0798f2528e83: Pushed
fba7b131c5c3: Pushed
ad6b69b54919: Pushed
v1: digest: sha256:238cf050a7270dd6940602e70f1e5a11eeaf4e02035f445b7f613ff5e0641f7d size: 2828
瀏覽器刷新查看
刪除MySQL鏡像再次拉取
[root@admin ~]# docker rmi 192.168.200.133:5000/mysql:v1
Untagged: 192.168.200.133:5000/mysql:v1
Untagged: 192.168.200.133:5000/mysql@sha256:238cf050a7270dd6940602e70f1e5a11eeaf4e02035f445b7f613ff5e0641f7d
[root@admin ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 3218b38490ce 2 years ago 516MB
registry latest b8604a3fe854 2 years ago 26.2MB
[root@admin ~]# docker pull 192.168.200.133:5000/mysql:v1
v1: Pulling from mysql
Digest: sha256:238cf050a7270dd6940602e70f1e5a11eeaf4e02035f445b7f613ff5e0641f7d
Status: Downloaded newer image for 192.168.200.133:5000/mysql:v1
192.168.200.133:5000/mysql:v1
[root@admin ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.200.133:5000/mysql v1 3218b38490ce 2 years ago 516MB
mysql latest 3218b38490ce 2 years ago 516MB
registry latest b8604a3fe854 2 years ago 26.2MB
192.168.200.133:5000/registry <none> b8604a3fe854 2 years ago 26.2MB
[root@admin ~]#