一个开发人员团队的Docker工作stream程

在我们的团队中,我们目前使用vagrant作为开发环境。 现在我想用dockerreplace它,但是我无法理解团队工作stream程。

这让我感到困惑:在无业的情况下,我创build了一个有Vagrantfile的项目回购协议,每个开发者都会回购一个回购 , 如果项目需要环境变化,我编辑Vagrantfile,厨师食谱或需求文件,开发人员必须运行stream浪汉条款以获得更新的环境。

但是在docker工人看来,至less有两个select:

  • 创build一个Dockerfile并将其放入回购站中,每个开发人员从中build立一个图像。 在每一个改变他们重build自己的形象。
  • build立一个图像,把它放在服务器上,每个开发人员都拉它并运行。 在每一个改变重build和服务器上的图像(可能是一些自动重build在服务器和自动拉脚本)。

Docker phylosophy是“一次构build,随处运行”,但同时我们有一个Dockerfile在回购…你怎么看待这个问题? 你如何在你的团队中做到这一点?

Docker更多的是用于开发的生产

Docker是为生产(或testing环境)打包应用程序的部署工具。 这不是一个发展的工具。 这意味着创build一个独立的环境来运行已经开发的应用程序,在服务器,云端或者笔记本电脑的某个地方。

使用Dockerfile来logging包装

我认为你的项目中有一个Dockerfile是很好的。 与Vagrant文​​件类似,它是一种可执行文档,它描述了您的生产环境应该如何。 刚接触你的项目的人可以运行这个文件,并得到一个打包的,可以随时运行的容器。 凉!

使用registry来集成Docker

如果您将Docker集成到您的(CI)工作stream程中(例如将其集成到testing和构build系统中),我认为您应该提供(私人)Dockerregistry。 存储所有产品的经过validation和testing的图像的单个存储库肯定会加快您创build新testing或生产系统的时间(例如缩放应用程序或为演示或客户设置安装)。 如果您的产品是开源的,请考虑公共Docker索引,以便人们可以在那里find您的东西。 您可以configuration您的构build系统,在每次(成功)构build之后创build一个新的Docker镜像,并将其推送到registry。 由于图像是分层的(并且这些图层是共享的),这将是快速的并且不会占用太多的磁盘空间。

如果你想在你的开发中集成Docker,我不会看到太多的可能性:

  • 您可以创build一个具有最终图像的存储库(如前所述)
  • 或者你可以使用Docker镜像来开发它们(比如运行一个MongoDB)

也许你有一个团队A对B队的API进行编程,总是需要一个B队产品的运行实例。 然后你可以把这个产品打包到一个Docker镜像中,并与团队A共享。在这种情况下,团队B应该在一个仓库中提供镜像(团队A不应该在乎如何构build它并将它用作黑盒子) 。


编辑:如果你依靠很多外部应用程序

为了使这个“团队A和团队B”的事情更清楚:如果你开发一个应用程序对许多其他工具,例如来自另一个团队,MongoDB或Elasticsearch的应用程序,你可以打包这些应用程序到Docker镜像,运行它们)和发展反对他们。 您还将有机会在公共Docker索引中find受欢迎的应用程序(如MongoDB)。 因此,而不是手动安装它们,你可以拉和启动它们。 但是为了把这样的环境放在一起,你需要再次需要stream浪汉。


你也可以使用Docker来testing环境(构build和运行一个图像并testing它)。 但是这不会取代Vagrant的发展。

stream浪+ Docker

我会build议使用两个。 提供一个Vagrantfile来构build开发环境,并提供一个Dockerfile来构build生产环境。

另请参阅http://docs.vagrantup.com/v2/provisioning/docker.html 。 Vagrant自一段时间以来就有了一个Docker集成,所以你可以用Vagrant创buildDocker容器/环境。

我为Docker工作。

把Docker(和Docker索引/registry)想象成等同于Git。 你不必非常努力。 如果您更改Dockerfile,更新映像是一种便宜且快速的操作。 如果您在我们的registry中使用“Trusted Builds”,那么您可以随时在任何时候自动从任何分支构build它。

这些都是基本的构build模块,但对于开发很有用。 Docker本身是在Docker容器内部构build和开发的,所以我们知道它工作正常。