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

时间:2014-05-22 06:47:50

标签: docker

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

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

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

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

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

2 个答案:

答案 0 :(得分:8)

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容器/环境。

答案 1 :(得分:6)

我为Docker工作。

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

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