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

posted @ 2023-07-07 13:25  vx_guanchaoguo0  阅读(108)  评论(0编辑  收藏  举报