Docker-它为我们的团队带来了什么真正的价值?

时间:2017-05-10 04:10:03

标签: testing docker continuous-integration

我对Docker非常新。我们的团队有一个非常好的部署阵容,我们为不同的项目(包括Jenkis和TeamCity)提供不同的CI引擎。

开发人员通常会办理登机手续,CI接管,部署并完全为测试团队做好测试准备。我一直认为这是一个完美的模特。当然,有些部分和我们的实现存在缺陷,但它对我们想要的东西非常有用。

现在,我们的Dev-Ops正在推出Docker,测试团队从Docker Registry获取Docker镜像每次我们从teamcity运行构建时。虽然听起来真的很花哨,但我仍然没有理解它的好处。

经过我的研究,我的结论是Dockers可以成为VM的轻量级替代品。但这只是在您使用任何虚拟机时?我们没有使用任何VMS?我只是不明白这里的真正价值是什么?此外,在搜索时我在Docker上找到了一个相对较好的链接:

https://www.ctl.io/developers/blog/post/what-is-docker-and-when-to-use-it/

他们讨论何时应该使用Docker,其中一点是:

只要您的应用需要经历多个开发阶段(dev / test / qa / prod,尝试使用Drone或Shippable,都执行Docker CI / CD),请使用Docker

确定。当我的应用程序必须经历多个阶段时,Howeve rthey没有进一步阐述为什么docker有用呢?

当现有设置已经顺利运行时,它如何对常规开发/测试设置有极大的帮助?

2 个答案:

答案 0 :(得分:2)

首先,您将它与VM进行比较是正确的,因为它类似于VM。然而,docker非常轻巧。这个属性在一开始就让我感到惊讶。与虚拟机相反,容器可以更有效地共享资源。虚拟机是孤立的。容器可以在主机上同时运行,而且开销很小。您可以将容器配置为能够相互通信(通过卷或端口绑定)。

此外,在我的团队中,docker带来了以下好处:

  • 我们的应用程序包含一个大型应用程序和其他几个微服务。但是我们希望将所有应用程序之间的依赖关系释放为一个包,从而消除了确定哪些版本的应用程序和微服务应该一起部署(兼容性)等问题。也就是说,图像包含您需要的所有内容,您可以使用docker-compose将所有应用程序或一个接一个地上下移动。您不需要部署,只需拉动图像并触发容器即可。如果你想停止其中一个微服务,可以在不影响其他微服务的情况下完成。

  • 团队中的开发人员,可以在本地计算机上运行相同的映像,例如解决生产中发生的问题;这意味着可以在与生产相同的环境中进行故障排除。这带来了环境标准化,而且不再是"但它适用于机器"交谈。

  • 它给我们带来的另一个好处是:我们构建一个docker镜像,对它运行我们的测试,并在所有这些阶段成功后将其推送到注册表,这意味着可移植性很强。

  • 能够对容器进行版本控制。您可以轻松地检查当前版本和先前版本之间的容器。如果你想回滚 - 这是顺利完成的。

  • 隔离和保护应用程序。所有容器都是隔离的,您可以轻松控制进出的内容。

答案 1 :(得分:1)

我习惯了这个想法花了一年时间,但现在看起来很简单。

我认为部分原因是人们不断将Docker称为虚拟机"这是不准确的。这真的只是幕后发生的事情的昵称。在很多方面,Docker不会取代完整的虚拟化解决方案,例如VMWare。然而,它确实提出了一种新的基础设施思维方式。许多人很难缠绕他们的人。

您可以开始问自己:Linux发行版的独特之处是什么?

除了内核之外,其他一切都只是一种标准方式"组织二进制文件,库,运行时和配置文件。您需要/ bin中的二进制文件,/ lib中的库,/ etc中的配置。用户安装位于/ usr ...

大多数发行版都将保留Unix遗留的主要结构,并添加自己的怪癖。每个人都有自己的方式来管理和分发包。每个人都将维护自己的库,驱动程序等版本。

关键是内核。这是他们都有共同点的东西。如今,Linux内核的最新版本与几乎所有可用的主要发行版兼容。因此,除了/ boot之外,其他大部分内容都只是在正确的位置使用正确的权限来获取正确的文件。

现在,假设您获取所有分发包(内核除外)并将其全部放在正在运行的操作系统的另一个目录中。利用您已经运行的相同内核,您可以隔离一个新进程,以便它能够"思考"那个/现在是那个目录。答对了!这个过程现在"认为"它在另一个操作系统上独立运行。

Docker建立在Linux Containers之上,这让我们可以做得非常好,但是以更友好和更简单的方式。不要把它想象成虚拟机。将其视为流程隔离。正在运行的内核将使用此过程共享计算机的资源,同时使其与系统的其余部分隔离。它类似jails类固醇。

这是一个广泛的简化。但是,考虑到这个概念,请考虑这个想法的含义。

您可以在同一主机上拥有完全不同环境的多个进程,否则这些进程可能会相互冲突。一个可能是需要旧库的遗留二进制文件(永不死的遗留系统)。另一种可能是最新技术的最新版本。共享相同的内核是一种高效且有价值的资源管理。

我发现的最大价值来自管理基础设施。一旦在主机上安装Docker,配置一个swarm,并定义了一种部署容器的方法,你几乎忘记了主机。添加用户,安装包,自定义,编辑配置文件......所有这些都成为桌面上的开发任务。激励脚本更多,自动化更多。除非绝对必要,否则请将手远离物理机或虚拟机。

有些人改变服务器上一些模糊的设置以解决一些奇怪的应用程序行为,忘记告诉任何人并度过假期的日子已经一去不复返了。对环境的更改可以提交给版本控制,由团队中的每个人跟踪和改进。如果您的数据中心经历了灾难,则重新创建整个环境是重建映像和重新部署容器的问题。您的基础架构变得一致且可重复,同时为各种应用程序保持对各种操作系统和定制配置的开放性。

开发人员可以利用Docker在桌面上重新创建开发/暂存/生产环境。无需使用应用程序服务器和数据库安装来对dev计算机进行轮询,甚至无需使用Virtual Box来模拟所有这些。

可以通过更高级别的隔离自动进行测试。 Selenium团队已经official Docker images了。创建一个完整的测试中心应该是与这些小狗在公园散步。

构建自定义软件,例如使用第三方模块编译Nginx,也可以在专用图像的容器内完成。无需保留整个服务器专用于它,甚至无需使用所有依赖项和构建包来对您的桌面进行轮询。

总的来说,我们一直在使用Docker获得很好的体验。我们已将我们的暂存环境迁移到这个新平台,并计划迁移基础架构的其他部分,最终投入生产。到目前为止,非常好。

我希望你能说服足够多的人更好地看一下。我承认,我花了一些时间来适应这个想法。但是一旦你得到它,它实际上是值得的。