我想为我的开发团队(4位PHP开发人员)使用docker构建一个“集中式”开发环境
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创建和销毁也必须是动态的)?
总结一下,我想要的工作流程:
fig up
-v host/dir:container/dir
安装到容器中,因此开发人员可以在容器运行时编辑任何文件randomly-generated-id.dev.example.org
fig stop
,然后删除对应vhost的nginx反向代理,并删除动态DNS条目。那么,如何进行这样的设置呢?我提到像fig这样的工具,但是如果你有任何其他的建议......但请记住我想保持一个轻量级的工作流程(毕竟我们是一个小团队:))
感谢您的帮助。
答案 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开发服务器”上,因此无论如何我都会将其发布以帮助那些当前正在搜索的人。