有些朋友看完了我的kubernetes部署文章之后,咨询关于私有仓库的部署。 私有仓库的部署可以分为三个层次:
其中:还可以配置是否需要使用用户名、密码
来登陆访问私有仓库。
本篇章先简单介绍一下 第一种方式
,后续有时间继续深入将另外两种方式逐步编写文章讲述。
Centos 7 系统已安装好了 docker 服务。 为了避免影响实验,可以将selinux以及firewall都关闭了。
要完成这个目标,首先需要安装启动好register
首先拉取register的镜像
首先可以查阅一下docker hub register的介绍
可以看到现在register 2.0的版本还是比较新的。那么,我们就采用register 2.0来进行实验处理。
[root@server81 registry]# docker search registry
搜索到了这个registry的镜像,表示了官方以及加星,那么下面就下载一下吧。
[root@server81 registry]# docker pull docker.io/registry
查阅一下docker hub register的介绍中关于docker启动的介绍
好了,看到这里大伙应该也知道怎么启动registry了吧。
那么下面我首先给registry的镜像打个tag,避免后续只知道这是最新的版本。
[root@server81 registry]# docker images | grep registry
docker.io/registry latest 2e2f252f3c88 2 months ago 33.3 MB
[root@server81 registry]#
[root@server81 registry]# docker tag docker.io/registry:latest registry:2
[root@server81 registry]#
[root@server81 registry]# docker images | grep registry
docker.io/registry latest 2e2f252f3c88 2 months ago 33.3 MB
registry 2 2e2f252f3c88 2 months ago 33.3 MB
[root@server81 registry]#
下面就是展示一下我编写好的启动脚本了。
register服务的docker启动脚本 restartRegistry.sh
[root@server81 registry]# vim restartRegistry.sh
docker stop registry
docker rm registry
docker run -d -p 5000:5000 --name=registry --restart=always \
--privileged=true \
--log-driver=none \
-v /root/registry/registrydata:/var/lib/registry \
registry:2
执行启动一下:
[root@server81 registry]# ./restartRegistry.sh
registry
registry
82a294241ff7ac05fd8084b1a2c380633bd570780fca5e766e5f3597e988507f
[root@server81 registry]#
[root@server81 registry]# docker ps | grep registry
82a294241ff7 registry:2 "/entrypoint.sh /e..." 13 seconds ago Up 13 seconds 0.0.0.0:5000->5000/tcp registry
[root@server81 registry]#
那么现在是否可以推送镜像了呢?
我们来测试一下推送镜像
首先需要给需要推送的镜像进行tag(打标签),格式: 服务器IP:5000/镜像名称:版本号
其中 服务器IP
是可以改为 域名
的,而 5000
则是 register 对外提供服务的端口号。
那么这里我就用kubernetes的pmd镜像来测试一下(随便一个镜像都可以,不用在意。)
[root@server81 registry]# docker tag k8s.gcr.io/pause-amd64:3.1 172.16.5.181:5000/pause-amd64:3.1
[root@server81 registry]#
[root@server81 registry]# docker push 172.16.5.181:5000/pause-amd64:3.1
The push refers to a repository [172.16.5.181:5000/pause-amd64]
Get https://172.16.5.181:5000/v1/_ping: http: server gave HTTP response to HTTPS client
[root@server81 registry]#
可以发现,docker push镜像到仓库的时候,报错了:
Get https://172.16.5.181:5000/v1/_ping: http: server gave HTTP response to HTTPS client
这是因为http的仓库如果本地的docker没有配置非安全的指向是无法直接推送的。那么下来,我们来看看如何配置非安装访问docker仓库。
配置docker服务访问非安全docker仓库
## 在/etc/docker目录下,添加一个daemon.json文件,写上非安全访问的仓库IP:端口号
[root@server81 docker]# cat daemon.json
{"insecure-registries":["172.16.5.181:5000"]}
[root@server81 docker]#
[root@server81 docker]# pwd
/etc/docker
[root@server81 docker]#
## 重启docker服务
[root@server81 docker]# service docker restart
Redirecting to /bin/systemctl restart docker.service
[root@server81 docker]#
再次推送测试一下
测试推送镜像,成功。
[root@server81 docker]# docker push 172.16.5.181:5000/pause-amd64:3.1
The push refers to a repository [172.16.5.181:5000/pause-amd64]
e17133b79956: Layer already exists
3.1: digest: sha256:fcaff905397ba63fd376d0c3019f1f1cb6e7506131389edbcb3d22719f1ae54d size: 527
[root@server81 docker]#
测试拉取镜像,成功。
[root@server81 docker]# docker pull 172.16.5.181:5000/pause-amd64:3.1
Trying to pull repository 172.16.5.181:5000/pause-amd64 ...
3.1: Pulling from 172.16.5.181:5000/pause-amd64
Digest: sha256:fcaff905397ba63fd376d0c3019f1f1cb6e7506131389edbcb3d22719f1ae54d
Status: Image is up to date for 172.16.5.181:5000/pause-amd64:3.1
[root@server81 docker]#
到了这里,基本上私有仓库已经部署好了。 那么,如何查看仓库里面已经有了哪些镜像呢?
查看仓库里面的镜像
[root@server81 registry]# curl http://localhost:5000/v2/_catalog
{"repositories":["calico/cni","calico/kube-controllers","calico/node","coredns","networkbox","pause-amd64","traefik"]}
[root@server81 registry]#
使用curl的方式,就可以看到仓库里面,我已经推送了哪些镜像了。
好了,有了这个第一层次的部署方法,小伙伴就可以继续愉快地执行kubernetes的部署了,后续有时间,我会继续后面两个层次的部署说明的。