这篇文章是对我们的网络研讨会(Codefresh周四,2017年2月9日)的一个简短总结。研讨会包括两个论题:“Docker内在/外在:由Daniel van Gils实现的现实中“真实”的在生产中应用的容器栈和Alexei Ledenev对于容器驱动开发的测试策略。如果你错过了会议,观看下面视频了解更多关于Docker在生产运行和检查的测试策略部署方面的技巧和窍门。
在生产中运行容器的12个阶段
前两个阶段是非常简单的。你已经知道开发你工作的项目所需要的方法。你听说了容器技术,然后你看看容器到底能做什么以及它看起来到底有多神奇!
接下来,在第三阶段,你开始想,“我怎么能在我目前的工作流程中运用到容器技术?“然后你进行一些调研来论证是否容器即使可行,在此你需要在生产上实践使用容器,积累实践知识和经验。
阶段四:拜见你的导师!你的导师是已经在生产中使用容器,比你更加了解容器,而且很乐意在容器的旅程中带你飞。
利用artichoke模型,可以看出你所在公司当中的每一个从容器受益的角色。每个人都需要理解容器的核心概念及其对组织的影响。这是转变管理的一部分。
阶段五:现在,你穿过阈值并开始真正投入到容器机器当中。试着在一个简单的项目当中应用容器,然后再其它更加复杂的项目上应用容器技术。这个过程中将会涉及大量的测试(Alexei的讲话中更多的介绍了关于容器的测试)。
黄金法则:确保容器先在本地测试通过,然后在移植到生产环境!全局思考,本地执行。
阶段六:你使用容器,并且遇到一些问题,然后犯一些错误。这同样是此过程的一部分。试着退一步,花时间去找到一个解决方案,你会发现并没有捷径。在这个阶段大多数开发人员意识到他们的Docker镜像包含太多的组件,然后其中有一半的组件是没有任何用处的。试着简洁化你的镜像。
记住: 屎一样的组件被打包进去,一定会产生屎一样的镜像。你不可能把屎一样的东西改进的不像屎。
欢迎来到七阶段。现在,你更了解你的镜像需要长什么样子。你需要保持轻量、安全、快速、稳定、设置!
阶段八。终于到了生产阶段!首先,让我们做一个真是的检测。每个人都真的使用微服务吗?答案是否定的。
阶段九。现在,你知道容器生态系统的所有部分以及你需要掌握哪些。这是你的容器初级形态:
阶段十:概念的验证。完成了。你知道如何实现容器,你需要一些空间去了解容器之外的服务和产品,并密切关注市场的新技术。
阶段十一。随着你不断的积累知识和经验,你形成了一个新的方式,也就是你明白在基础设施中你需要如何去适应你的容器。
阶段十二。你已经是一个容器圈的英雄。你以及加入你的旅程的人都了解到了容器的力量以及它如何应用到所有的项目和部门。
Alexei 开始进行了容器架构组件的描述,列出了使用容器技术好处的清单,如可移植性、速度、配置、灵活性等等。
在我们介绍测试场景之前,我们介绍一下演示应用程序的组件和测试样例:
1. 修改现有的Pipeline
场景1号(又名天真方法)需要修改现有的管道。
从29:30开始网络研讨会上可以看到第一个场景演示。
输出结果:你会获得一个熟悉的CI流,可移植应用程序,以及较小的Docker镜像,但不会有便携式开发或测试环境。
这意味着它在CI之外是不可能复制相同的开发或测试环境。同样的程序必须为每台机器的重复。
2. 我们如何改善这种情况?
把所有的Cl流(编译和测试)移至容器中。
从33:38开始网络研讨会上可以看到第二个场景演示。
结果是,你将获得一个简单的CI流,可移植的应用程序和可移植的开发和测试环境。缺点是,Docker镜像变得更大、被污染而且存在一些不必要的依赖包。每次都必须重新构建镜像包的代码,或者测试更改的话你需要决定如何管理测试结果。
3. 把镜像拆分成两个
在这个测试场景中,你还有一个Dockerfile包含应用程序和测试代码,但是你需要提取出镜像层然后拆分成两个镜像。
从38:31观看网络研讨会第三个场景演示。
现在,应用程序具有可移植性以及便携式开发和测试环境,最后得到两个不同的镜像和一个Docker file,但代码或测试更改时你仍然需要重新构建整个Docker 镜像。同时,你需要一些shell“魔法”来创建一个清洁的应用镜像。
4. 创建Docker自动化流
你可以通过按照每一步来实现容器自动化,包括构建和测试。
从42:56观看网络研讨会第四个场景演示。
你会实现应用程序的可移植性,便携的开发和测试环境(这样你就可以在任何地方构建和测试),一个很小的应用镜像,以及实现快速构建。然而,你仍然需要一个工具来自动化和编排Docker建立流,如bash、ansible、dobi、Habitus.oi或Docker CI / CD服务像 Code Fresh或者Cloud66。