编者按:随着国内对Docker的应用逐步深入,越来越多的实践经验涌现出来。特别是科技前沿的互联网公司,对于Docker和微服务架构的接受程度更高,应用也更成熟。 GeneDock是一个生命健康数据创业团队,创始人为前友盟首席数据科学家李厦戎和前阿里云资深专家王乐珩。旨在提供安全、易用、开放的基因数据云计算服务,致力于提高基因数据流动性,促进行业应用发展。 本文由GeneDock实习工程师胡英谦撰写,介绍了GeneDock如何基于Docker容器技术,构建一个自动化、易管理、高可用的运维部署系统。如果你有更好的经验分享,欢迎投稿。
超过二十个模块分别负责平台的各项功能,例如接口、权限、资源管理、编译、调度、监控等,模块之间通过RESTful接口相互通讯。 模块这么多,如果没有自动部署工具,运维工程师全凭手工操作,在敏捷开发的快节奏下,升级部署会成为一个大坑。 于是需求来了:用程序代替人,实现脚本化甚至自动化部署。 大多数工程师都会想到两件事:
真挽起袖子来干活儿,就发现问题:最初模块之间还未隔离干净,存在代码和路径依赖。因此每个服务的Docker镜像制作脚本都不相同,藏了很多黑魔法在里面。例如从其他模块拷贝某个源代码文件过来,甚至是多个服务不得不共享一个镜像。新版本代码稍有变化,部署脚本就得改,很容易出错。 Bad Smell!完美主义的GDers热情高涨,开始重构:
经过精心重构,达到了以下目标:
但部署过程还有点漫长:
事实上,已经有许多专业的第三方云服务功能强大且聚焦,能够帮助我们大大提高部署效率,花的费用也不多。所以,作为云服务信徒的我们使用了以下代表先进生产力的服务:
采用了以上服务,实现了发布与部署的分离。发布时只需 在GitHub上打一个Tag,部署系统就会在服务器上通过执行命令docker run从官方Docker Hub 上拉下服务镜像然后启动容器,能够方便地支持异地部署与回滚。这样真正发挥了 Docker 的好处:服务装箱,下载即用。 GitHhub 和 Docker Hub都有着完善的私有化和权限支持。对于自建的pypi源与其他可能被外网访问的服务,我们使用了 Nginx 反向代理进行转发,在转发时使用 Nginx 的基本认证进行鉴权,兼顾了便利性与安全性。 也就是说,经过再次完善,我们又有进步:
新的架构如图:
构建这套系统时,除了自己摸索,还参考了一些最佳实践与文档,甚至阅读了Docker源码,每个公司情况不同,需要结合实际确定具体方案。 原文链接见【阅读原文】
本文转载自:微信公众账号 - Container技术日报,版权归原作者所有! |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|