Skip to content

Instantly share code, notes, and snippets.

@xishuixixia
Last active August 29, 2015 14:20
Show Gist options
  • Save xishuixixia/11cbfe8e9cb35403c760 to your computer and use it in GitHub Desktop.
Save xishuixixia/11cbfe8e9cb35403c760 to your computer and use it in GitHub Desktop.
平安健康的Docker应用与实践经验

做为容器技术的代表,Docker已经逐渐获得了企业的认可。之前InfoQ就有报道过,国内的新浪微博、雪球网等互联网公司都在生产环境中成功使用了Docker。而对于一些传统公司,他们的IT设施薄弱、应用架构复杂,在拥抱Docker时,可能遇到的问题相对较多。为此,InfoQ采访了平安健康互联网技术平台资深架构师王延炯。另外,王延炯将在5月26日的PWorld 软件架构&平台创新大会上分享题为《基于Docker的开发、运维一体化实践》的主题演讲。

InfoQ:您认为Docker最大的优势是什么?当时公司为什么决定使用Docker?

王延炯:Docker优势有几点,首先是轻量级,其次是面向管理透明,最后是生态环境正在逐步建立、社区活跃。轻量级的容器这点,是大家都公认的优势,我不做过多解释。而面向管理透明主要是指Dockerfile与AUFS的结合,使得软件的运行环境面向开发、测试、运维团队变得透明。而Registry是平台软件云化的特征之一。另外,Docker的迅速发展,与其生态环境的蓬勃发展是相辅相成的,例如有Jenkins、Ansible等一系列面向CI以及运维友好的工具平台迅速支撑。

我们公司面向技术平台的选型,还是比较开放的,各个团队可以选择适合自己的平台,可以尝试新技术,但目的只有一个,提高公司整体的运营效率。选择Docker,一方面因为是以上提到的几个优势点,另外它也是虚拟化(如XEN/KVM)技术、容器技术两者并行发展过程中,沉淀出一套适合于公司特点本身,需要取长补短、逐步形成一套最佳实践的必经之路。

Docker技术本身还是在不断的发展之中,作为一个新技术,它的出现改变了很多原有软件研发的流程。将其应用到生产环境,第一,对大公司而言是需要公司整体进行调整,不仅仅是技术本身,还有配套的组织结构、管理制度与流程相结合;第二,Docker本身的网络、存储、监控等技术领域的关键问题还需要进一步的验证和实践,才能够将其应用到相应的生产环境。第三,生产环境的安全等级(包括稳定性要求),也是根据不同的业务等级会有不同的要求,一些低等级的生产环境,使用Docker是没有任何问题的。

InfoQ:你们的Docker应用场景是怎么样的?能介绍下你们所使用的技术栈吗?

王延炯:关于Docker应用场景,目前各个技术团队都根据自身的特点进行应用,大体上主要将Docker应用于开发、测试环境,不同的场景使用的技术栈也有区别。

在开发测试环境会使用SaltStack等技术对容器进行集中化管理,其主要使用方式较为传统,主要为开发测试人员提供主机(操作系统)级服务,这与整个团体的软件研发过程息息相关。

在SCM/CI平台,有相当大一部分开源工具已经由社区实现了Docker化,能够方便的将代码与数据分离,使得平台能够进行快速升级、二次开发与定制。

在细节方面,诸如IP地主与主机名、IP地址(DHCP)与域名都进行了一定程度的二次开发与集成,目前可以实现Docker容器实例、主机名、域名绑定的Web端一键式自助分配与注册。

InfoQ:可否详细聊聊你们基于Docker的workflow吗?

王延炯:关于Docker的workflow,如之前提到的,有基于Web端的一键式主机(也就是Docker容器)分配平台,支持开发、测试环境的主机自动创建、IP分配、域名绑定,并包含与组织结构的审批流程。

另外,在我团队所使用的Docker环境中,会将Docker与Jenkins/GitLab等平台工具相结合,一方面将代码固化至Docker镜像中,一方面将配置文件作为数据分离到镜像之外。这样做的好处是,在一些无状态的业务逻辑服务中,往往只需要『代码+环境配置』,就可以部署到不同的运行环境中。例如同一份代码,与不同的开发、功能测试、性能测试环境配置相结合(docker -v参数),就能够快速部署相应的服务实例,并且可以与Docker自带的restful接口做集成,甚至是使用IntelliJ 14.1的Docker插件,能够做到从IDE到目标环境的一键式快速发布与部署。需要注意的是,这样做需要把程序的所有配置做尽可能地集中化处理,并且以Key-Value格式,降低错误几率。

InfoQ:Docker有很多的坑,你们的应用过程中是不是也遇到了?可以和大家分享下你印象深刻的几个坑吗?

王延炯:Docker的坑,在实际最多的还是集中于网络。大多数的使用场景,还是需要解决容器在不同的宿主机之间的可达性,这是决定Docker应用范围的第一步。简单的使用端口映射,往往不能够解决运行期的端口动态监听和容器间互联。

另外,Docker的性能监控,也是决定Docker应用于什么样等级的业务系统的关键因素,这也是近期除了网络之外主要深耕的一个领域。目前还没有对Docker进行代码级的优化和hack,侧重点还是在团队的整体运行效率、软件过程效率、业务持续交付中。

InfoQ:你怎么看最近CoreOS和Google的Kubernetes联姻的事情?

王延炯:由于没有Kubernetes和etcd有很多的实际使用经验。所以这里我仅从个人角度来聊聊,容器实时监控与实时管理,是自动化运维的两个重要的左膀右臂,一个实时提供运行数据,一个实时对目标进行操作。

Kubernetes是一个领先的容器管理平台,etcd又可以很好的对每个节点的运行状态进行监控,两者相结合应当是一个非常有效的平台工具。当然,将两者的集成不单单是技术维度所要解决的问题,还需要与组织、软件过程、运维等多个非技术维度进行综合考虑。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment