【问题标题】:Build and run a development environment with Docker使用 Docker 构建和运行开发环境
【发布时间】:2014-02-01 00:22:31
【问题描述】:

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

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

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

您对此有什么反馈/经验吗?

【问题讨论】:

  • 我写了一篇关于将你的开发环境放在 docker 上的指南。它在 docker 标准中有点陈旧,因此可能有些地方不符合最佳实践。 Check here.

标签: symfony vagrant docker lxc


【解决方案1】:

您可以在以下行中将您在 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 上共享您的文件夹,然后使用卷让容器访问这些文件。
  • 我想到了第一个解决方案,但是将代码嵌入容器中让我可以构建一个可以立即使用的图像,而无需先克隆存储库,执行初始化脚本(如 DB,取决于应用代码)等
  • 此方法的工作方式与其他方式相同。将代码嵌入容器中(在构建期间使用 Dockerfile 和 RUN 克隆 repo),然后将克隆代码的目录公开到 vagrant 的 /vagrant 目录,您可以依次从主机访问该目录。
  • 如果您将卷从主机共享到容器中的现有存储库,它会覆盖容器的文件夹容器,因此不是解决方案。
  • 我编写了 Docker Shell 以使管理数据容器内的源代码并使用 SMB 与开发人员共享成为可能。见dockershell.io。
猜你喜欢
  • 2022-09-25
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
相关资源
最近更新 更多