使用Docker构建和运行开发环境

3
我们正在尝试创建一个Docker容器,用于托管和运行我们的Web应用程序(主要使用Symfony2编写的PHP)。
目前,容器嵌入了所有应用程序代码,在构建镜像时克隆(通过Dockerfile)。该应用程序在OSX上通过Vagrant(Precise64基础映像)正确运行。现在,我们正在努力与主机(Vagrant-> OSX)共享容器内嵌代码以进行开发(在主机OSX上编辑文件应影响容器代码)。似乎没有办法将此文件夹从容器共享到主机。从主机共享文件夹(run命令的-v选项)会覆盖原始容器文件夹。软链接也无效,因为主机(Vagrant和OSX)无法读取原始位置。
我确信解决方案与Docker的卷(http://docs.docker.io/en/latest/use/working_with_volumes/)有关,但我们还没有想出如何使其工作。
您对此有反馈/经验吗?

我写了一份关于如何将你的开发环境放在Docker上的指南。按照Docker标准来看,这篇文章有点老旧,可能存在不符合最佳实践的地方。请点击此处查看 - chanux
1个回答

3
你可以按照以下步骤将文件在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上共享您的文件夹,然后使用卷让容器访问这些文件。 - Deni Bertovic
我考虑过第一种解决方案,但将代码嵌入容器中使我能够构建一个立即可用的镜像,而无需首先克隆存储库、执行初始化脚本(如依赖于应用程序代码的数据库等)等步骤。 - arnaud.breton
这种方法的工作方式与另一种方法相同。将代码嵌入容器中(使用Dockerfile和RUN在构建过程中克隆repo),然后将克隆代码的目录暴露给vagrant的/vagrant目录,从而可以从主机访问。 - Deni Bertovic
如果您将主机上的卷共享到容器中的现有存储库,则会覆盖容器的文件夹,因此这不是一个解决方案。 - arnaud.breton
我编写了Docker Shell,使得在数据容器内管理源代码并通过SMB与开发人员共享成为可能。请参见http://dockershell.io/。 - mzedeler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接