一个基于 Docker 的私有云方案
最近调研了很多 Docker 相关的项目,希望能够搭建一套稳定的基于Docker的私有云方案。
基于 Docker 的私有云,本质是一整套以 Docker 为核心的,
代码托管 -> 自动构建 -> 私有镜像托管 -> 容器创建 -> 动态负载 工作流。
首先看一下开发流程,也就是代码托管 -> 自动构建 -> 私有镜像托管
常见的代码托管方案
- SaaS: Github, Bitbucket ( Stash 也更名为 Bitbucket 了,本文中的 Bitbucket 特指 Bitbucket.org, Stash 特指私有部署版的 Bitbucket ) 等
- 私有部署: Stash, Gitlab, Gogs, gitosis 等
首先剔除掉 SaaS,因为国内网络访问和付费等各种原因。开发还可以,有各种科学上网手段,但是如果要和线上服务器联动,不稳定因素太大。其次剔除掉一些无 WebUI 的方案,因为功能太弱了。
在 Gitlab, Gogs, Stash 中,我更倾向于选择 Gitlab
Stash 私有部署的授权费用不低。破解版首先有侵权问题,其次版本过低。不过 Stash 和 Jira 等 Atlassian 公司的产品链接非常方便。Gogs 功能很全,但是没有 Gitlab 功能强大。
Gitlab 基本上覆盖了 Github 的常用功能,此外支持 gitlab-ci 自动构建,内置 Docker Registry,并且有完整的 Registry 权限控制和管理UI。
基本上 Gitlab 一个就可以覆盖 代码托管 -> 自动构建 -> 私有镜像托管 这三步
然后是部署流程,也就是 私有镜像托管 -> 容器创建 -> 动态负载
这一步我强烈推荐 Rancher
Docker 官方的 Swarm Mode + UCP, DockerUI 后继者 Portainer 都只有基本的容器管理功能。
Rancher 支持 Cattle,Kubernetes 和 Mesos 三个资源编排引擎,内置IPSec虚拟子网,内置 HAProxy 负载均衡服务,通过 WebUI 就可以把多台节点组合成一台大的 Docker 宿主机,然后动态地把网络请求负载到各个容器上。
此外 Rancher 还有一大堆插件,从 管理外部 DNS 服务器,到申请 Let's Encrypt HTTPS 证书,应有尽有。
理想环境下(使用 DigitalOcean 等带 API 的 主机提供商,使用 SimpleDNS 等带 API 的 DNS 服务提供商),在 Rancher 的 WebUI 上,通过点击就可以完成 VPS 配给, DNS 配置,HTTPS 证书申请,启动容器,动态负载均衡所有任务,岂不妙哉。
目前我的结论是,Gitlab + Rancher 似乎是建立一套基于 Docker 的私有云方案的一个很好的选择。