简介
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 ~]#