由于 Docker 是基于 linux 内核相关技术实现的,在 Linux 上Docker容器是共享宿主机的内核的,所以对于 Mac, Windows 上为什么可以运行 Docker,感到好奇。于是在网上查阅了相关资料,总结如下:

关于 Docker Desktop for Mac 说明

a. 其运行在 LinuxKit VM 中, LinuxKit 就是 kernel+busybox 实现的一个微缩linux系统,其中直接安装了 containerd 和 runc 服务。

b. 其使用了 HyperKit 代替 virtualbox 虚拟机, HyperKit 是 MacOS 上基于 Hypervisor.framework 的一种轻量级虚拟化技术解决方案。

c. 其与 Docker Machine 创建的虚拟主机相互独立,没有关系。无需使用 docker-machine 。

d. Docker 引擎 API 通过 /var/run/docker.sock 对外暴露服务端点,mac 本地的 docker 客户端正是通过它连接到 docker daemon。

e. 在 Mac 上运行 Docker ,会运行一个轻量级 hipervisor(独立运行的嵌入式linux实例),其中包含最新稳定版本Docker引擎。跟其他hypervisor不同,因为内置Hypervisor框架(从OSX10.10开始引入),它不需要admin优先权。Docker应用也内置支持Docker VM网络和存储的库,它们在Linux和OSX/Windows之间提供交互。

f. 可以通过 screen Library/Containers/com.docker.docker/Data/vms/0/tty(路径后半部分可能会变)进入到 LinuxKit 虚拟机内部,输入 ls 显示提示符后,通过其他 linux 命令看到里边就是一个定制的 linux 系统,运行了 dockerd, containerd 等后台进程。注意可使用 ctrl+a d 快捷键退出 screen 窗口。

g.docker 在 mac os 或者 windows 上,都是基于特定的虚拟化技术运行linux 虚拟机,并不共享宿主机内核。

参考资料: 
《Docker Desktop for Mac vs. Docker Toolbox》https://docs.docker.com/docker-for-mac/docker-toolbox/
《Docker开源组件:HyperKit、VPNKit和DataKit介绍》https://yq.aliyun.com/articles/225593
《Under the Hood: Demystifying Docker For Mac CE Edition》http://collabnix.com/how-docker-for-mac-works-under-the-hood/
《LinuxKit初探》http://ssdxiao.github.io/linux/2017/04/25/Docker-LinuxKit.html
 

Logo

更多推荐