Macos 什么';使用Docker在OS X上设置开发环境的正确方法是什么? 简介
我想不出一个使用Docker和Boot2Docker在OSX上建立开发环境的好方法。我遇到的问题是如何管理源代码,以便:Macos 什么';使用Docker在OS X上设置开发环境的正确方法是什么? 简介,macos,docker,development-environment,boot2docker,Macos,Docker,Development Environment,Boot2docker,我想不出一个使用Docker和Boot2Docker在OSX上建立开发环境的好方法。我遇到的问题是如何管理源代码,以便: 我可以使用已经安装的工具(文本编辑器、IDE、git等)修改OSX上的代码 这些修改反映在Docker容器中,因此如果我重新运行测试或刷新网页,我可以立即看到我的更改 理论上,通过将我的源代码装入一个卷,这应该很容易做到: docker run -it -v /path/to/my/source/code:/src some-docker-image 不幸的是,这有两个主要
docker run -it -v /path/to/my/source/code:/src some-docker-image
不幸的是,这有两个主要问题使得它在OS X上完全不可用:
问题1:VirtualBox(使用vboxsf)上装载的卷速度非常慢
例如,如果源代码是Docker映像的一部分,那么Jekyll编译my需要多长时间:
> 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
问题2:文件监视被破坏
SBT、Jekyll和grunt中的默认监视机制使用诸如inotify之类的技术,如果它们在Docker容器中运行,并且在OS X中对装载的文件夹进行更改,则这些技术不起作用
我试过的变通办法
我搜索了解决方案(包括所有解决方案),并尝试了其中一些,但没有找到成功的解决方案:
我终于找到了一个使用Boot2Docker+rsync似乎很有效的解决方案。我已经捕捉到了如何在中设置此功能的详细信息,以及一个名为的开源项目。更新:现在它已处于测试阶段,具有非黑客功能,如果没有文章价值的黑客和变通方法,走这条路对本地开发可能更为合理 不要。我知道这不是您可能希望得到的答案,但请诚实地评估一下,与仅在OSX上进行本地开发相比,尝试获取本地源代码+停靠执行的成本/收益 在某个时候,所有的问题、安装工作和操作难点都可能得到很好的解决,但就目前而言,我认为这是一个净损失 问题#1:虚拟盒(使用vboxfs)上装载的卷速度非常慢 等一会儿,这几乎肯定会有所改善 问题2:文件监视被破坏 我不确定在不久的将来是否能解决这个问题。如果这种类型的功能是开发工作流的关键,我会认为这是一个经销商。与仅仅使用rbenv/bundler来管理您的jekyll/ruby安装并在OSX上本地运行它们相比,这不值得进行大量的研发工作,就像过去十年来人们所做的那样
就像“云”在我的本地开发设置中没有参与一样,目前,docker在测试/登台/部署以及运行数据库和其他第三方组件方面是一个胜利,但我实际编写的应用程序直接在OSX上运行。我一直在OSX上开发(2011年年中Macbook Air)+Boot2Docker+Docker组合环境几周。没有遇到过主要的性能问题,但我在开发时避免运行任何类型的构建(为什么不使用类似于
jekyllservice的东西——跳过初始构建?
)。下面是我使用的一个示例docker compose.yml
文件:
docker-compose.yml:
test:
build: .
volumes:
- ./client:/src/client
- ./server:/src/server
- ./test:/src/test
command: nodemon --exec jasmine-node -- test/ --verbose --autotest --captureExceptions --color
environment:
- DEBUG=*
Dockerfile:
FROM node:0.12
RUN mkdir -p /src
WORKDIR /src
ENV PATH=/src/node_modules/.bin:$PATH
# We add package.json first so that we the
# image build can use the cache as long as the
# contents of package.json hasn't changed.
COPY package.json /src/
RUN npm install --unsafe-perm
COPY . /src
CMD [ "npm", "start" ]
EXPOSE 3000
我有时使用NFS(),但在这样做时并没有注意到有很大的性能差异
对我来说,一个简单的docker compose up测试
让我的环境运行起来的便利性,在性能上是值得的(我经常使用不同的堆栈处理多个项目)
PS:
nodemon
是为数不多的使用vboxsf的文件监视程序之一(请参阅) 我感觉到你了!我想我已经尝试了几乎所有你尝试过的东西,不幸的是它仍然很慢。然后我看到了这条评论,建议使用Vagrant和Parallels,而不是Virtualbox。这使我能够使用nfs,我确实看到我的项目(Drupal)的性能有了很大提高
这是流浪汉档案。您只需安装vagrant,将其复制到名为Vagrantfile的文件中,并将其放入某个文件夹中。转到该文件夹,只需执行vagrant up
,而不是正常的boot2docker up
Vagrant.configure(2) do |config|
config.vm.box = "parallels/boot2docker"
config.vm.network "forwarded_port", guest: 80, host: 80
config.vm.synced_folder(
"/Users/dicix/work/www", "/vagrant",
type: 'nfs',
nfs_udp: true,
mount_options: %w[actimeo=2],
bsd__nfs_options: %w[alldirs maproot=root:wheel]
)
end
让docker作为开发工具工作是可能的。但这会很痛。我在这里记录了这个过程: 我决定用我迄今为止找到的最佳解决方案添加我自己的答案。如果我找到更好的选择,我会更新这个 迄今为止最好的解决方案 我找到的在OS X上使用Docker建立高效开发环境的最佳解决方案是:Boot2Docker+Rsync。使用RSyc,在DOCKER容器中构建时间与直接在OSX上运行构建很相称!此外,文件监视程序代码不需要轮询(
inotify
可以工作,因为rsync使用普通文件夹),因此热重新加载几乎同样快
有两种设置方法:自动安装和手动安装
自动安装
我已经将使用Rsync设置Boot2Docker的所有步骤打包到一个名为。代码有点粗糙,但我已经成功地将其用于服务器
Vagrant.configure(2) do |config|
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.box = "parallels/boot2docker"
config.vm.synced_folder "/Users", "/Users", type: "nfs", mount_options: ["nolock", "vers=3", "udp"], id: "nfs-sync"
end