1

我想为我的开发团队(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 反向代理访问,比如说(虚拟主机的创建和销毁也必须是动态的)?

总而言之,我想要的工作流程:

  • 开发人员 ssh 进入开发环境(大型 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人员依次删除 nginx 反向代理对应的 vhost 并删除动态 DNS 条目。

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

谢谢你的帮助。

4

2 回答 2

1

是否有意义 ?

是的,这个设置很有意义

我建议看看这些项目之一:

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

于 2015-02-19T02:31:16.123 回答
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.

这将允许开发人员按域动态地将流量转发到他们自己的开发容器。


是的,我知道这是一个 3 岁的问题。它仍然在 2018 年首次出现在谷歌上,用于“集中式 docker 开发服务器”,所以无论如何我都会发布这个以帮助目前正在搜索的人。

于 2018-07-20T13:54:07.967 回答