【发布时间】: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