【问题标题】:Centralized team development environment with docker使用 docker 的集中式团队开发环境
【发布时间】:2015-02-18 10:06:16
【问题描述】:

我想为我的开发团队(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 进入开发环境(大型 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 之类的工具,但如果您有任何其他建议……但请记住,我希望保持轻量级的工作流程(毕竟我们是一个小团队:))

感谢您的帮助。

【问题讨论】:

  • 我们建立了一个类似的环境,开发人员将自己的容器暴露为 .test.somewhere.com。我编写了 Docker Shell 来帮助完成一些工作(传播 ssh 密钥和文件共享)。见dockershell.io

标签: docker development-environment fig


【解决方案1】:

有意义吗?

是的,这个设置很有意义

我建议看看以下项目之一:

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

【讨论】:

    【解决方案2】:

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

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

    1) 设置 Traefik 监听 docker daemon,基于端口转发

    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 开发服务器”,所以无论如何我都会发布这个以帮助目前正在搜索的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多