一、Portus介绍
Docker官方并没有提供Docker registry的用户界面,对权限的控制粒度也比较粗。SUSE的Portus很好地解决了这个问题,Portus是用于Docker RegistryAPI(v2)的开源前端和授权工具,最低要求register版本是2.1。它可以作为授权服务器和用户界面,用于新一代的Docker Registry。
- 安全
Portus 实现了最新的 Docker Registry中定义的新的授权方案。它允许对你所有的镜像进行细颗粒度控制,你可以决定哪个用户和团队可push/pull镜像。
- 轻松管理用户
在Portus映射你的公司,可以定义任意数量的team,并从team添加和移除用户。Team有三种类型的用户:Viewers ,只能pull镜像;Contributors,可以push/pull镜像;Owners,类似contributors,但可以从team添加或移除用户。
- 搜索
Portus提供你的register的内容的预览,同时有一个快速搜索镜像的功能。
- Audit
所有相关事件都会被Portus自动记录,可被管理员用户分析。
二、安装Portus
2.1 安装Docker-Compose
1 2 3 |
$ yum -y install epel-release $ yum -y install python-pip git $ pip install -U docker-compose |
注意这个地方要加一个参数-U,因为会安装这个包backports.ssl-match-hostname,要求版本是大于或等于3.5的,不加-U默认安装的是3.4的,后面安装会报错。如果你没有此问题可忽略。
到这里docker-compse就完成了。
2.2 安装Portus
先到GIT下载包
1 |
$ git clone https://github.com/SUSE/Portus.git |
然后可以选择把Ruby的源改为淘宝的Ruby源,就是为了快。把Portus/Gemfile文件中的第一行源换成“https://ruby.taobao.org”即可。
然后就可以进行构建安装了,但请在安装前先到compose目录看一下docker-compose.yml.template文件,这里面包含web端口和挂载volumes等参数,可以自行进行定义,我这里就默认了。
1 2 |
$ cd Portus/ $ docker-compose up -d |
由于Portus在安装过程中,需要下载几个依赖的镜像包,例如:Portus安装依赖MariaDB,portus_web.tar、rails4.2.2tar,Registry2.1.1.tar安装过程中下载比较慢(网络不好会更慢)。
安装成功后,会启动如下容器:
1 2 3 4 5 6 7 8 |
$ docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------------------------------- portus_crono_1 ./bin/crono Up 3000/tcp portus_db_1 /docker-entrypoint.sh mysqld Up 3306/tcp portus_portus_1 bash /srv/Portus/examples/ ... Up 0.0.0.0:3000->3000/tcp portus_registry_1 /bin/registry /etc/docker/ ... Up 0.0.0.0:5000->5000/tcp, 0.0.0.0:5001->5001/tcp portus_webpack_1 bash /srv/Portus/examples/ ... Up |
修改Docker配置文件
此时,我们还需要修改/lib/systemd/system/docker.service把–insecure-registry 192.168.0.70:5000这句加到ExecStart=/usr/bin/docker这个配置项后。
重启Docker
1 2 |
$ systemctl daemon-reload $ systemctl restart docker |
重启portus容器。
三、Portus配置与验证
3.1 登录配置程序
Portus的登录界面需要创建用户名和密码,然后进行Registry的设置,如下图:
注册完毕后会跳转到登记registry页面:下一步就是创建一个Registry,给定一个名字和Registry地址。
3.2 管理
Portus现在只能管理一个私有库。它有一个团队的概念,每个一团队可以有多个命名空间,每个命名空间就是多个镜像的集合。每个团队有三种角色:
查看者(Viewer):只能pull镜像。
贡献者(Contributor):除了pull,还可以push镜像。
所有者(Owner):除了推拉镜像,还可以对团队成员进行管理。
由于角色是定义在团队里的,所以命名空间就不需要再考虑权限问题了,它只是镜像的集合而已。命名空间也有三种类型:
全局(Global):只有管理员可以push,其他人只能pull。
团队(Team):由团队定义。
个人(Personal):只有所有者和管理员可以推拉。
命名空间可以设置成public,这样不需要login也能pull。
说完一些基本概念,让我们来尝试一下。首先,portus需要配置一个用户,将会用到portus容器启动参数里的PORTUS_PASSWORD 。这个用户是用来调用docker registry的API,与其进行同步的。同步有两种方式:一是在docker registry的配置文件里写的notifications,这样每当有人push一个新镜像上去,docker registry将会通知portus修改数据库。可是时间长了,有可能数据库偶尔挂掉啥的导致两边数据不一致。Portus针对这种情况也提供了一个crono的job,定时运行即可。命令为RAILS_ENV=production CATALOG_CRON=”10.minutes” bundle exec crono 。现在让我们先来创建这个用户:
首先创建一个新用户。点击左边的Admin ,再点击中间的Users ,然后点击右边的Create new user ,填写用户信息即可。
不想写了,具体怎么使用具体看官网文档吧,需要创建https才可以提供服务。
官网:http://port.us.org