Yev*_*man 93 macos development-environment docker boot2docker
我无法找到使用Docker和Boot2Docker在OS X上设置开发环境的好方法.我遇到的问题是如何管理源代码,以便:
理论上,通过将我的源代码作为卷安装,这应该很容易做到:
docker run -it -v /path/to/my/source/code:/src some-docker-image
Run Code Online (Sandbox Code Playgroud)
不幸的是,这有两个主要问题使它在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
Run Code Online (Sandbox Code Playgroud)
这是完全相同的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
Run Code Online (Sandbox Code Playgroud)
SBT,Jekyll和grunt中的默认监视机制使用诸如inotify之类的技术,如果它们在Docker容器中运行并且在OS X中对安装的文件夹进行了更改,则它们不起作用.
我搜索了解决方案(包括SO上的所有解决方案)并尝试了其中一些,但没有找到成功的解决方案:
有没有人找到一个真正有效的解决方案,并允许您使用Docker和OS X高效地开发代码?
我终于找到了一个使用Boot2Docker + rsync看起来很有效的解决方案.我已经在我自己的答案中捕获了有关如何设置它的详细信息,以及一个名为docker-osx-dev的开源项目.
Yev*_*man 46
我决定用我迄今为止找到的最佳解决方案添加我自己的答案.如果我找到更好的选择,我会更新这个.
我发现在OS X上使用Docker建立高效开发环境的最佳解决方案是:Boot2Docker + Rsync.使用rsync,Docker容器中的构建时间与直接在OSX上运行构建相同!此外,该文件观察家代码并没有需要轮询(inotify作品因为rsync使用普通文件夹),那么热重装是几乎一样快.
有两种设置方法:自动安装和手动安装.
我已经将使用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要从OS X 同步文件夹,则需要/foo/bar在Boot2Docker VM上创建: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. 检查rsync文档以了解您可能要启用的各种设置,例如在同步时使用--exclude .git以排除.git文件夹.brew install fswatch)管道进入rsync.docker run启动Docker容器并使用该-v标志来挂载您正在同步的文件夹:docker run -v /foo/bar:/src some-docker-image.inotify),并且构建应该快速运行,因为所有文件都是容器的"本地".boot2docker ip命令以查找其所在的IP.Pet*_*ons 18
更新:现在,对于mac的docker处于测试阶段且具有非黑客功能,对于本地开发来说,走这条路线可能更合理,没有文章的价值和解决方法.
不要.我知道这不是你可能希望得到的答案,而是对尝试获取本地源代码+ dockerized执行与仅在OSX上进行本地开发的成本/收益进行诚实的评估.
在某些时候,所有问题,设置工作和操作痛点都可以得到很好的解决,但是现在我对此的看法是净损失.
问题#1:Virtual Box上的挂载卷(使用vboxf)非常慢
等一会儿,这几乎肯定会有所改善.
问题#2:文件观看被破坏了
我不确定在不久的将来可以解决这个问题.如果这种类型的功能对您的开发工作流程至关重要,我会认为这是一个破解者.与仅仅使用rbenv/bundler管理你的jekyll/ruby安装并在OSX上本地运行它们相比,不值得进行大规模的研发工作,就像人们在过去十年里一直在成功做的那样.
就像"云"没有参与我的本地开发设置一样,目前,docker是测试/暂存/部署以及运行数据库和其他第三方组件的胜利,但我实际编码的应用程序直接运行在OSX上.
Qui*_*ant 12
适用于Mac和Windows的Docker将是在OS X(和Windows)上使用Docker进行开发的最终方式.作为Docker产品,该软件是一个"集成,易于部署的环境,用于从Mac或Windows构建,组装和运送应用程序."它旨在解决OP提出的问题.自 2016年3月24日公告:
| 归档时间: |
|
| 查看次数: |
15526 次 |
| 最近记录: |