我司CTO一周精华整理,让你少走三年弯路
今天,Kuick的CTO受邀到数人云做技术分享,现场各位技术大牛拿出的看家干货,据说可以让各位技术伙伴们少走三年弯路,我们CTO更是无比大方地把有关Docker的具体操作详解全部分享给大家。以下就是所有分享内容啦~
1.自我介绍
大家好,我是Kuick的CTO,我叫巫从文。
首先跟大家介绍一下Kuick,Kuick是一家初创型互联网公司,
我们的产品KuickDeal是一款移动端轻量级,
用于远程销售与远程开会的智能远程工具,
可以帮助销售人员在售前与跟进阶段,提升销售效率,也可以让沟通变得更高效更自由。
我主要负责产品的架构设计、处理技术难题、以及产品的上线运维等工作。
喜欢学习新技术并在项目中实践。
2.遇到的问题
部署耗时:由于我们的服务较多,版本发布的时候,需要每个服务都单独编译、打包、部署,一般要1到2个小时才能完成部署任务;迁移麻烦:如果需要部署新的机器,每个新机器还需要配置环境,很麻烦;扩展性差:现在的服务依赖都是单向直接依赖,没有做负载均衡,不能扩展。
3.技术选型
>>>>什么是Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
>>>>什么是Docker Compose
Docker Compose 是一个部署工具,他将所有容器参数通过精简的配置文件来存储,用户最终通过简短有效的docker-compose命令管理该配置文件,完成Docker容器的部署。这样如果用户同时有多个Docker需要启动,就很方便,出现错误时修改也方便。
>>>>什么是Jenkins
首先说什么是持续集成,持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。而Jenkins是一个自动构建服务,使用Java实现,有成百上千插件,使用他可以很方便实现持续集成。
>>>>Mesos和数人云API
Mesos计算框架是一个集群管理器,提供了有效的、跨分布式应用或框架的资源隔离和共享,可以运行Marathon、Hadoop、MPI、Hypertable、Spark等框架。使用ZooKeeper实现容错复制,使用Linux Containers来隔离任务,支持多种资源计划分配。
数人云作为基于Mesos的最成熟Docker生成环境,其提供的弹性的云生产环境、提升资源利用率、高可用、易部署、易使用等特性,使得搭建高可用高并发的系统变得非常容易。
![](https://img.haomeiwen.com/i433168/2e474777e997c195.png)
![](https://img.haomeiwen.com/i433168/9e8c32ac8d12b5ad.png)
4怎么做
![](https://img.haomeiwen.com/i433168/5a915eef36047c76.png)
![](https://img.haomeiwen.com/i433168/81b5ce907a1271bc.png)
>>>>
为每一个子项目编写Dockerfile
为了将我们的项目运行到Docker里面,我们需要用Dockerfile来构建一个镜像。但是每次都从头开始构建镜像会很慢,所以每个项目我们都编写两个Dockerfile。一个用于生成base镜像,另一个用于日常构建。就拿我们的API服务器举例:
>>>>
Docker registry 安装
当我们生成了一个发布镜像,例如 registry.kuick.cn/cc/api-server:1.1.0,为了让其他机器也能访问到这个镜像,我们就需要一个私有的镜像仓库来存储这个新生成的镜像。
![](https://img.haomeiwen.com/i433168/16b0beeea380ee1e.png)
![](https://img.haomeiwen.com/i433168/dc04cd690449f7bc.png)
>>>>Jenkins的安装
sudo docker run --name jenkins -d -p 49001:8080 -p 50000:50000 -v /home/jenkins:/var/jenkins_home --env JAVA_OPTS=-Duser.timezone=GMT+8 jenkins
配置nginx将域名 jenkins.kuick.cn 转到 本机 49001端口
>>>>配置 web server Job 示例
a、基础配置
![](https://img.haomeiwen.com/i433168/0007c39a994999d8.png)
b、源码管理
![](https://img.haomeiwen.com/i433168/1d6082aa9be5c810.png)
c、构建触发
![](https://img.haomeiwen.com/i433168/e1e99e3edfc77baf.png)
d、构建
![](https://img.haomeiwen.com/i433168/6a58f447870972a4.png)
e、构建脚本
f、提交代码后自动构建
>>>>部署集成测试环境
在集成测试环境所有服务跑在一台云主机里,每一个服务都会自动部署,当有开发人员提交代码到对应仓库的开发分支。
>>>>部署QA测试环境-生成镜像
每天晚上2点,集成测试环境的所有服务都将生成一个镜像上传到镜像仓库。通过添加jenkins Job kuick-test-server实现。
![](https://img.haomeiwen.com/i433168/404cbd3fd35e048c.png)
![](https://img.haomeiwen.com/i433168/27fe997717128ea1.png)
![](https://img.haomeiwen.com/i433168/f4ccb01241996362.png)
![](https://img.haomeiwen.com/i433168/b11b1f9aab57d726.png)
>>>>
部署QA测试环境-部署镜像
QA测试环境,由两台云主机构成,部署使用docker-compose来做。
对应节点1的 docker-compose.yml
每天晚上当 kuick-test-server执行完成后将自动触发QA环境的部署
![](https://img.haomeiwen.com/i433168/44c7392153e18ced.png)
>>>>部署内部测试环境
在准备上线前,需要部署一套预发布版,这是通过创建了一个 kuick-test3-server 的 jenkins任务来执行。
![](https://img.haomeiwen.com/i433168/9bf4180328963de9.png)
![](https://img.haomeiwen.com/i433168/ec1a3efb348af03e.png)
这个任务需要手动触发。
![](https://img.haomeiwen.com/i433168/32da78f9e7cac40a.png)
>>>>产品上线
上线通过创建 kuick-prod-server 的 jenkins任务来执行。执行流程跟内测流程一样。
5.总结
自从使用Jenkins后,不再担心忘记部署test2了;自从使用数人云后,不再担心高并发了,哈哈。
以上内容如果大家觉得不够过瘾的话,欢迎来Kuick共同探讨。另外如果有兴趣加入Kuick,可以戳阅读原文,或者联系我哦~
点击http://www.lagou.com/gongsi/93083.html#rd和我们一起工作!