集中式团队开发环境与docker

时间:2015-02-18 10:06:17

标签: docker development-environment fig

我想为我的开发团队(4位PHP开发人员)使用docker构建一个“集中式”开发环境

  • 我有一个运行容器的大型Linux服务器(很多RAM,磁盘,CPU)。
  • 所有开发人员都在此linux服务器(主目录)上拥有一个帐户,他们将(git clone)项目源代码放入其中。在本地(在他们的台式机上),他们可以通过网络共享访问他们的主目录。
  • 我希望所有开发人员能够在同一个项目上同时工作,但在不同的容器(或使用链接容器的项目的容器集)中查看代码编辑的结果。

docker PHP开发环境本身不是问题。我已经尝试过这样的成功:http://geoffrey.io/a-php-development-environment-with-docker.html

我可以使用fig,在每个项目源代码的根目录下使用fig.yml,因此每个开发人员都可以执行fig up来启动给定项目的容器集。我甚至可以为每个帐户使用不同的FIG_PROJECT_NAME环境变量,所以我认为2个开发人员可以fig up同一个项目,他们将不会发生容器名称冲突

有意义吗?

但之后,我真的不知道如何动态地提供对正在运行的容器的访问权限:在运行时,通常会有一个容器中的Web服务器映射到主机中的随机端口。我如何设置一种“动态DNS”来指向正在运行的容器,可以通过nginx反向代理访问(vhost创建和销毁也必须是动态的)?

总结一下,我想要的工作流程:

  • 开发人员ssh进入dev env(大型Linux服务器)。
  • 从他的主目录进入项目目录并执行fig up
  • 在nginx反向代理中创建vhost,指向正在运行的容器,并添加DNS条目(或/ etc / hosts条目),该条目是此先前生成的vhost的server_name。
  • 源代码从主机目录(-v host/dir:container/dir安装到容器中,因此开发人员可以在容器运行时编辑任何文件
  • 可以通过访问vhost查看结果,例如: randomly-generated-id.dev.example.org
  • 当更改正常时,开发人员可以执行git commit / push
  • 然后开发人员执行fig stop,然后删除对应vhost的nginx反向代理,并删除动态DNS条目。

那么,如何进行这样的设置呢?我提到像fig这样的工具,但是如果你有任何其他的建议......但请记住我想保持一个轻量级的工作流程(毕竟我们是一个小团队:))

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

  

有意义吗?

是的,这种设置有意义

我建议看看其中一个项目:

它们都旨在为容器启动时创建DNS条目。然后只需将DNS服务器指向它,每次有人启动环境时你都应该得到一个不错的域名(我不认为你需要一个nginx代理)。但您可能也对这种方法感兴趣:http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/

答案 1 :(得分:0)

现在,还有一个更好的选择:Traefik。它将充当反向代理,侦听80/443,并按主机名区分。然后,它将根据应用于容器的标签动态转发流量。

这是解决您问题的好方法:

1)设置Traefik以侦听docker守护进程,基于端口进行转发

2)确保开发人员的前端应用服务器与traefik位于同一docker网络上

3)将通配符dns入口点设置为服务器。例如:*.localdev.example.com

4)在每个容器上,在该通配符名称空间中设置主机名。例如:jsmith-dev1localdev.example.com。这将在docker标签中指定,例如:traefik.frontend.rule=Host:jsmith-dev1localdev.example.com

这将使开发人员能够按域将流量动态转发到他们自己的dev容器。


是的,我知道这是一个3岁的问题。它仍然会在2018年首先出现在Google上的“集中式Docker开发服务器”上,因此无论如何我都会将其发布以帮助那些当前正在搜索的人。