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