我们是一个由大约15名开发人员组成的小组,负责同一个项目。有些人在FE方面工作(Angular 5),有些人在BE方面工作(python,go和postgressql)。
随着开发人员的来去,创建新的开发环境并维护它变得非常困难。此外,从应用程序的一个版本移动到另一个版本变得非常困难,因为有不断的数据库更改。
我们有一个bash脚本从GitHub中提取所有存储库并安装它们,但我们想要开始使用更专业的东西。
我们考虑过使用Docker。我已经阅读了很多内容,它似乎是我们的完美部署解决方案。
但我的问题是Docker是否也是我们开发周期的正确解决方案。
有很多关于如何创建Docker镜像并进行部署的好教程,但我无法找到解决问题的方法。 如果答案是肯定的,那么在开发新功能时,如何为应用程序提供服务并观察文件更改?
也许Vagrant是一个更好的解决方案?
答案 0 :(得分:2)
对于后端部分,它可以完美地完成工作。您甚至可以在每个容器重启或加载灯具时重置数据库以执行环境重置。使用卷将代码放入de容器中,这样您就不需要在开发期间重建代码。对于角度部分,我没有看到任何优势,因为该代码在浏览器上执行。您可以使用Docker提供的Api,但Docker无法帮助您更快地开发Angular。
答案 1 :(得分:1)
我们最近从使用Vagrant转向使用Docker为我们的团队创建开发环境。依赖管理是真正的优势,因为我们基本上只需要docker-compose up
,并且每个应用程序组件都在运行,包括我们可以docker exec -it <container-name> bash
进入的开发环境容器。它可以在字面上开发任何可以运行Docker的平台,而不需要安装其他依赖项。
缺点是有一些额外的启动时间和锅炉板。我仍然希望尽可能在我的主机上安装依赖项。 Docker也可以帮助实现这一点。开发环境Dockerfile在您需要查找依赖项时充当真实的来源,并且需要我无法在本地安装的组件(如Ubuntu)的组件可以在他们自己的Docker容器中运行,而我在其他组件上工作(就像JS前端)在我的主机上。
无论如何,我认为这是管理项目的一种不错的方式。肯定比Vagrant好。如果您对要引用的内容感到好奇,可以查看https://github.com/hyperledger/sawtooth-supply-chain。它有dev环境(supply-shell),两个Mithril.js客户端,由Apache容器,Node.js API(供应服务器),RethinkDB容器以及在各种容器中运行的一堆区块链组件提供服务。 / p>
答案 2 :(得分:-1)
在我看来,Docker不适合你所寻找的东西。您正在谈论对代码进行大量更改并将它们合并到图像中。
Docker是容器化的,因此除非您直接在图像中进行更改,否则您仍需要使用图像外部的代码来更改它。如果您确实在图像内部进行了更改,则仍需要在图像外部进行更改,以便重新编译图像。
Docker是一个很棒的工具,但除非您只是在该容器外部设置文件的开发环境,否则它对于您的目标来说并不是那么好。
只是我的想法。就像我说的,您可以在docker容器内设置开发环境(工具,框架等),但仍需要在其外部设置文件。