您的位置:首页 > 运维架构 > Docker

内网自建Docker Registry

2018-01-17 17:45 459 查看
项目现有CI、CD方案为

提交代码到内网gitlab

自动触发gitlab Runner

gitlab Runner 按照.gitlab-ci.yml配置进行编译打包

gitlab Runner 按照.gitlab-ci.yml配置进行镜像构建

gitlab Runner 按照.gitlab-ci.yml配置将镜像推送到阿里云镜像服务

去内网Portainer管理界面进行手动update

现在的问题是在第5步执行时由于多个镜像通过外网上传到阿里云的镜像服务中去比较慢(受限于上行网速,完成镜像push需要8分钟左右)。

由此想到了在内外自建Docker Registry服务,无论是push还是pull镜像时间至少可以节省一半以上。

这里我们使用的是centos7.3,centos7由于其没有默认开启xfs的d_type特性,docker可能会出现莫名奇妙的问题。安装方法可参考Docker CE 镜像源站-博客-云栖社区-阿里云

https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.70650369sIkk2L

安装并启动docker完成后

执行如下命令

docker run -d -p 5000:5000 --restart=always -v /opt/data/registry:/var/lib/registry --name registry registry:2.6.2


registry:2.6.2中的 2.6.2为显示指定版本,避免直接使用registry导致后期registry镜像升级导致的差异异常

那如何将镜像push到registry呢

我们可以测试将本地进行打个tag,然后push上去

看看本地有哪些镜像

[root@xxx-dev ~]# docker images
REPOSITORY            TAG       IMAGE ID    CREATED     SIZE
portainer/portainer     latest    f71b185552bf   5 weeks ago  33.2MB


给portainer/portainer镜像打tag

[root@xxx-dev ~]# docker tag portainer/portainer 192.168.1.28:5000/portainer/portainer:latest


将镜像传到我们内网的registry

[root@xxx-dev ~]# docker push 192.168.1.28:5000/portainer/portainer:latest
The push refers to a repository [192.168.1.28:5000/portainer/portainer]
Get https://192.168.1.28:5000/v2/: http: server gave HTTP response to HTTPS clie


哦豁,装逼失败。这里我们需要将机器配置一下,最主要的是insecure-registries,其中registry-mirrors为阿里云的加速地址,与本次错误无关。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"insecure-registries": ["192.168.1.28:5000"],
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker


我们再次尝试装逼

[root@xxx-dev ~]# docker push 192.168.1.28:5000/portainer/portainer:latest
The push refers to a repository [192.168.1.28:5000/portainer/portainer]
ac4c534d43cb: Pushed
dd4969f97241: Pushed
latest: digest: sha256:73628b5ded99bb2bf7f3f5e599f7b46044ba5025bea98c32c713afc0d7c972b5 size: 739


成功!

那如何看到我们push的信息呢?

[root@gpf-dev ~]# curl 192.168.1.28:5000/v2/_catalog
{"repositories":["portainer/portainer"]}


我们也可以pull一下来看看

[root@gpf-dev ~]# docker pull 192.168.1.28:5000/portainer/portainer:latest
latest: Pulling from portainer/portainer
Digest: sha256:73628b5ded99bb2bf7f3f5e599f7b46044ba5025bea98c32c713afc0d7c972b5
Status: Downloaded newer image for 192.168.1.28:5000/portainer/portainer:latest


更多请参考

Docker —— 从入门到实践 · GitBook

https://www.gitbook.com/book/yeasy/docker_practice/details
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息