我决定添加自己的答案以及到目前为止找到的最佳解决方案。 如果找到更好的选择,我将进行更新。
迄今为止最好的解决方案
我发现在OS X上使用Docker设置生产性开发环境的最佳解决方案是: Boot2Docker + Rsync
。使用rsync,可直接在OSX上运行Docker容器中的构建时间!此外,该文件观察家代码并 没有
需要轮询(
inotify因为rsync使用普通文件夹的作品),所以热重装是 几乎 一样快。
有两种设置方法:自动安装和手动安装。
自动安装
我已将使用Rsync设置Boot2Docker的所有步骤打包到一个名为docker -osx-
dev的开源项目中。代码有点粗糙,但是我已经成功使用了几周,可以轻松地在具有3种不同技术堆栈的3个项目之间切换。试试看,报告错误,并提交一些PR!另外,有关更多信息,请参阅我的博客文章“
在OS X上使用Docker进行高效的开发环境”。
手动设定
- 安装Boot2Docker:
brew install boot2docker
。 - 运行Boot2Docker,但禁用VirtualBox共享文件夹:
boot2docker init && boot2docker start --vbox-share=disable
。 - 运行
boot2docker shellinit
并将其打印出的环境变量复制到您的~/.bash_profile
文件中。 - 在Boot2Docker VM上安装rsync :
boot2docker ssh "tce-load -wi rsync"
。 - 在Boot2Docker VM上创建所需的基本文件夹,并为其正确设置权限。例如,如果
/foo/bar
要从OS X 同步文件夹,则需要/foo/bar
在Boot2Docker VM上创建:boot2docker ssh "mkdir -p /foo/bar && chown -R docker /foo/bar"
。 - 运行的rsync同步文件到Boot2Docker VM:
rsync --archive --rsh="ssh -i $HOME/.ssh/id_boot2docker -o StrictHostKeyChecking=no" /foo/bar docker@dockerhost:/foo
。在rsync文档中检查您可能要启用的各种设置,例如在同步时--exclude .git
用于排除.git
文件夹。 - 使用文件观察器使文件保持同步。例如,您可以使用通过
brew install fswatch
管道传递到rsync的fswatch()。 - 在这一点上,您应该能够
docker run
启动Docker容器并使用该-v
标志挂载您要同步的文件夹:docker run -v /foo/bar:/src some-docker-image
。 - 照常更新OS X上的代码。更改应使用rsync迅速传播,常规文件监视程序代码应照常进行更改(即,使用
inotify
),并且构建应快速运行,因为所有文件都是“本地”到容器的。 - 如果需要测试正在运行的网站,请运行
boot2docker ip
命令以查找其所使用的IP。



