仓库分为2个类型,跟游戏一样,分为官方的以及非官方的,比较官方的名称是叫docker hub以及私有仓库。docker hub在之前的文章有介绍过,在此省过。而私有仓库的搭建方法主要有docker-registry以及harbor。
docker-registry
docker-registry 是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中。企业可以根据自己的需求,使用Dokcerfile生成自己的镜像,并推到私有仓库中,这样可以大大提高拉取镜像的效率。
安装
docker-registry其实就是一个镜像,直接docker run即可。
1 | [root@localhost ~]# docker run -d -p 5000:5000 --restart=always --name registry registry |
推送镜像
安装完成之后,就可以推送了,但由于docker push时默认是上传到https://index.docker.io/v1/,需要先修改一下tag才可以推送至本机的私有仓库
1 | root@localhost ~]# docker tag busybox:latest localhost:5000/busybox |
使用curl就可以查看仓库中的镜像。这里可以看到 {"repositories":["busybox"]}
,表明镜像已经被成功上传了。
网络共享
如果你不想使用 127.0.0.1:5000
作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。你就得把例如 192.168.137.66:5000
这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。如下:
1 | [root@localhost ~]# docker tag alpine:latest 192.168.137.66:5000/alpine |
报错信息已经提示了,默认不允许非 HTTPS
方式推送镜像。我们可以通过 Docker 的insecure-registries配置选项来取消这个限制。
1 | [root@localhost ~]# cat /etc/docker/daemon.json |
私有仓库也是支持https的,配置方法:https://yeasy.gitbooks.io/docker_practice/content/repository/registry_auth.html
harbor
官方的docker-registry由于没有比较完善的可视化界面,在生产环境下如果要搭建私有仓库,这时就需要harbor了。
简介
VMware公司开源了企业级Registry项目Harbor,其的目标是帮助用户迅速搭建一个企业级的Docker registry 服务。它以Docker公司开源的registry 为基础,提供了管理UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文,对广大中国用户是一个好消息。
Harbor核心组件解释如下:
- Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。
- db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
- UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
- jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
- Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
- Registry:镜像仓库,负责存储镜像文件。
- Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
部署
目前harbor已经开源在 github 上,在 https://github.com/goharbor/harbor/releases 下载最新的release版本,目前最新版本是 v1.9.0 。harbor提供了在线和离线两种安装方式,由于离线版本有500多M,对于国内网速就是龟速了,如果机器能通外网,还是选择在线安装版,在安装时,会自动下载很多镜像,但我们有经常加速了,所以就不需要担心速度的事情。
在安装之前,建议先阅读: Installation & Configuration Guide 官方文档。
下载好 harbor离线包 之后,直接解压,修改harbor.yml。主要修改了hostname以及harbor_admin_password,配置如下:
1 | [root@localhost ~]# cat harbor/harbor.yml |grep -v "#" |grep -v '^$' |
修改完成之后,直接 sh install.sh
,稍等10分钟左右,就可以部署完成,这其中的时间,基本上都是去下载镜像。如下,会运行10个镜像。
1 | [root@localhost harbor]# docker ps |
直接访问 http://192.168.137.66
即可以访问了,再进行登陆,账号为admin,密码为上面设置的harbor_admin_password
这样就完成了搭建,很简单吧~
推送镜像
与docker-registry一样,需要设置insecure-registries参数,设置的方法请参考上文。同样,也需要修改tag,但由于使用了密码,所以需要先登陆才能推送。如下:
1 | [root@localhost ~]# docker tag busybox:latest 192.168.137.66/library/busybox:latest |
这样在harbor也是可以看到这个镜像了。