Centos 7.x 使用Docker registry镜像创建私有仓库

作者:袖梨 2022-06-30

有时候使用 Docker Hub 这样的公共仓库可能不方便,并且公司的私有镜像为了业务安全,也不会push到docker hub上,用户可以创建一个本地仓库供私人使用。类似于git 和maven一样,同时节省服务器下载和上传镜像带宽。

那什么是docker registry呢

Docker Registry由三个部分组成:index,registry,registry client。

可以把Index认为是负责登录、负责认证、负责存储镜像信息和负责对外显示的外部实现,而registry则是负责存储镜像的内部实现,而Registry Client则是docker客户端。

我这台服务器已经安装docker1.6版本,至于怎么安装我就不多说了,可以参考这里,centos上部署docker

[root@docker data]# docker -v
Docker version 1.6.2, build ba1f6c3/1.6.2
[root@docker data]# uname -r
4.1.2-1.el7.elrepo.x86_64


安装docker-registry

docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
如果本地没有下载过docker-registry,则首次会pull registry 运行时会映射路径和端口,以后就可以从/data/registry下找到私有仓库,这里查看下我本机的镜像

[root@docker data]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
docker.io/registry   latest              ddfbba49d0b6        21 hours ago        423.6 MB
docker.io/centos     latest              7322fbe74aa5        3 weeks ago         172.2 MB
从上面信息可以分别看出

来自于哪个仓库,比如 centos
镜像的标记,比如 latest 最后一个版本
它的 ID 号(唯一)
创建时间
镜像大小
可以看到registry容器已经启动

[root@docker data]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                    PORTS                    NAMES
ad3469d9302b        registry:latest     "docker-registry"      5 minutes ago       Up 5 minutes              0.0.0.0:5000->5000/tcp   compassionate_newton  
4c86d4e541e3        centos:latest       "/bin/bash"            23 hours ago        Exited (0) 23 hours ago                            high_galileo          
e79a883fdc8b        centos:latest       "/bin/echo 'Hello Wo   23 hours ago        Exited (0) 23 hours ago                            stoic_lalande
访问私有仓库

[root@docker data]# curl 127.0.0.1:5000/v1/search
{"num_results": 0, "query": "", "results": []}
因为我们还没有像私有容器提交镜像,所以这里返回空,下面我们提交一个镜像试试,上面可以看到我本地有一个registry的镜像

使用docker tag 将我本地的id为7322fb474aa5的这个镜像标记为 127.0.0.1:5000/centos

命令格式为 docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]


[root@docker data]# docker tag 7322fbe74aa5 127.0.0.1:5000/centos
[root@docker data]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
docker.io/registry      latest              ddfbba49d0b6        21 hours ago        423.6 MB
docker.io/centos        latest              7322fbe74aa5        3 weeks ago         172.2 MB
127.0.0.1:5000/centos   latest              7322fbe74aa5        3 weeks ago         172.2 MB
[root@docker data]#

镜像的 ID 唯一标识了镜像,注意到 docker.io/centos和 127.0.0.1:5000/centos具有相同的镜像 ID,说明它们实际上是同一镜像。

PUSH 镜像

然后我们将这个镜像push到私有镜像库

[root@docker data]# docker push 127.0.0.1:5000/centos
The push refers to a repository [127.0.0.1:5000/centos] (len: 1)
Sending image list
Pushing repository 127.0.0.1:5000/centos (1 tags)
f1b10cd84249: Image successfully pushed
c852f6d61e65: Image successfully pushed
7322fbe74aa5: Image successfully pushed
Pushing tag for rev [7322fbe74aa5] on {http://127.0.0.1:5000/v1/repositories/centos/tags/latest}

然后我么拿在看下私有仓库中有没有镜像

[root@docker data]# curl 127.0.0.1:5000/v1/search
{"num_results": 1, "query": "", "results": [{"description": "", "name": "library/centos"}]}

可以看到一家有个叫centos的镜像存在了,就是我刚刚上传的镜像。然后你的其他服务器就可以来下载这个镜像使用了

docker pull 192.168.1.222:5000/centos

如果本地有很多镜像想批量上传怎么办,可以用这个脚本

$ wget https://github.com/yeasy/docker_practice/raw/master/_local/push_images.sh; sudo chmod a+x push_images.sh
$ ./push_images.sh ubuntu:latest centos:centos7

这里大家可以看到,访问我们私有库的时候,没有任何权限控制,也就是说别人知道这个仓库地址也可以push 和pull镜像,这样很不安全,大家可以在网络层面,也可以前面加层nginx,然后nginx反向代理本地的5000端口

相关文章

精彩推荐