当前位置: 首页 > 面试题库 >

用Docker在OS X上设置开发环境的正确方法是什么?

孙鑫鹏
2023-03-14
问题内容

我想不出一种使用Docker和Boot2Docker在OS X上设置开发环境的好方法。我遇到的问题是如何管理源代码,以便:

  1. 我可以使用已经安装的工具(文本编辑器,IDE,git等)在OS X上修改代码。
  2. 这些修改反映在Docker容器中,因此,如果我重新运行测试或刷新网页,则可以立即看到所做的更改。

从理论上讲,通过将我的源代码安装为一个卷,应该很容易做到这一点:

docker run -it -v /path/to/my/source/code:/src some-docker-image

不幸的是,这有两个主要问题,使其在OS X上完全无法使用:

问题#1:VirtualBox(使用vboxsf)上的已装入卷非常慢

例如,如果源代码是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

问题2:文件监视功能已损坏

SBT,Jekyll和grunt中的默认监视机制使用诸如inotify之类的技术,如果它们在Docker容器中运行并且在OS
X中对已安装的文件夹进行了更改,则这些技术将不起作用。

我尝试过的解决方法

我搜索了解决方案(包括SO上的所有解决方案),并尝试了其中的一些解决方案,但没有找到成功的解决方案:

  1. 我将Boot2Docker切换为使用NFS,但速度同样慢。
  2. 我尝试了Vagrant + NFS,而且速度也一样慢。
  3. 我尝试了Samba挂载,但是该文件夹在Docker容器中始终显示为空。
  4. 我尝试使用Unison文件系统,该系统可以短暂地同步文件,但随后一直显示连接错误。
  5. 我在Jekyll中启用了轮询功能,但这大大增加了延迟,直到我的更改被提取为止。
  6. 我尝试了Dinghy,它是“带有Vagrant的OS X上更快,更友好的Docker”,并得到了 一些 改进。Jekyll编译的速度要慢2-3倍,而不是Jekyll的慢10-15倍。更好,但仍然不太实用。

有没有人找到一个切实可行的解决方案,并允许您使用Docker和OS X高效地开发代码?

更新:终于解决了!

我终于找到了一个使用Boot2Docker +
rsync似乎很有成效的解决方案。我已经在我自己的答案以及一个名为docker-osx-dev的开源项目中捕获了有关如何进行设置的详细信息。


问题答案:

我决定添加自己的答案以及到目前为止找到的最佳解决方案。 如果找到更好的选择,我将进行更新。

迄今为止最好的解决方案

我发现在OS X上使用Docker设置生产性开发环境的最佳解决方案是: Boot2Docker + Rsync
。使用rsync,可直接在OSX上运行Docker容器中的构建时间!此外,该文件观察家代码并 没有
需要轮询(inotify因为rsync使用普通文件夹的作品),所以热重装是 几乎 一样快。

有两种设置方法:自动安装和手动安装。

自动安装

我已将使用Rsync设置Boot2Docker的所有步骤打包到一个名为docker -osx-
dev的开源项目中。代码有点粗糙,但是我已经成功使用了几周,可以轻松地在具有3种不同技术堆栈的3个项目之间切换。试试看,报告错误,并提交一些PR!另外,有关更多信息,请参阅我的博客文章“
在OS X上使用Docker进行高效的开发环境”。

手动设定

  1. 安装Boot2Docker:brew install boot2docker
  2. 运行Boot2Docker,但禁用VirtualBox共享文件夹:boot2docker init && boot2docker start --vbox-share=disable
  3. 运行boot2docker shellinit并将其打印出的环境变量复制到您的~/.bash_profile文件中。
  4. 在Boot2Docker VM上安装rsync :boot2docker ssh "tce-load -wi rsync"
  5. 在Boot2Docker VM上创建所需的基本文件夹,并为其正确设置权限。例如,如果/foo/bar要从OS X 同步文件夹,则需要/foo/bar在Boot2Docker VM上创建:boot2docker ssh "mkdir -p /foo/bar && chown -R docker /foo/bar"
  6. 运行的rsync同步文件到Boot2Docker VM: rsync --archive --rsh="ssh -i $HOME/.ssh/id_boot2docker -o StrictHostKeyChecking=no" /foo/bar docker@dockerhost:/foo。在rsync文档中检查您可能要启用的各种设置,例如在同步时--exclude .git用于排除.git文件夹。
  7. 使用文件观察器使文件保持同步。例如,您可以使用通过brew install fswatch管道传递到rsync的fswatch()。
  8. 在这一点上,您应该能够docker run启动Docker容器并使用该-v标志挂载您要同步的文件夹:docker run -v /foo/bar:/src some-docker-image
  9. 照常更新OS X上的代码。更改应使用rsync迅速传播,常规文件监视程序代码应照常进行更改(即,使用inotify),并且构建应快速运行,因为所有文件都是“本地”到容器的。
  10. 如果需要测试正在运行的网站,请运行boot2docker ip命令以查找其所使用的IP。


 类似资料:
  • 用 Homebrew 来安装及更新 node.js 要在 Mac 上建立一个 node.js 的开发环境有很多方法. 你可以直接下载原始码自己编译, 或者是用套件管理系统来帮你解决这些琐碎的问题. 因为 node.js 还是一个很年轻的专案, 常常会有版本的更新. 手动安装及更新实在是非常的累人. 若是使用 Homebrew 来帮你处理这些问题可以让你把时间花在写程式而不是设定环境上面. 如果你是

  • 使用 Online Editor 对 Weex 尝鲜是一个不错的选择,但如果你想更专业的开发 Weex,本节会教你如何搭建本地开发环境进行 Weex 开发。 安装依赖 Weex 官方提供了weex-cli 的脚手架工具来辅助开发和调试。 首先,你需要 Node.js 和 Weex CLI。 安装 Node.js 方式多种多样,最简单的方式是在 Node.js 官网 下载可执行程序直接安装即可。 更

  • 如果你已经有了 Maven 的开发环境,那你可以跳过本节。 本书例子需要 JDK 和 Apache Maven,都可以免费下载到。 1.安装配置 JDK 建议用 JDK 7+ 2.下载 IDE JAVA 的 IDE 很多,主流的有 Eclipse: http://www.eclipse.org NetBeans: http://www.netbeans.org Intellij Idea Comm

  • 在本章中,我们将演示如何将Firebase添加到现有的应用程序,要安装Firebase,首先需要NodeJS。 如果您还没有安装好Firebase,请从下表中的链接中下载安装。 NodeJS和NPM安装 - http://www.yiibai.com/nodejs/nodejs_environment_setup.html 第1步 - 创建Firebase帐户 可以在这里创建一个Firebase帐

  • Swift 4为学习目的提供了一个Playground平台,在本节中我们也将设置相同的平台。 需要xCode软件才能在Playground中启动Swift 4编码。 当熟悉了Swift 4的概念,就可以使用xCode IDE进行iSO/OS x应用程序开发。 首先,假设您已在Apple Developer网站上拥有一个帐户。 登录后,请转到以下链接 - Apple Developers下载 它将列

  • 主要内容:了解MATLAB环境设置MATLAB开发环境是比较简单的,只需要从 http://www.mathworks.com/downloads/web_downloads/ 下载安装程序。申请成功后的页面 - MathWorks还提供许可产品,试用版和学生版本。需要登录该站点,并等待一点他们的批准。 注: 由于这里只是学习和研究MATLAB,所以注册一个账号然后申请一个免费试用版。 下载安装程序后,通过以下几个步骤来安装软