目录

隐藏
  1. 听说 Windows 10、Windows Server 2016 内置 Docker 了?和 Docker 官网下载的 Docker for Windows 有什么区别啊?
  2. 为什么在Mac下挂载宿主目录/usr/local/nginx不成功?
听说 Windows 10、Windows Server 2016 内置 Docker 了?和 Docker 官网下载的 Docker for Windows 有什么区别啊?
二者完全不同。

Windows 10 或者 Windows Server 2016 自带的 Docker,被称为 Docker on Windows,其运行于 Windows NT 内核至上,以 Docker 类似的方式提供 Windows 容器服务,因此只可以运行 Windows 程序。

而 Docker 官网下载的,被称为 Docker for Windows。这是我们常说的 Docker,它是运行于 Linux 内核上的 Docker。在 Windows 上运行时实际上是在 Hyper-V 上的一个 Alpine Linux 虚拟机上运行的 Docker。它只可以运行 Linux 程序。

Docker on Windows 极为臃肿,最小镜像也近 GB,启动时间并不快;而 Docker for Windows 则是正常的 Docker,最小镜像也就几十 KB,一般的镜像都在几百兆以内,而且启动时间基本是毫秒级。

希望对 Docker on Windows 有所了解的童鞋可以看一下一个 DockerCon 的视频,是由微软负责 Docker 项目的构架师进行的介绍,从中可以看到第一手的信息,Windows 到底有多惨。

为什么在Mac下挂载宿主目录/usr/local/nginx不成功?
虽然 Docker 团队尽量让使用 Docker Toolbox, Docker for Mac and Docker for Windows 的用户感觉操作 Docker 就像在 Linux 下一样,但实际上在 Mac/Windows 上并非是直接运行 Docker 的。中间经过了一个 Linux 虚拟机,而 Docker 运行在那个虚拟机里。

因此 Mac 主机上的目录实际上并不是 Docker 眼中的宿主目录,为了让用户尽量感觉不到这个差异,Boot2Docker 或者 Docker for Mac / Windows 中,将一部分物理主机的目录映射到了 Linux 虚拟机中,这样其上 Docker 就可以访问到这些物理机的目录了。

出于安全考虑,并不会把物理机的所有目录都映射到 Linux 虚拟机内。一般来说只有当前用户目录在内的一些目录会被映射到 Linux 虚拟机内,比如 /Users, /Volumes 等。

对于 Docker for Mac 的用户,可以直接在配置界面 File Sharing 中添加额外的映射目录,但是,出于安全考虑,不添加额外映射,而使用当前用户目录下的目录,是更好地做法。