Docker for Mac 进入虚拟机的三中方式
tips namespace是容器技术的根基
- 查看虚拟机的 8 种 cgroup、ipc、net、pid、pid_for_children、time、time_for_children、user、 uts、mnt
利用容器进去
- –rm : 表示在退出的时候就自动删除该容器
- –privileged : 表示允许该容器访问宿主机中的各种设备
- –pid=host : 表示允许容器共享宿主机的进程命名空间(namespace),许容器看到宿主机中的各种进程
- nsenter : 是一个小工具 ns=namespace、enter=进入
- nsenter -t 1 -m -u -n -i sh
- -t 1: 表示要进入哪个pid,1表示整个操作系统的主进程id
- -m: 进入mount namespace,挂载点
- -u: 进入UTS namespace
- -n: 进入network namespace,网络
- -i: 进入IPC namespace,进程间通信
- sh: 表示运行/bin/sh
docker run -it --rm --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
docker-conpose
version: '3'
services:
linux-kit:
container_name: linux-kit
image: debian
privileged: true
pid: host
command: ["/bin/sh","-c","sleep 3000000"]
# nsenter -t 1 -m -u -n -i
利用 lininxKit
- Mac 利用内核 The BSD Hypervisor 技术 在Hypervisor.framework 启动虚拟机
- HyperKit是一个具有hyperisor能力的工具集,包含了基于 xhyve - macOS平台的KVM/bhyve (轻量级虚拟机和容器部署) 的完整hypervisor
- VPNKit:嵌入式虚拟网络库,VPNKit 是一个工具和服务集合用于帮助HyperKit虚拟机和主机VPN配置协作。https://github.com/moby/vpnkit
- HyperKit:OSX上运行的轻量级虚拟化工具包https://github.com/moby/hyperkit
- DataKit:现代化分布式组件框架https://github.com/moby/datakit
- linuxkit是一个docker自己打包的linux镜像,非常小有点类似apline
- 新的版本里(20.10.5)版本之前 利用通过宿主机的tty
cd ~/Library/Containers/com.docker.docker/Data/vms/0
screen tty
- 新的版本里(20.10.5)版本之后 利用通过宿主机sock
nc -U ~/Library/Containers/com.docker.docker/Data/debug-shell.sock
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/17534711.html