Docker Desktop on Mac 虚拟机¶
macOS安装Docker 后,底层原理是在 macOS 的 xhyve - macOS平台的KVM Hypervisor上运行了一个KVM虚拟机( Alpine Linux ):
这个虚拟机是 macOS 上运行的一个全功能虚拟机,实际上可以实现很多有趣的功能:
在虚拟机内部构建Linux服务,例如采用虚拟块设备构建多存储 ZFS / Ceph Atlas / Gluster Atlas
既然 Docker Desktop for Mac能够运行虚拟机,应该也可以探索使用 xhyve - macOS平台的KVM 来运行其他Linux虚拟机,来构建一个更为真实的复杂集群
Docker Desktop for macOS文件共享 可以将物理主机的 macOS 目录共享进容器,那么也许可以实现非常复杂的协同工作流(我再想想)
进入Docker虚拟机内部¶
方法一:使用netcat¶
在 macOS 上,由于 Docker Desktop for Mac 是运行了一个mini VM,所以我们可以通过物理主机上的虚拟机 sock
文件连接到这个虚拟机内部,方便我们排查虚拟机问题,也方便我们在虚拟机内部部署服务:
nc -U ~/Library/Containers/com.docker.docker/Data/debug-shell.sock
备注
这是最简单方法,无需下载运行容器,但是控制台似乎是sock影响提示符比较烦人
方法二:使用运行容器的nsenter进入pid 1的控制台(也就是虚拟机)¶
使用以下命令可以进入priviledged容器:
docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
这里运行了一个使用debian镜像的容器,然后通过这个容器执行 nsenter
连接到 pid 1
的进程,实际上就是Docker虚拟机
备注
这个方法非常巧妙,而且debian容器提供了很好的控制台兼容,使用方便
方法三:最简单的方法,通过 Justin Cormack (Docker Maintainer) 提供的镜像运行nsenter进入虚拟机控制台¶
Justin Cormack (Docker Maintainer)提供了一个镜像内置了nsenter直接nsenter进入虚拟机控制台:
docker run -it --rm --privileged --pid=host justincormack/nsenter1
虚拟机镜像文件在哪里?¶
最近需要升级 macOS ,由于我同时安装了 Asahi Linux ,所以磁盘空间非常紧张,甚至连升级系统都需要清理磁盘。但是,这次大版本升级需要 26GB 以上空间,我实在无法腾挪出足够空间升级。考虑到已经将大量的虚拟化运行 Kubernetes Atlas 迁移到服务器上,本地已经没有必要运行Docker和Kubernetes了,所以卸载了Docker Desktop。
但是,Docker Desktop在本地磁盘有一个虚拟机镜像需要清理以释放空间。这个虚拟机镜像位于 ~/Library/Containers/com.docker.docker
目录下。如果你没有删除掉Docker Desktop程序,可以直接通过 docker
命令来清理:
docker system prune -a
如果已经卸载了Docker,则手工删除掉这个目录即可。