写点什么

深入浅出 Docker(四):Docker 的集成测试部署之道

2014 年 9 月 12 日

【编者按】Docker 是 PaaS 供应商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于 Go 语言开发并遵从 Apache 2.0 协议开源。Docker 提供了一种在安全、可重复的环境中自动部署软件的方式,它的出现拉开了基于云计算平台发布产品方式的变革序幕。为了更好的促进 Docker 在国内的发展以及传播,我们决定开设《深入浅出Docker 》专栏,邀请Docker 相关的布道师、开发人员、技术专家来讲述Docker 的各方面内容,让读者对Docker 有更深入的了解,并且能够积极投入到新技术的讨论和实践中。另外,欢迎加入InfoQ Docker 技术交流群交流Docker 的最佳实践,QQ 群号:124378115。

1. 背景

敏捷开发已经流行了很长时间,如今有越来越多的企业开始践行敏捷开发所提倡的以人为中心、迭代、循序渐进的开发理念。在这样的场景下引入 Docker 技术,首要目的就是使用 Docker 提供的虚拟化方式,给开发团队建立一套可以复用的开发环境,让开发环境可以通过 Image 的形式分享给项目的所有开发成员,以简化开发环境的搭建。但是,在没有 Docker 技术之前就已经有类如 Vagrant 的开发环境分发技术,软件开发者一样可以创建类似需求的环境配置流程。所以在开发环境方面,Docker 技术的优势并不能很好的发挥出来。笔者认为 Docker 的优点在于可以简化 CI(持续集成)、CD(持续交付)的构建流程,让开发者把更多的精力用在开发上。

每家公司都有自己的开发技术栈,我们需要结合实际情况对其进行持续改进,优化自己的构建流程。当我们准备迈出第一步时,我们首先要确立一张构建蓝图,做到胸有成竹,这样接下来的事情才会很快实现。

这张时序图概括了目前敏捷开发流程的所有环节。结合以上时序图给出的蓝图框架,本文的重点是讲解引入 Docker 技术到每个环节中的实践经验。

2. 创建持续发布的团队

开发团队在引入 Docker 技术的时候,最大的问题是没有可遵循的业界标准。大家常常以最佳实践为口号,引入多种工具链,导致在使用 Docker 的过程中没有侧重点。涉及到 Docker 选型,又在工具学习上花费大量时间,而不是选用合适的工具以组建可持续发布产品的开发团队。基于这样的场景,我们可以把“简单易用”的原则作为评判标准,引入到 Docker 技术工具选型的参考中。开发团队在引入 Docker 技术的过程中,首先需要解决的是让团队成员尽快掌握 Docker 命令行的使用。在熟悉了 Docker 命令行之后,团队需要解决几个关键问题具体如下:

1)Base Image 的选择, 比如 phusion-baseimage

2)配置管理 Docker 镜像的工具的选择,比如 Ansible Chef Puppet

3)Host 主机系统的选择,比如 CoreOS Atomic Ubuntu

Base Image包括了操作系统命令行和类库的最小集合,一旦启用,所有应用都需要以它为基础创建应用镜像。Ubuntu 作为官方使用的默认版本,是目前最易用的版本,但系统没有经过优化,可以考虑使用第三方有划过的版本,比如如 phusion-baseimage。对于选择 RHEL、CentOS 分支的 Base Image,提供安全框架 SELinux 的使用、块级存储文件系统 devicemapper 等技术,这些特性是不能和 Ubuntu 分支通用的。另外需要注意的是,使用的操作系统分支不同,其裁剪系统的方法也完全不同,所以大家在选择操作系统时一定要慎重。

配置管理 Docker**** 镜像的工具主要用于基于 Dockerfile 创建 Image 的配置管理。我们需要结合开发团队的现状,选择一款团队熟悉的工具作为通用工具。配置工具有很多种选择,其中 Ansible 作为后起之秀,在配置管理的使用中体验非常简单易用,推荐大家参考使用。

Host**** 主机系统是 Docker 后台进程的运行环境。从开发角度来看,它就是一台普通的单机 OS 系统,我们仅部署 Docker 后台进程以及集群工具,所以希望 Host 主机系统的开销越小越好。这里推荐给大家的 Host 主机系统是 CoreOS ,它是目前开销最小的主机系统。另外,还有红帽的开源 Atomic 主机系统,有基于 Fedora CentOS RHEL 多个版本的分支选择,也是不错的候选对象。另外一种情况是选择最小安装操作系统,自己定制 Host 主机系统。如果你的团队有这个实力,可以考虑自己定制这样的系统。

3. 持续集成的构建系统

当开发团队把代码提交到 Git 应用仓库的那一刻,我相信所有的开发者都希望有一个系统能帮助他们把这个应用程序部署到应用服务器上,以节省不必要的人工成本。但是,复杂的应用部署场景,让这个想法实现起来并不简单。

首先,我们需要有一个支持 Docker 的构建系统,这里推荐 Jenkins 。它的主要特点是项目开源、方便定制、使用简单。Jenkins 可以方便的安装各种第三方插件,从而方便快捷的集成第三方的应用。

通过 Jenkins 系统的 Job 触发机制,我们可以方便的创建各种类型的集成 Job 用例。但缺乏统一标准的 Job 用例使用方法,会导致项目 Job 用例使用的混乱,难于管理维护。这也让开发团队无法充分利用好集成系统的优势,当然这也不是我们期望的结果。所以,敏捷实践方法提出了一个可以持续交付的概念 DeploymentPipeline (管道部署)。通过 Docker 技术,我们可以很方便的理解并实施这个方法。

Jenkins 的管道部署把部署的流程形象化成为一个长长的管道,每间隔一小段会有一个节点,也就是 Job,完成这个 Job 工作后才可以进入下一个环节。形式如下:

image source: google image search

大家看到上图中的每一块面板在引入 Docker 技术之后,就可以使用 Docker 把任务模块化,然后做成有针对性的 Image 用来跑需要的任务。每一个任务 Image 的创建工作又可以在开发者自己的环境中完成,类似的场景可以参考下图:

image source: google image search

所以,使用 Docker 之后,任务的模块化很自然地被定义出来。通过管道图,可以查看每一步的执行时间。开发者也可以针对任务的需要,为每一个任务定义严格的性能标准,已作为之后测试工作的参考基础。

4. 最佳的发布环境

应用经过测试,接下来我们需要把它发布到测试环境和生产环境。这个阶段中如何更合理地使用 Docker 也是一个难点,开发团队需要考虑如何打造一个可伸缩扩展的分发环境。其实,这个环境就是基于 Docker 的私有云,更进一步我们可能期望的是提供 API 接口的 PaaS 云服务。为了构建此 PaaS 服务,这里推荐几款非常热门的工具方便大家参考,通过这些工具可以定制出企业私有的 PaaS 服务。

1) Apache Mesos + marathon

Apache Mesos 系统是一套资源管理调度集群系统,生产环境使用它可以实现应用集群。此系统是由 Twitter 发起的 Apache 开源项目。在这个集群系统里,我们可以使用 Zookeeper 开启 3 个 Mesos master 服务,当 3 个 Mesos master 通过 zookeeper 交换信息后会选出 Leader 服务,这时发给其它两台 Slave Messos Master 上的请求会转发到 Messos master Leader 服务。Mesos slave 服务器在开启后会把内存、存储空间和 CPU 资源信息发给 Messos master。Mesos 是一个框架,在设计它的时候只是为了用它执行 Job 来做数据分析。它并不能运行一个比如 Web 服务 Nginx 这样长时间运行的服务,所以我们需要借助 marathon 来支持这个需求。marathon 有自己的 REST API,我们可以创建如下的配置文件 Docker.json:

复制代码
{
"container": {
"type": "DOCKER",
"docker": {
"image": "libmesos/ubuntu"
}
},
"id": "ubuntu",
"instances": "1",
"cpus": "0.5",
"mem": "512",
"uris": [],
"cmd": "while sleep 10; do date -u +%T; done"
}

然后调用

curl -X POST -H “Content-Type: application/json” http://:8080/v2/apps -d@Docker.json

我们就可以创建出一个 Web 服务在 Mesos 集群上。对于 Marathon 的具体案例,可以参考官方案例

image source: google image search

2) Google Kubernetes

Google 的一个容器集群管理工具,它提出两个概念:

  1. Pods,每个 Pod 是一个容器的集合并部署在同一台主机上,共享 IP 地址和存储空间,比如 Apache,Redis 之类分为一组容器集合。
  2. Labels,提供服务标签,方便 Pod 容器之间的调用协作。

通过官方架构设计文档的介绍,可以详细的了解每个组件的设计思想。这是目前业界唯一在生产环境部署经验的基础上推出的开源容器方案,可以预见到未来会成为容器管理系统的行业参考标准。

image source: google image search

3) Panamax

在琳琅满目的集群管理工具面前,如何管理单机的 Docker 容器也是一个需要解决问题。因为 Docker 占用内存小,在单机服务器上部署成百上千个容器也不足为奇。Panamax 提供人性化的 Web 管理界面用来安装软件让部署变得更简单。并且,Panamax 还提供丰富的容器模板,让在线创建服务成为可能。比如到DigitalOcean 申请一台主机,安装一套Panamax 启动为后台服务。然后通过Panamax Web 界面安装Nginx、Mysql、Redis 等服务镜像,这样可以快速搭建生产环境的应用场景。所有的操作都是在Web 界面上完成,开发者只需要关注开发本身即可。

5. 结论

Docker 的集成部署方案,是一套灵活简单的工具集解决方案。它克服了之前集群工具复杂、难用的困境,使用统一的 Docker 应用容器的概念部署软件应用。通过引入 Docker 技术,开发团队在面对复杂的生产环境中,可以结合自己团队的实际情况,定制出适合自己基础架构的配套软件发布方案。

6. 作者简介

肖德时, Red Hat Engineering Service/HSS 内部工具组 Team Leader. Nodejs 开源项目 nodejs-cantas Lead Developer。擅长企业内部工具的设计以及实现。开源课程 Rails Starter 的发起人。rubygem: lazy_high_charts 的 Maintainer。twitter 账号:xds2000,邮箱: xiaods@gmail.com

7. 下期预告

Docker 在生产环境的应用实践已经给大家介绍,下期我将给大家介绍如何基于 Docker 快速构建开发环境,敬请期待!


感谢郭蕾对本文的审校和策划。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 9 月 12 日 04:2439404

评论 1 条评论

发布
用户头像
“Base Image包括了操作系统命令行和类库的最小集合,一旦启用,所有应用都需要以它为基础创建应用镜像。Ubuntu 作为官方使用的默认版本,是目前最易用的版本,但系统没有经过优化,可以考虑使用第三方有划过的” 这段文字最后是不是想说“第三方优化过的”。
2019 年 07 月 03 日 14:01
回复
没有更多了
  • Docker 周报:现代化的分布式应用正成为主流

    Docker市场营销副总裁David介绍了分布式应用的概念以及优势,正如David所说,我们正处在一个分布式应用的时代,2015年将会是分布式应用重要的一年。而Docker也在2014年底发布了分布式应用平台,以简化分布式应用的部署以及扩展。

  • Docker 发布 Machine、Swarm 和 Compose 工具的初始版本

    Docker公司发布了它们基于Docker的分布式应用的编排工具集的初始版本,编排工具集包括Machine、Swarm和Compose。从Docker博客中得知目前的版本尚不可在生产环境使用,但官方正在收集社区反馈。

  • Docker 周报:Docker 1.3 发布

    Docker 1.3 发布、Docker容器在VMware vSphere中的性能测试、微软宣布下一代Windows Server将引入Docker原生支持、PaaS,不是银弹,更多Docker资讯以及教程,请看本期Docker周报

  • Docker 周报:谷歌的容器观

    近日,谷歌云平台团队撰写了一系列的文章分享他们在容器以及容器集群方面的经验。谷歌认为,Docker是一个非常棒的解决方案,目前还没有其它方案能够和它相媲美。但是谷歌认为单机上运行的容器价值不大,企业想解决的问题是如何在不关心细节的情况下运行自己的集群,这也正是Kubernetes要解决的问题。

  • 环境管理:一切皆代码是一种什么样的体验?

    企业环境管理的难点在哪里?为什么说基础设施即代码就是解决环境管理问题的最佳实践?今天,我们来一探究竟。

    2019 年 11 月 16 日

  • Docker 周报:Docker 1.2.0 发布

    Docker1.2.0发布、VMware 收购虚拟机应用交付技术公司 CloudVolumes、虚拟机和Linux Container的性能比较、十大基于Docker的开发工具、Docker火爆的五大原因、Docker 容器托管服务Tutum获得融资,Docker一周新闻汇总,请看Docker周报。

  • Docker 提供对 Mac OS X 和 BTRFS 的支持

    作为0.8版本的一部分,Docker.io团队宣布Docker已经支持在Mac OS X上安装,还支持使用BTRFS替代AUFS。

  • Docker 的安全基准

    Docker 公司与Center for Internet Security(CIS)合作,制作了一份基准文档,包含很多针对部署Docker的安全性的建议。Diogo Mónica在一篇博客“理解Docker的安全性和最佳实践”中公布了该基准,她和Nathan McCauley一起最近受雇来领导Docker的安全团队。

  • Dubbo、SpringCloud 和 Kubernetes 该如何选型?

    Dubbo、SpringCloud和Kubernetes,是当前开发微服务的三个主流开源框架和平台。你随便在GitHub或者哪个IT技术媒体网站上搜一下,这三者肯定是Top关键字,在主流互联网公司的架构师面试中,这三者被问到的频率也极高。那这三个技术到底有何异同,分别适用于什么场景,该如何选择?作者介绍杨波,资深架构师,微服务技术专家。曾在拍拍贷担任基础架构研发总监,主导了拍拍贷的微服务升级改造,同时投入了很大资源进行容器云平台的研发,推动云原生技术在拍拍贷的试点和落地。2012~2015 年,在携程担任框架资深架构师和研发总监,主导微服务核心中间件的研发和 SOA 体系建设,推动了携程微服务架构的升级改造。更早之前,曾在 eBay 中国研发中心作为核心开发人员参与 eBay 开放 API 平台的研发工作。

    2019 年 8 月 6 日

  • 京东 T8Java 架构师分享 Docker 和 Kubernetes 开源书,PDF 版免费下载

    Docker是一个开源的容器引擎,它可以帮助我们更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用Docker,可更快地打包、测试以及部署应用程序,并可减少从编写到部署运行代码的周期。

    2020 年 9 月 25 日

  • 迁移到 Docker:在 RightScale,我们为什么要全部迁移?

    作为一家提供对多云平台统一访问接口的公司,RightScale帮助客户管理云计算提供商的IT流程。随着Docker的流行,该公司也开始关注这一概念。而且随着对Docker的了解,RightScale公司发现了该容器的好处,并准备将软件开发和部署过程迁移到Docker中。Tim Miller是RightScale公司的副总工程师,领导着公司的产品开发与部署工作。在Tim Miller最近的一篇博客文章中,他讲述了RightScale决定要迁移到Docker的原因。

  • 在 Docker 容器中运行 Elasticsearch Kibana 和 Cerebro

    2019 年 6 月 24 日

  • DockerCon 2016 会议:发布内容的总结及主要收获

    在今年Docker领域的峰会DockerCon 2016上,Docker公司发布了最新的Docker 1.12测试版。该版本中包括了一些值得关注的新特性,包括使用Docker Swarm的容器编排工具、运行于Mac和Windows系统的Docker、应用于AWS和Azure平台的Docker,以及新的Docker仓库等。

  • 选择 Docker,还是 Rocket?

    Rocket是一个运行App容器的命令行工具,由CoreOS在2014年底发布,其设计目标包括可组合性、安全性和速度。Alex Polvi是CoreOS创始人,他在接受Adobe移动部门副总裁Matt Asay采访时介绍了推出Rocket的原因。

  • 关于 Docker 的几大误区

    马德奎

  • 第 69 讲 | 茹炳晟:QE 团队向工程效能团队转型的实践之路

    在软件开发和项目执行中,工程效能问题一直是技术管理者考量的关键。

    2018 年 8 月 13 日

  • 构建资源的弹性伸缩

    携程选择了最开放、最易于扩展的Jenkins作为集成构建的引擎,分别从横向的Master高可用和纵向的Slave弹性伸缩两方面,使构建系统更为强大和高效。

    2018 年 8 月 9 日

  • 巨人的肩膀:那些你不能忽视的开源工具

    今天,我会给你介绍几个主要阶段的工具的使用技巧,希望可以手把手地帮助你快速搭建一套完整的持续交付平台。

    2019 年 12 月 19 日

  • Docker 周报:etcd 2.0 发布

    开源软件服务解决方案提供商Black Duck公布了2014年开源项目新秀奖,涉及安全、云存储、比特币、DevOps工具和数据库管理领域,Black Duck 开源新秀奖并不会考虑商业动机,而是根据官方评判的,所以,这些项目能非常形象的展示过去这一年里开发者贡献和参与的方向和趋势。获奖名单中与Docker相关的开源项目有cAdvisor、Kubernetes、Drone-CI。

  • Docker 周报:Microsoft 发布全新的容器技术

    微软正式对外发布了针对云环境的新一代的容器技术:Hyper-V容器和Nano Server。Hyper-V容器是一个新的容器技术,它通过Hyper-V虚拟化技术提供高级隔离特性。Nano Server是最小化的Windows Server的footprint安装包,它针对云环境高度优化,是容器运行的理想环境。

发现更多内容

区块链跨境支付系统开发,usdt支付系统搭建

WX13823153201

区块链跨境支付系统开发

有一说一,大型信息化企业的软件系统,还是用自研的好

Marilyn

敏捷开发 快速开发 开发工具 软件设计

为什么巨头都在布局SaaS生态?

ToB行业头条

SASS

java安全编码指南之:输入注入injection

程序那些事

Java java安全编码 java安全 java安全编码指南

为了省钱,我用1天时间把PHP学完,装进DDD领域驱动设计里!

小傅哥

php 设计模式 小傅哥 架构师

智能时代,快速开发平台将成为主流软件开发工具

Marilyn

敏捷开发

JAVA & VUE ,分离式开发平台建造思路

Marilyn

Java Vue 敏捷开发

Vidyo的解决方案到底是什么?有哪些特点?

dwqcmo

音视频会议 集成架构 解决方案 智能硬件

用友政务表格技术应用开发实践:预算一体化产品核心功能搭建

Geek_Willie

SpreadJS 用友

XJR企业级软件快速开发平台规范

Marilyn

程序员 敏捷开发 软件设计

摆脱复杂烧脑的程序代码,利用快速开发平台轻轻松松做软件

Marilyn

敏捷开发 快速开发

spring-boot-route(十三)整合RabbitMQ

Java旅途

Java Spring Boot RabbitMQ

架构师训练营 1 期第 4 周:系统架构 - 作业

piercebn

极客大学架构师训练营

架构一期第四周作业

Airs

标本兼治,程序员用它整体提升公司效率

Marilyn

敏捷开发 快速开发

大企内部软件系统反复故障难以解决,业内人士:唯有彻底更换

Marilyn

敏捷开发 快速开发 开发工具

OpenFaas 获得 VMworld 2020 年度最佳 Startup Spotlight 大奖

donghui2020

Serverless OpenFaas

架构师训练营第 1 期 第 4 周作业

李循律

极客大学架构师训练营

JAVA代码生成器,快速开发平台之魂

Marilyn

Java 敏捷开发 快速开发 开发工具

快速开发平台,高集成易扩展,进入软件疾速开发新世代

Marilyn

敏捷开发 快速开发 开发工具

MySQL-技术专题-性能优化—索引篇

李浩宇/Alex

Kubeless 快速入门 | 玩转 Kubeless

donghui2020

Serverless kubeless

低代码开发平台,来自“未来”的软件开发方案

Marilyn

敏捷开发

Go发起HTTP2.0请求流程分析(前篇)

新世界杂货铺

go golang HTTP HTTP2.0

深入分析软件快速开发平台与传统软件开发方案的优缺点

Marilyn

敏捷开发

商业智能(Business Intelligence)系统的使用及设计原则

Marilyn

敏捷开发 快速开发 商业智能

Redis Sharding集群跟一致性哈希有什么瓜葛?

Man

一致性哈希 Jedis redis cluster

MySQL 建表为啥还设置个自增 id ?用流水号当主键不正好么?

程序员小航

Java MySQL 开发 工作笔记 流水号

GitHub 上开源了一个很邪恶的项目!女生勿近,18香警告...

程序员生活志

TensorFlow 篇 | TensorFlow 2.x 基于 Keras 的模型保存及重建

Alex

tensorflow keras model save model restore tensorflow hub

快速开发平台,程序员“老师傅”必备

Marilyn

敏捷开发 快速开发 开发工具

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

深入浅出Docker(四):Docker的集成测试部署之道-InfoQ