开发人员团队的Docker工作流程

Ale*_*nko 17 docker

在我们的团队中,我们目前使用vagrant作为开发环境.现在我想用docker替换它,但我无法理解它的团队工作流程.

这让我感到困惑:我和vagrant一​​起创建了一个带有Vagrantfile的项目仓库,每个开发人员都会撤回一个仓库并运行流浪者.如果项目需要对环境进行一些更改,我会编辑Vagrantfile,chef recipe或requirements-file,开发人员必须运行vagrant provision才能获得更新的环境.

但是对于docker我至少看到两个选项:

  • 创建一个Dockerfile并将其放入repo中,每个开发人员都从中构建一个图像.每次改变都会重建自己的形象.
  • 构建一个图像,将其放在服务器上,每个开发人员都将其拉出并运行.在每个更改重建和服务器上的映像(可能在服务器和自动拉动脚本上的一些自动重建).

Docker的哲学是"一次构建,随处运行",但同时我们在repo中有一个Dockerfile ......您如何看待它?你是如何在你的团队中做到这一点的?

Tho*_*rig 9

Docker更适合生产和开发

Docker是一个部署工具,用于打包生产(或测试环境)的应用程序.它不是一个发展工具.它旨在创建一个隔离的环境,以便在服务器,云或笔记本电脑上的某个位置运行已经开发的应用程序.

使用Dockerfile记录包装

我认为在你的项目中有一个Dockerfile很好.与Vagrant文​​件类似,它是一种可执行文档,描述了您的生产环境应该如何.对您的项目不熟悉的人可以运行该文件,并获得一个打包且可立即运行的容器.凉!

使用注册表来集成Docker

如果您将Docker集成到您的(CI)工作流程中(例如,进入测试和构建系统),我认为您应该提供(私有)Docker注册表.用于存储所有产品的经过验证和测试的图像的单个存储库肯定会加快您创建新测试或生产系统的时间(例如,扩展应用程序或为演示或客户设置安装).如果您的产品是开源的,请考虑公共Docker索引,以便人们可以在那里找到您的东西.您可以将构建系统配置为在每次(成功)构建后创建新的Docker镜像并将其推送到注册表.由于图像是分层的(并且这些图层是共享的),因此速度很快,不会占用太多磁盘空间.

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

  • 您可以使用最终图像创建存储库(如前所述)
  • 或者你可以使用Docker镜像来开发它们(例如运行MongoDB)

也许你有一个团队A,它针对团队B的API进行编程,并且总是需要团队B产品的运行实例.然后,您可以将此产品打包成Docker镜像并与团队A共享.在这种情况下,团队B应该在存储库中提供图像(团队A不应该注意如何构建它并将其用作黑盒) .


编辑:如果您依赖许多外部应用程序

使这个"团队A和团队B"的事情更加明确:如果您针对许多其他工具(例如来自其他团队的应用程序,MongoDB或Elasticsearch)开发应用程序,您可以将这些应用程序打包到Docker镜像中,运行它们(本地并发展反对他们.您还有机会在公共Docker索引中找到热门应用程序(例如MongoDB).因此,您可以手动安装它们,而不是手动安装它们.但要将这样的环境组合在一起,你将再次需要Vagrant.


您还可以将Docker用于测试环境(构建并运行映像并对其进行测试).但这不会取代Vagrant的发展.

Vagrant + Docker

我建议同时使用两者.提供Vagrantfile来构建开发环境并提供Dockerfile来构建生产环境.

另请参阅http://docs.vagrantup.com/v2/provisioning/docker.html.Vagrant有一段时间的Docker集成,因此您可以使用Vagrant创建Docker容器/环境.


小智 6

我为Docker工作.

将Docker(和Docker索引/注册表)视为与Git等效.你不必非常努力.如果更改Dockerfile,则更新图像是一种便宜且快速的操作.如果您在我们的注册表中使用"Trusted Builds",那么您可以随时在任何分支上自动构建它.

这些是基本构建块,但它非常适合开发.Docker本身是在Docker容器内构建和开发的,所以我们知道它工作正常.

  • 那么您的团队是否只是通过注册表共享Dockerfile或图像?前者表明每个开发人员最终都有自己的工作环境图像?单个开发人员是否有责任将项目文件添加到其docker容器中,或者是Dockerfile的那部分?在git工作流程中,通过中央仓库与其他人共享提交; 如果docker是等价的,我希望从注册表中提取最新的图像,但我发现项目文件处于各种状态(即git分支等)的问题.我仍然不确定你的答案:( (4认同)