Docker容器私有化仓库部署

前言

有时候使用docker hub这样的公共仓库可能不方便(有时候无法访问),用户可以创建一个本地仓库供私人使用,这里使用官方提供的工具docker-registry来配置私有仓库

私有仓库优点

1
2
3
1、节约带宽,针对于每个镜像不用每个人都去中央仓库上去下载,只需要从私有仓库中下载即可
2、可以自己定制系统
3、有了docker以后,所有软件不在以xxx.exe或xxx.rpm的形式发布,而以docker镜像发布,你只需要下载docker的镜像并运行一个docker实例即可

实验拓扑图

iS0NAx.png

部署Docker私有仓库(192.168.1.88)

1、从官网仓库下载registry镜像
1
2
docker pull registry
docker images

iS0a4K.png

2、映射数据

默认情况下,会将私有仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下

1
docker run -d --name=registry -p 5000:5000 -v /data/registry/:/tmp/registry registry

说明: /data/registry/这个本地目录会自动创建

3、查看私有仓库容器是否启动
1
docker ps

iS003D.png

由上可以看到,已经启动了一个容器,地址为:192.168.1.88:5000

Docker容器平台(192.168.1.89)上传镜像到私有仓库

1、导入已经提前下载好的centos镜像
1
2
docker load -i centos.tar.gz
docker images

iS0DjH.png

2、在上传前需要将镜像做个tag标识,注明IP和端口
1
2
docker tag centos 192.168.1.88:5000/centos
docker images

iS0yDA.png

注意:修改了tag后的镜像若要删除,docker rmi后面不能用镜像ID了,需要用docker rmi 192.168.1.88:5000/centos

3、把修改tag后的镜像上传到私有仓库
1
2
3
docker push 192.168.1.88:5000/centos
The push refers to a repository [192.168.1.88:5000/centos]
Get https://192.168.1.88:5000/v2/: http: server gave HTTP response to HTTPS client

出现上面错误的原因分析:

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。需要在docker的配置文件/etc/sysconfig/docker (ubuntu系统中的docker配置文件是/etc/default/docker)添加参数“–insecure-registry=192.168.1.88:5000”

这里也可以这么操作

1
2
vim /etc/docker/daemon.json
{ "insecure-registries":["192.168.1.88:5000"] }
1
2
systemctl restart docker
docker push 192.168.1.88:5000/centos
1
2
3
The push refers to a repository [192.168.1.88:5000/centos]
e15afa4858b6: Pushed
latest: digest: sha256:7e94d6055269edb455bcfb637292573117e4a8341e9b9abbc09b17d8aafe8fbe size: 529
4、查看私有仓库里的镜像

先开放防火墙的5000端口

1
2
firewall-cmd --add-port=5000/tcp --permanent
systemctl reload firewalld

方法一:

使用客户机的浏览器访问私有仓库192.168.1.88:5000/v2/_catalog查看(最好使用IE浏览器)

iS0R4f.png

方法二:

使用linux的curl也可以查看

1
2
curl http://192.168.1.88:5000/v2/_catalog
curl http://192.168.1.88:5000/v2/centos/tags/list

iS0h8S.png

5、先删除Docker容器平台(192.168.1.89)上的192.168.1.88:5000/centos镜像,然后重新下载,测试私有仓库是否可以正常下载镜像,刚刚上传已经测试了,是可以的
1
2
3
docker rmi 192.168.1.88:5000/centos
Untagged: 192.168.1.88:5000/centos:latest
Untagged: 192.168.1.88:5000/centos@sha256:7e94d6055269edb455bcfb637292573117e4a8341e9b9abbc09b17d8aafe8fbe

删除之后我们再查看,已经没有那个镜像了

1
docker images

iS05vQ.png

接下来就是pull下来,然后启动一下测试

1
docker pull 192.168.1.88:5000/centos
1
2
3
4
Using default tag: latest
latest: Pulling from centos
Digest: sha256:7e94d6055269edb455bcfb637292573117e4a8341e9b9abbc09b17d8aafe8fbe
Status: Downloaded newer image for 192.168.1.88:5000/centos:latest
1
docker images

iS0TDs.png

1
docker run -it centos /bin/bash
博主QQ:1012405802
技术交流QQ群:830339411
版权声明:网站内容有原创和转载,如有侵权,请联系删除,谢谢!!
感谢打赏,93bok因你们而精彩!!(支付宝支持花呗)
0%