Symfony 使用Docker构建并运行开发环境

Symfony 使用Docker构建并运行开发环境,symfony,vagrant,docker,lxc,Symfony,Vagrant,Docker,Lxc,我们正在尝试创建一个Docker容器,它将承载和运行我们的webapp(主要是用PHP和Symfony2编写的) 目前,容器嵌入了所有应用程序代码,这些代码是在构建映像时克隆的(通过Dockerfile)。该应用程序通过Vagrant(Precise64基本图像)在OSX上正确运行。 我们现在正努力与主机共享容器嵌入代码(Vagrant->OSX)以用于开发目的(在主机OSX上编辑文件会影响容器代码)。 似乎无法将此文件夹从容器共享到主机。 从主机到容器共享文件夹(run命令的-v选项)将覆盖原

我们正在尝试创建一个Docker容器,它将承载和运行我们的webapp(主要是用PHP和Symfony2编写的)

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

我确信解决方案是通过Docker的卷()实现的,但我们还没有弄清楚如何使其工作


您对此有反馈/经验吗?

您可以在OSX容器中按以下行共享您的文件:

OSX dir(host) -shared fold-> /vagrant(vagrant) -volume-> container dir(container)
但文件保存在主机而不是容器中

如果您希望将文件保存在容器中并将其共享给OSX主机,那么您的所有容器文件都位于/var/lib/docker/aufs/mnt/{container id}中的aufs目录中,您可以通过vagrant或其他人支持的特性将此文件夹共享给OSX:

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

第一种选择似乎是正确的。在/vagrant上共享您的文件夹,然后使用卷让容器访问这些文件。我考虑了第一种解决方案,但将代码嵌入容器中让我构建一个映像,无需首先克隆repo,执行init脚本(如DB,取决于应用程序代码),等等。这种方法的工作原理与其他方法相同。将代码嵌入容器中(使用Dockerfile和RUN在生成过程中克隆repo),然后将克隆代码的目录公开到vagrant的/vagrant目录,您可以从主机访问该目录。如果您将一个卷从主机共享到容器中的现有repo,它会覆盖容器的文件夹容器,因此它不是一个解决方案。我编写Docker Shell是为了能够管理数据容器中的源代码,并使用SMB与开发人员共享。看,我已经写了一篇关于将开发环境放到docker上的指南。docker标准中有点陈旧,因此可能有一些地方不符合最佳实践。