我想不出一种使用Docker和Boot2Docker在OS X上设置开发环境的好方法。我遇到的问题是如何管理源代码,以便:
从理论上讲,通过将我的源代码安装为一个卷,应该很容易做到这一点:
docker run -it -v /path/to/my/source/code:/src some-docker-image
不幸的是,这有两个主要问题,使其在OS X上完全无法使用:
例如,如果源代码是Docker映像的一部分,这是Jekyll编译我的主页需要多长时间:
> docker run -it brikis98/yevgeniy-brikman-homepage:v1 bash root@7aaea30d98a1:/src# time bundle exec jekyll build [...] real 0m7.879s user 0m7.360s sys 0m0.600s
这是完全相同的Docker映像,除了这次,我从OS X挂载了源代码:
> docker run -it -v $(pwd):/src brikis98/yevgeniy-brikman-homepage:v1 bash root@1521b0b4ce6a:/src# time bundle exec jekyll build [...] real 1m14.701s user 0m9.450s sys 0m3.410s
SBT,Jekyll和grunt中的默认监视机制使用诸如inotify之类的技术,如果它们在Docker容器中运行并且在OS X中对已安装的文件夹进行了更改,则这些技术将不起作用。
我搜索了解决方案(包括SO上的所有解决方案),并尝试了其中的一些解决方案,但没有找到成功的解决方案:
有没有人找到一个切实可行的解决方案,并允许您使用Docker和OS X高效地开发代码?
我终于找到了一个使用Boot2Docker + rsync似乎很有成效的解决方案。我已经在我自己的答案以及一个名为docker-osx-dev的开源项目中捕获了有关如何进行设置的详细信息。
我决定添加自己的答案以及到目前为止找到的最佳解决方案。 如果找到更好的选择,我将进行更新。
我发现在OS X上使用Docker设置生产性开发环境的最佳解决方案是: Boot2Docker + Rsync 。使用rsync,可直接在OSX上运行Docker容器中的构建时间!此外,该文件观察家代码并 没有 需要轮询(inotify因为rsync使用普通文件夹的作品),所以热重装是 几乎 一样快。
inotify
有两种设置方法:自动安装和手动安装。
我已将使用Rsync设置Boot2Docker的所有步骤打包到一个名为docker -osx- dev的开源项目中。代码有点粗糙,但是我已经成功使用了几周,可以轻松地在具有3种不同技术堆栈的3个项目之间切换。试试看,报告错误,并提交一些PR!另外,有关更多信息,请参阅我的博客文章“ 在OS X上使用Docker进行高效的开发环境”。
brew install boot2docker
boot2docker init && boot2docker start --vbox-share=disable
boot2docker shellinit
~/.bash_profile
boot2docker ssh "tce-load -wi rsync"
/foo/bar
boot2docker ssh "mkdir -p /foo/bar && chown -R docker /foo/bar"
rsync --archive --rsh="ssh -i $HOME/.ssh/id_boot2docker -o StrictHostKeyChecking=no" /foo/bar docker@dockerhost:/foo
--exclude .git
.git
brew install fswatch
docker run
-v
docker run -v /foo/bar:/src some-docker-image
boot2docker ip