前提条件:
一台支持 CPU 虚拟化(在 BIOS 中开启),磁盘大于 100 G 的电脑。
步骤:
1.准备一个 centos 7/8 的环境(kernel内核版本超过 4.0)
2.安装 docker 并启动,可参考uos20家庭版安装docker教程
# sudo systemctl daemon-reload sudo systemctl restart docker
3.安装 QEMU 和 KVM 环境
sudo yum install libvirt qemu-kvm
4.加载 libvirt 和 KVM 模块
sudo systemctl enable --now libvirtd sudo systemctl enable --now virtlogd echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs sudo modprobe kvm
5.拉取已提前安装好的 macOS(Catalina) 镜像
# 40GB disk space required: 20GB original image 20GB your container. docker pull sickcodes/docker-osx:auto # boot directly into a real OS X shell with a visual display [NOT HEADLESS] docker run -it \ --device /dev/kvm \ -p 50922:10022 \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e "DISPLAY=${DISPLAY:-:0.0}" \ -e GENERATE_UNIQUE=true \ sickcodes/docker-osx:auto # username is user # passsword is alpine
6.进入 macOS 系统配置服务,安装 xcode-select/Sketc
7.编写 shell 启动脚本,启动 docker 时加上 OSX_COMMANDS 参数
docker run -it \ --device /dev/kvm \ -p 50922:10022 \ -v /tmp/.X11-unix:/tmp/.X11-unix \ # 可视化界面需要 -e "DISPLAY=${DISPLAY:-:0.0}" \ # 可视化界面需要 -e "OSX_COMMANDS=/bin/bash -c \"put your commands here\"" \ # 自动执行脚本 -v "${PWD}/mac_:/image" \ # 跑已存在的镜像 sickcodes/docker-osx:auto
此步骤执行 pm2 start 命令时报错,pm2 command not found。在 container 内改为 pm2 startup 系统启动时就启动服务。
8.设置自动登录
defaults write com.a autoLoginUser -bool true defaults write com.a autoLoginWindow -string "user"
9.禁止锁屏
defaults write com.a DisableScreenLock -bool true
10.在配置的 Container 基础上制作新镜像
docker ps -all docker commit <container id> <new image name> # 跑新的镜像 docker run \ --device /dev/kvm \ --device /dev/snd \ -v /tmp/.X11-unix:/tmp/.X11-unix \ newImageName
或:
找到对应的镜像文件进行移植
sudo find /var/lib/docker -size +10G | grep mac_
使用 naked 启动
sudo docker run -it \ --device /dev/kvm \ -p 50922:10022 \ -p 8080:8080 \ -v "${PWD}/mac_:/image" \ -e ADDITIONAL_PORTS='hostfwd=tcp::8080-:8080,' \ sickcodes/docker-osx:naked
或:
通过 contaienr 导出镜像文件
#首先查看容器 ID docker ps -a # 使用 docker export 命令将容器导出成一个文件 docker export <containerid> > yourimage.tar # 在服务器中使用 docker import 导入镜像 docker import - yourimage < yourimage.tar
直接 run 该镜像
docker run -it \ --device /dev/kvm \ -p 50922:10022 \ -p 8080:8080 \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e "DISPLAY=${DISPLAY:-:0.0}" \ -e GENERATE_UNIQUE=true \ -e ADDITIONAL_PORTS='hostfwd=tcp::8080-:8080,' \ yourimage
问题:kernel too old
解决:更新 centos kernel 内核
问题:gtk initialization failed
解决:安装 xhost
问题:macOS 安装完成后无法 reboot
解决:手动重启 docker
如果想体验它更强大的功能的话,请转到GitHub上去体验下吧