2014-01-13 22 views
3

我们正在尝试创建一个Docker容器,它将托管并运行我们的webapp(主要使用Symfony2以PHP编写)。使用Docker构建和运行开发环境

目前,容器嵌入所有应用程序代码,在构建映像时克隆(通过Dockerfile)。该应用程序可以在OSX上通过Vagrant(Precise64基本映像)正确运行。 我们正在努力与主机(Vagrant - > OSX)共享容器嵌入代码用于开发目的(编辑OSX主机上的文件应该影响容器代码)。 似乎没有办法将此文件夹从容器共享到主机。 从主机共享一个文件夹到容器(run命令的-v选项)会覆盖原始容器文件夹。 由于主机(Vagrant和OSX)无法读取原始位置,因此软链接无法正常工作。

我确信解决方案是与Docker的卷(http://docs.docker.io/en/latest/use/working_with_volumes/),但我们还没有想出如何使它工作。

您对此有何反馈/有经验?

+0

我已经编写了关于将您的开发环境放在泊坞窗上的指南。码头标准有点老,所以可能会有不符合最佳实践的地方。 [请点击此处](http://play.thinkcube.com/development-environment-on-docker)。 – chanux

回答

3

你可以分享你的OSX文件容器中的以下行:

OSX dir(host) -shared fold-> /vagrant(vagrant) -volume-> container dir(container) 

,但该文件保存在你的主机没有容器。

如果要将文件保存在容器中并将其共享到OSX主机,则所有容器文件位于/ var/lib/docker/aufs/mnt/{container id}中的aufs目录中,您可以共享此文件通过由流浪者或其他人支持的羽毛来折叠OSX:

container dir(container) -aufs-> /var/lib/docker/aufs/mnt/{id}(vagrant) -some-> OSX dir(host) 
+0

第一个选项似乎是正确的恕我直言。在/ vagrant上共享文件夹,然后使用卷让容器访问这些文件。 –

+0

我想到了第一种解决方案,但是将代码嵌入到容器中让我可以构建一个即可使用的映像,而无需首先克隆repo,执行init脚本(如数据库,取决于应用程序代码)等。 –

+0

这种方法与其他方式相同。将代码嵌入到容器中(使用Dockerfile和RUN在构建过程中克隆回购),然后将代码克隆到的目录公开到vagrant的/ vagrant目录,然后您可以从主机访问该目录。 –