DockerCon 黑客马拉松:连续 Dockery

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

去年, 团队 electric cloud 参加了第一届年度 dockercon hackathon,并作为提交的前三名之一获胜。今年, nikhil 和我回到了一个更大、更糟糕的黑客马拉松活动,这是 docker 巨大增长的证据。

怎么运行的

40 多个由 1-10 名黑客组成的团队花了 24 小时从头开始研究一个项目。提交类别:

  1. 使用 docker 构建、发布和运行很棒的应用程序
  2. 管理和运营:日志记录、监控、ui / kitematic、开发人员工具、部署、ci / cd、stats 等
  3. 编排:组合、调度、集群、服务发现、高可用性、负载均衡等
  4. 安全、合规和治理:授权、出处、分发等
  5. 资源:网络、存储 API 等

每个人提交一段2分钟的视频,并选出10支队伍进行展示。从出席的人中,评委选出前 3 名作为获胜者。

我们的计划

电子云的存在是为了帮助人们更快地交付更好的软件。我们想展示 docker 如何与软件交付生态系统中的其他工具相适应。作为我们自己软件的专家,我们决定使用电子云产品将所有东西联系在一起—— 加速端到端的持续交付 ,使用:

  • electricflow—— 一种编排工具,充当从提交到生产的单一管理平台
  • electricaccelerator – 一种加速工具,通过将构建和测试分布在 cpu 集群中来显着加速构建和测试

去年的参赛作品 侧重于持续交付管道的 构建 阶段。今年,我们专注于 整合 阶段。

我们构建了一个部署流程:

  1. 在 ec2 或 openstack 上动态启动虚拟机
  2. 运行 docker bench 进行安全测试
  3. 从 bintray 和 docker hub 检索工件
  4. 建立运行应用程序的链接 mysql 和 wildfly 容器
  5. 运行分布在集群中的 selenium 测试
  6. 将一些统计数据推送到仪表板
  7. 如果测试成功,则自动拆除虚拟机。


部署过程和涉及的各种技术

24 小时内有很多事情要做!但我们已经准备好完成这项任务——这张图的不太漂亮的版本被鸡在一张纸上划破了,我们开始工作了!

我们建造了什么

我们选择了一个名为 heat clinic 的示例 Web 应用程序,因为它有几个移动部件(应用程序服务器和数据库),这使它成为一个比较现实的示例。我们从构建 持续交付管道开始。


electricflow 中定义的持续交付流水线

对于这次黑客马拉松,我们专注于集成阶段。尽管如此,了解管道是什么仍然很重要——以确保自动化部分是 可重用的 ,并且了解它们将如何被重用是关键。牢记这一点,我们构建的所有内容都可以毫不费力地插入生产(或任何其他阶段)。

下一步是 为应用程序建模 。 Heat Clinic 应用程序有两层,一层用于 Web 应用程序,一层用于数据库。每个层都有一些不同的组件(工件)——来自 docker hub 的 wildfly/mysql 容器、web 应用程序的 war 文件、配置文件、sql 初始化脚本等。我们定义了层、组件和过程部署或取消部署这些组件中的每一个。


electricflow中定义的应用模型

接下来,我们定义了 协调一切的部署过程 。这个过程与前面显示的图表密切相关:启动动态环境,运行安全测试,检索所有工件,建立容器(以正确的顺序),运行 selenium 测试,如果一切正常则拆除环境是成功的。


electricflow中定义的部署过程

我们放在一起的 selenium 套件需要很长时间才能运行,我们意识到这对于 selenium 来说并不少见。所以我们使用 electricaccelerator 加速了 selenium 测试套件 。通过将 101 个测试分布在两个 4 核虚拟机上,Accelerator 使用其 获得专利的秘方 在各个内核上并行化和运行测试,从而将总时间从 >27 分钟减少到 <4 分钟。只需 2 台机器,速度就快了 7 倍!如果我们要向集群添加更多虚拟机,我们可以将时间缩短到 <30 。那 快了 60 倍!


可视化 electricaccelerator 如何在集群中分布 selenium 测试

最后,我们通过将一些关键统计数据推送到 dashing 来为我们的工作画上漂亮的脸——通常显示在电视屏幕上,这样每个人都可以“一目了然”地了解系统的健康状况。


仪表板显示关键统计数据

我们的提交

虽然这次我们没有获胜,但我们确实提出了一个非常酷的故事和一组工作集成 ,在持续交付的背景下突出了 docker 。以下是我们希望解决的痛点:

  • 你在看 docker 但需要 将它与一堆现有工具结合在一起
  • 您希望通过实施持续交付和持续测试来 提高速度
  • 您需要为您的应用程序收集和显示 关键统计数据
  • 您想确保尽早 审核安全性
  • 您想 尽早并经常运行长时间运行的集成测试

在我们提交的 3 分钟短视频中查看整个流程:

我们已经在期待明年的 dockercon 黑客马拉松。届时看看快速变化的 docker 格局会很有趣!

如何将 docker 集成到你的 cd 管道中?

像 docker 这样的容器技术承诺可以快速提供版本化、环境无关的应用程序服务。然而,创建、验证、推广和交付 Docker 容器到生产环境中所涉及的任务和工具很多、复杂且耗时。

要了解更多关于如何成功地将 docker 作为端到端持续交付管道的一部分的信息,我邀请您与我的同事 nikhil vaze 和我一起参加即将举行的网络研讨会,届时我们将讨论: