또는 비공개인 경우 Linkedin을 통해 문의하세요: https://www.linkedin.com/in/sickcodes
또는 https://sick.codes/contact/를 통해
이 프로젝트는 Sick.Codes에서 관리합니다. (지저귀다)
추가 크레딧은 여기에서 찾을 수 있습니다: https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
또한 모든 기여자의 전체 목록은 여기에서 확인할 수 있습니다: https://github.com/sickcodes/Docker-OSX/graphs/contributors
Docker-OSX가 OSX-KVM 위에 구축된 업스트림 프로젝트를 유지 관리해 준 @kholia에게 큰 감사를 드립니다.
또한 @Leoyzen이 시작한 귀중한 포크 KVM-OpenCore를 유지 관리하는 @thenickdude에게도 특별히 감사드립니다!
OpenCore 팀(https://github.com/acidanthera/OpenCorePkg)에 특별히 감사드립니다. 잘 관리된 부트로더는 Docker-OSX 사용자가 즐기는 많은 훌륭한 기능을 제공합니다. :)
이 프로젝트가 마음에 드신다면 여기나 업스트림에 기여해 보세요!
비디오 설정 튜토리얼도 여기에서 볼 수 있습니다: https://www.youtube.com/watch?v=wLezYl77Ll8
Windows 사용자: 아래 참고 사항을 보려면 여기를 클릭하세요!
여기 처음이세요? 초기 설정을 시도하고, 그렇지 않으면 아래 지침에 따라 Catalina 또는 Big Sur를 사용해 보십시오.
릴리스 이름 및 버전:
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e SHORTNAME=catalina
sickcodes/docker-osx:latest
# docker build -t docker-osx .
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e SHORTNAME=big-sur
sickcodes/docker-osx:latest
# docker build -t docker-osx .
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
-e MASTER_PLIST_URL= ' https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist '
-e SHORTNAME=monterey
sickcodes/docker-osx:latest
# docker build -t docker-osx .
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
-e MASTER_PLIST_URL= ' https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist '
-e SHORTNAME=ventura
sickcodes/docker-osx:latest
# docker build -t docker-osx .
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
-e CPU= ' Haswell-noTSX '
-e CPUID_FLAGS= ' kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on '
-e MASTER_PLIST_URL= ' https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom-sonoma.plist '
-e SHORTNAME=sonoma
sickcodes/docker-osx:latest
# docker build -t docker-osx .
# 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
# password is alpine
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e SHORTNAME=high-sierra
sickcodes/docker-osx:latest
# docker build -t docker-osx .
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e SHORTNAME=mojave
sickcodes/docker-osx:latest
# docker build -t docker-osx .
이는 Docker의 CDN(또는 연결)이 느린 경우 컨테이너를 다운로드하는 데 특히 좋은 방법입니다.
wget https://images2.sick.codes/mac_hdd_ng_auto.img
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng_auto.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
-e MASTER_PLIST_URL=https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/config-nopicker-custom.plist
-e SHORTNAME=catalina
sickcodes/docker-osx:naked
먼저 게스트 내부의 네트워크 공유에서 SSH를 활성화하십시오. -e "USERNAME=user"
및 -e "PASSWORD=password"
자격 증명으로 변경합니다. 컨테이너는 ~/.ssh/authorized_keys
에 추가됩니다.
화면을 볼 수 없으므로 nopicker와 함께 PLIST를 사용하십시오. 예를 들면 다음과 같습니다.
# Catalina
# wget https://images2.sick.codes/mac_hdd_ng_auto.img
# Monterey
wget https://images.sick.codes/mac_hdd_ng_auto_monterey.img
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng_auto_monterey.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e " USERNAME=user "
-e " PASSWORD=alpine "
-e GENERATE_UNIQUE=true
-e MASTER_PLIST_URL=https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/config-nopicker-custom.plist
-e SHORTNAME=monterey
sickcodes/docker-osx:naked-auto
가장 쉽고 안전한 방법은 sshfs
입니다.
# on Linux/Windows
mkdir ~ /mnt/osx
sshfs user@localhost:/ -p 50922 ~ /mnt/osx
# wait a few seconds, and ~/mnt/osx will have full rootfs mounted over ssh, and in userspace
# automated: sshpass -p <password> sshfs user@localhost:/ -p 50922 ~/mnt/osx
노트북이 있다면 다음 usbfluxd 섹션을 참조하세요.
데스크톱 PC가 있는 경우 @Silfalion의 지침을 사용할 수 있습니다: https://github.com/Silfalion/Iphone_docker_osx_passthrough
usbfluxd에 대한 비디오 설정 튜토리얼도 여기에서 볼 수 있습니다: https://www.youtube.com/watch?v=kTk5fGjK_PM
이 방법은 노트북, PC 등 무엇이든 가능합니다!
https://github.com/corellium을 통해 usbfluxd를 제공해 주신 @nikias에게 감사드립니다!
이것은 Linux 내부에서 수행됩니다.
Linux에서 터미널 3개 열기
Linux에서 USB를 통해 장치를 연결하면 https://github.com/corellium/usbfluxd를 사용하여 포트 5000
의 usbmuxd
동일한 네트워크의 다른 시스템에 노출할 수 있습니다.
usbmuxd
, socat
및 usbfluxd
설치되어 있는지 확인하십시오.
sudo pacman -S libusbmuxd usbmuxd avahi socat
AUR에서 사용 가능: https://aur.archlinux.org/packages/usbfluxd/
yay usbfluxd
iPhone 또는 iPad를 연결하세요.
제1터미널
sudo systemctl start usbmuxd
sudo avahi-daemon
제2터미널:
# on host
sudo systemctl restart usbmuxd
sudo socat tcp-listen:5000,fork unix-connect:/var/run/usbmuxd
제3터미널:
sudo usbfluxd -f -n
이는 macOS 내부에서 수행됩니다.
홈브류를 설치합니다.
172.17.0.1
은 일반적으로 PC인 Docker 브리지 IP이지만 ip addr
의 모든 IP를 사용할 수 있습니다.
macOS 터미널:
# on the guest
brew install make automake autoconf libtool pkg-config gcc libimobiledevice usbmuxd
git clone https://github.com/corellium/usbfluxd.git
cd usbfluxd
./autogen.sh
make
sudo make install
USB over TCP 연결을 수락하고 로컬로 표시됩니다.
( 172.17.0.1
호스트의 IP 주소로 변경해야 할 수도 있습니다. 예: ip addr
확인)
# on the guest
sudo launchctl start usbmuxd
export PATH=/usr/local/sbin: ${PATH}
sudo usbfluxd -f -r 172.17.0.1:5000
Xcode와 같은 앱을 닫았다가 다시 열면 장치가 나타납니다!
Linux에서 다시 시작해야 하는 경우 현재 usbfluxd, usbmuxd 및 socat를 지우십시오.
sudo killall usbfluxd
sudo systemctl restart usbmuxd
sudo killall socat
https://github.com/sickcodes/osx-optimizer에서 명령을 확인하세요!
아래 튜토리얼에 따라 /var/lib/docker를 이동하세요.
여기 튜토리얼: https://sick.codes/how-to-run-docker-from-block-storage/
현재 Docker 이미지/레이어를 모두 지우는 데 만족하는 경우에만 위 튜토리얼을 따르십시오.
안전 모드: Docker를 일시적으로 비활성화하면 Docker 폴더를 일시적으로 이동할 수 있습니다.
killall dockerd
systemctl disable --now docker
systemctl disable --now docker.socket
systemctl stop docker
systemctl stop docker.socket
이제 Docker 데몬이 꺼져 있습니다. /var/lib/docker를 어딘가로 이동하세요.
그런 다음 /var/lib/docker를 어딘가에 기호적으로 링크합니다.
mv /var/lib/docker /run/media/user/some_drive/docker
ln -s /run/media/user/some_drive/docker /var/lib/docker
# now check if /var/lib/docker is working still
ls /var/lib/docker
폴더가 보이면 제대로 작동한 것입니다. Docker를 다시 시작하거나 확실하게 하려면 재부팅하면 됩니다.
2021-11-14 - 하이시에라, 모하비 추가
빌드하는 동안 다음 중 하나를 선택하세요. docker pull을 사용할 때는 관련이 없습니다.
--build-arg SHORTNAME=high-sierra
--build-arg SHORTNAME=mojave
--build-arg SHORTNAME=catalina
--build-arg SHORTNAME=big-sur
--build-arg SHORTNAME=monterey
--build-arg SHORTNAME=ventura
--build-arg SHORTNAME=sonoma
현재 여러 이미지가 있으며 각각 다른 사용 사례가 있습니다(아래 설명 참조).
하이 시에라:
모하비:
카탈리나:
빅서:
몬트레이는 자신만의 이미지를 만듭니다.
Ventura는 자신만의 이미지를 만듭니다.
소노마(Sonoma)는 자신만의 이미지를 만듭니다.
Sick.Codes가 사전 제작한 Catalina 시스템: 사용자 이름: user
, 비밀번호: alpine
Naked: 자체 이미지 가져오기 설정(위 중 하나를 먼저 사용):
Naked Auto: 위와 동일하지만 -e USERNAME
& -e PASSWORD
및 -e OSX_COMMANDS="put your commands here"
사용합니다.
localhost:50922
)localhost:8888
)docker commit
으로 컨테이너를 복제할 수 있습니다.:auto
의 경우 최소 50GB(기본 이미지의 절반, 런타임 이미지의 절반)이 리포지토리의 콘텐츠 위에 구축된 이미지는 편의를 위해 Docker Hub 에서도 사용할 수 있습니다: https://hub.docker.com/r/sickcodes/docker-osx
사용 가능한 Docker 이미지의 전체 목록과 해당 이미지의 용도는 지침에서 확인할 수 있습니다.
Docker-OSX는 Kubernetes를 지원합니다.
Kubernetes Helm 차트 및 문서는 helm 디렉터리에서 찾을 수 있습니다.
이 중요한 기여를 해주신 cephasara에게 감사드립니다.
Docker-OSX를 실행하는 데 사소한 문제가 발생하거나 질문이 있으면 언제든지 문제를 열어주세요.
하지만 이슈를 열기 전에 닫힌 이슈를 확인하고 이 저장소의 최신 버전을 사용하고 있는지 확인하세요. 문제가 이미 해결되었을 수도 있습니다! 아래 질문 및 답변 섹션에서도 답변을 확인할 수 있습니다.
@sickcodes를 팔로우하세요!
보다 정교한 노력을 위해 다음과 같은 지원 서비스를 제공합니다.
관심이 있으시면 Twitter에서 @sickcodes에 문의하시거나 여기를 클릭하세요.
Docker-OSX는 GPL v3+에 따라 라이센스가 부여됩니다. 기여를 환영하며 대단히 감사드립니다. 실제로 Docker-OSX를 독점 소프트웨어를 생성하는 도구로 사용할 수 있습니다.
Apple 보안에 대해 진지하게 생각하고 Apple 버그 바운티 프로그램 내에서 6자리 버그 바운티를 찾을 수 있다면 올바른 위치에 오셨습니다! 추가 참고 사항: Hackintosh, OSX-KVM 또는 Docker-OSX가 합법적인가요?
이 프로젝트에서 언급된 제품 이름, 로고, 브랜드 및 기타 상표는 해당 상표 소유자의 자산입니다. 이러한 상표 보유자는 어떤 경우에도 당사 저장소와 관련이 없습니다. 그들은 어떤 식으로든 이 프로젝트를 후원하거나 지지하지 않습니다.
다양한 목적에 적합한 여러 가지 Docker-OSX 이미지를 사용할 수 있습니다.
sickcodes/docker-osx:latest
- 시험해 보고 싶습니다.sickcodes/docker-osx:latest
- Docker-OSX를 사용하여 Xcode에서 앱을 개발/보안하고 싶습니다(Xcode, Transporter에 로그인).sickcodes/docker-osx:naked
- CI/CD 관련 목적으로 Docker-OSX를 사용하고 싶습니다(Xcode, Transporter에 로그인). :latest
또는 big-sur
사용하여 개인 이미지를 만듭니다. 그런 다음 이미지를 이미지에서 꺼내세요. 그런 다음 컨테이너를 이전 상태로 반복적으로 되돌리기 위해 해당 이미지를 복제하고 :naked
컨테이너로 가져올 수 있습니다.
sickcodes/docker-osx:auto
- 명령줄 사용에만 관심이 있습니다(소프트웨어를 컴파일하거나 Homebrew를 헤드리스로 사용하는 데 유용함).
sickcodes/docker-osx:naked
- 보안 연구를 위해 iMessage/iCloud가 필요합니다.
sickcodes/docker-osx:big-sur
- Big Sur를 실행하고 싶습니다.
sickcodes/docker-osx:monterey
- 몬테레이를 실행하고 싶습니다.
sickcodes/docker-osx:ventura
- Ventura를 실행하고 싶습니다.
sickcodes/docker-osx:sonoma
- 소노마를 실행하고 싶습니다.
sickcodes/docker-osx:high-sierra
- High Sierra를 실행하고 싶습니다.
sickcodes/docker-osx:mojave
- Mojave를 실행하고 싶습니다.
다른 작업을 수행하기 전에 BIOS에서 하드웨어 가상화를 활성화해야 합니다. 정확한 방법은 특정 시스템(및 BIOS)에 따라 다르지만 간단해야 합니다.
그런 다음 호스트에 QEMU 및 기타 종속성이 필요합니다.
# ARCH
sudo pacman -S qemu libvirt dnsmasq virt-manager bridge-utils flex bison iptables-nft edk2-ovmf
# UBUNTU DEBIAN
sudo apt install qemu qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager libguestfs-tools
# CENTOS RHEL FEDORA
sudo yum install libvirt qemu-kvm
그런 다음 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
Windows에서 Docker-OSX를 실행하는 것은 WSL2(Windows 11 + Linux용 Windows 하위 시스템)를 사용하여 가능합니다.
빌드 22000+(21H2 이상)로 Windows 11이 설치되어 있어야 합니다.
먼저 관리자 Powershell에서 이 명령을 실행하여 컴퓨터에 WSL을 설치합니다. 자세한 내용은 여기를 참조하세요.
그러면 기본적으로 Ubuntu가 설치됩니다.
wsl --install
PowerShell에서 wsl -l -v
사용하여 WSL2가 활성화되었는지 확인할 수 있습니다. 사용 가능한 다른 배포판을 보려면 wsl -l -o
사용하세요.
이전에 WSL1을 설치한 경우 WSL 2로 업그레이드하세요. WSL1에서 WSL2로 업그레이드하려면 이 링크를 확인하세요.
WSL 설치 후 C:/Users/<Your_Name>/.wslconfig
로 이동하여 파일 끝에 nestedVirtualization=true
추가합니다(파일이 없으면 새로 만듭니다). .wslconfig
파일에 대한 자세한 내용은 이 링크를 확인하세요. 파일 탐색기 옵션에서 "숨김 파일 표시" 및 "파일 확장자 표시"를 선택했는지 확인하세요. 결과는 다음과 같아야 합니다.
[wsl2]
nestedVirtualization=true
WSL 배포판으로 이동하여(powershell에서 wsl
실행) kvm-ok
명령을 사용하여 KVM이 활성화되어 있는지 확인합니다. 출력은 다음과 같아야 합니다.
INFO: /dev/kvm exists
KVM acceleration can be used
그렇지 않은 경우 sudo apt -y install bridge-utils cpu-checker libvirt-clients libvirt-daemon qemu qemu-kvm
명령을 사용하여 설치하세요.
이제 Windows용 Docker가 아직 설치되지 않은 경우 다운로드하여 설치하세요.
설치 후 설정으로 이동하여 다음 두 상자를 선택하십시오.
General -> "Use the WSL2 based engine";
Resources -> WSL Integration -> "Enable integration with my default WSL distro",
x11-apps
설치되어 있는지 확인하세요. 그렇지 않은 경우 sudo apt install x11-apps -y
명령을 사용하여 설치하십시오.
마지막으로 비디오 출력을 얻는 방법에는 3가지가 있습니다.
WSLg의 기본 제공 X-11 서버를 사용하려면 Docker-OSX가 WSLg를 가리키도록 docker run 명령에서 이 두 줄을 변경하세요.
-e "DISPLAY=${DISPLAY:-:0.0}"
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
아니면 다음을 시도해 보세요.
-e "DISPLAY=${DISPLAY:-:0}"
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
Windows용 Ubuntu 20.x의 경우 #458을 참조하세요.
macOS 기본 시스템 부팅(Enter 키 누르기)
Disk Utility
클릭하세요
가장 큰 디스크(기본값 약 200GB)를 지우고 더 작은 디스크를 수정하지 마십시오. -- erase
클릭할 수 없는 경우 디스크 크기를 1kb 줄여야 할 수도 있습니다.
(선택 사항) 용량을 제한하려는 경우 사용하지 않는 공간을 사용하여 OS와 파일을 보관할 파티션을 만듭니다. (Xcode 12 파티션의 경우 최소 60GB)
Reinstall macOS
클릭하세요.
설치 중에 시스템을 여러 번 재부팅해야 할 수도 있습니다.
시작하는 데 어려움이 있는 경우, 특히 아직 Docker에 익숙하지 않은 경우 시작하기 좋은 곳입니다.
컨테이너를 빨리 만들고 싶으신가요? 컨테이너 생성 예시 섹션을 확인해 보세요.
더 구체적인/고급 문제 해결 질문과 답변은 추가 질문 및 답변에서 확인할 수 있습니다. 마감된 이슈도 확인해야 합니다. 이 문서에서는 찾을 수 없더라도 다른 사람이 이미 귀하와 같은 질문에 대한 답변을 받았을 수도 있습니다!
초기 설정을 참조하세요.
docker: unknown server OS: .
See 'docker run --help'.
이는 docker 데몬이 실행되고 있지 않음을 의미합니다.
pgrep dockerd
아무것도 반환하지 않아야 합니다.
따라서 몇 가지 선택 사항이 있습니다.
전경 Docker 사용을 위한 sudo dockerd
. 나는 이것을 사용한다.
또는
sudo systemctl --start dockerd
하여 지금 dockerd를 시작합니다.
또는
sudo systemctl --enable --now dockerd
재부팅할 때마다 dockerd를 시작합니다.
예:
-e EXTRA='-smp 6,sockets=3,cores=2'
-e EXTRA='-smp 8,sockets=4,cores=2'
-e EXTRA='-smp 16,sockets=8,cores=2'
메모리와 달리 CPU 사용량은 공유됩니다. 따라서 모든 CPU를 컨테이너에 할당할 수 있습니다.
sudo dockerd
사용하거나 dockerd가 systemd/systemctl에 의해 제어되는 경우 Docker 그룹에 속해 있어야 합니다. Docker 그룹에 속하지 않은 경우:
sudo usermod -aG docker " ${USER} "
필요한 경우 kvm 및 libvirt 그룹에 자신을 추가할 수도 있습니다.
sudo usermod -aG libvirt " ${USER} "
sudo usermod -aG kvm " ${USER} "
참조: 초기 설정.
# run ad hoc
sudo dockerd
# or daemonize it
sudo nohup dockerd &
# enable it in systemd (it will persist across reboots this way)
sudo systemctl enable --now docker
# or just start it as your user with systemd instead of enabling it
systemctl start docker
지금까지 생각할 수 있는 거의 모든 문제를 해결해 준 기여자들에게 큰 감사를 드립니다!
https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
docker run
사용하여 컨테이너를 생성하고 나중에 기본 이미지를 다시 재사용하고 싶으십니까?
주의: 적용 가능한 지점에 도달하는 방법은 먼저 컨테이너 생성 예제를 참조하세요.
나중에 SAME 컨테이너를 다시 실행하려는 경우에 사용됩니다. 컨테이너를 재사용하기 전에 docker commit
사용하여 컨테이너를 저장해야 할 수도 있습니다. docker ps --all
사용하여 컨테이너가 지속되는지 확인하세요.
이것을 실행하지 않으면 매번 새로운 이미지가 생성됩니다.
# look at your recent containers and copy the CONTAINER ID
docker ps --all
# docker start the container ID
docker start -ai abc123xyz567
# if you have many containers, you can try automate it with filters like this
# docker ps --all --filter "ancestor=sickcodes/docker-osx"
# for locally tagged/built containers
# docker ps --all --filter "ancestor=docker-osx"
또한 /var/lib/docker
에 저장된 컨테이너에서 .img
파일을 가져와서 :naked
Docker 이미지에 런타임 인수로 제공할 수도 있습니다.
참조: 여기.
sickcodes/docker-osx:auto
사용하는 컨테이너는 시작하는 동안 중지될 수 있습니다.
# find last container
docker ps -a
# docker start old container with -i for interactive, -a for attach STDIN/STDOUT
docker start -ai -i < Replace this with your ID >
하드웨어 가상화를 위한 모든 설정이 아직 완료되지 않은 경우 하나 이상의 libgtk 관련 오류가 나타날 수 있습니다. 아직 수행하지 않은 경우 초기 설정 섹션과 루틴 검사 섹션을 확인하세요. 설정 단계를 놓쳤거나 필요한 Docker 종속성이 모두 준비되지 않았을 수 있습니다.
참조: 여기.
아직 xhost를 설정하지 않았다면 다음을 시도해 보십시오:
echo $DISPLAY
# ARCH
sudo pacman -S xorg-xhost
# UBUNTU DEBIAN
sudo apt install x11-xserver-utils
# CENTOS RHEL FEDORA
sudo yum install xorg-x11-server-utils
# then run
xhost +
시스템에 있는 것보다 더 많은 RAM을 할당할 수 없습니다. 기본값은 3GB입니다: -e RAM=3
.
현재 사용 가능한 것보다 더 많은 RAM을 컨테이너에 할당하려고 하면 다음과 같은 오류가 표시될 수 있습니다. cannot set up guest memory 'pc.ram': Cannot allocate memory
. 참조: 여기, 여기.
예를 들어(아래) buff/cache
이미 20GB의 할당된 RAM이 포함되어 있습니다.
[user@hostname ~] $ free -mh
total used free shared buff/cache available
Mem: 30Gi 3.5Gi 7.0Gi 728Mi 20Gi 26Gi
Swap: 11Gi 0B 11Gi
버퍼와 캐시를 지웁니다.
sudo tee /proc/sys/vm/drop_caches <<< 3
이제 RAM을 다시 확인하십시오.
[user@hostname ~] $ free -mh
total used free shared buff/cache available
Mem: 30Gi 3.3Gi 26Gi 697Mi 1.5Gi 26Gi
Swap: 11Gi 0B 11Gi
참고: AppleALC, alcid
및 VoodooHDA-OC는 코덱을 지원하지 않습니다. 그러나 IORegistryExplorer는 컨트롤러 구성 요소가 작동하는 것을 보여줍니다.
docker run
--device /dev/kvm
-e AUDIO_DRIVER=pa,server=unix:/tmp/pulseaudio.socket
-v " /run/user/ $( id -u ) /pulse/native:/tmp/pulseaudio.socket "
-v /tmp/.X11-unix:/tmp/.X11-unix
sickcodes/docker-osx
docker run
--device /dev/kvm
-e AUDIO_DRIVER=pa,server=unix:/tmp/pulseaudio.socket
-v " /run/user/ $( id -u ) /pulse/native:/tmp/pulseaudio.socket "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e PULSE_SERVER=unix:/tmp/pulseaudio.socket
sickcodes/docker-osx pactl list
docker run
--device /dev/kvm
-e AUDIO_DRIVER=pa,server=unix:/tmp/pulseaudio.socket
-v /mnt/wslg/runtime-dir/pulse/native:/tmp/pulseaudio.socket
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
sickcodes/docker-osx
필요에 따라 추가 포트를 전달할 수 있습니다. 이 예에서는 Mac OSX를 사용하여 nginx를 호스팅합니다.
host:10023 <-> 10023:container:10023 <-> 80:guest
호스트 시스템에서 다음을 실행합니다.
docker run -it
--device /dev/kvm
-p 50922:10022
-e ADDITIONAL_PORTS= ' hostfwd=tcp::10023-:80, '
-p 10023:10023
sickcodes/docker-osx:auto
컨테이너를 실행하는 터미널 세션에서 다음을 실행합니다.
/bin/bash -c " $( curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh ) "
brew install nginx
sudo sed -i -e ' s/8080/80/ ' /usr/local/etc/nginx/nginx.confcd
# sudo nginx -s stop
sudo nginx
이제 nginx는 포트 10023에서 연결할 수 있습니다.
또한 여러 명령문을 함께 문자열로 묶을 수 있습니다. 예를 들면 다음과 같습니다.
-e ADDITIONAL_PORTS= ' hostfwd=tcp::10023-:80,hostfwd=tcp::10043-:443, '
-p 10023:10023
-p 10043:10043
컨테이너 내부에서 인터넷 연결을 활성화하기 위해 기본 설정으로는 아무 작업도 수행할 필요가 없을 수도 있습니다. 또한 ping
작동하지 않더라도 curl
작동할 수 있습니다.
여기, 여기, 여기에서 토론을 참조하세요.
로컬 설치에는 필요하지 않습니다.
또한 컨테이너에서 VPN을 사용하는 경우에도 호스트가 IP를 유출할 수 있다는 점에 유의하세요.
그러나 Docker-OSX 인스턴스(예: 데이터 센터에서 호스팅되는 Docker-OSX 인스턴스)에 원격으로 연결하려는 경우 성능이 향상될 수 있습니다.
# enable for current session
sudo sysctl -w net.ipv4.ip_forward=1
# OR
# sudo tee /proc/sys/net/ipv4/ip_forward <<< 1
# enable permanently
sudo touch /etc/sysctl.conf
sudo tee -a /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 1
EOF
# or edit manually with the editor of your choice
nano /etc/sysctl.conf || vi /etc/sysctl.conf || vim /etc/sysctl.conf
# now reboot
게스트와 폴더를 공유하는 것은 매우 간단합니다.
폴더는 Arch 컨테이너 내부의 /mnt/hostshare로 이동한 다음 QEMU를 통해 전달됩니다.
그런 다음 Mac 내부에서 sudo -S mount_9p hostshare
사용하여 마운트합니다.
예를 들어,
FOLDER= ~ /somefolder
-v " ${FOLDER} :/mnt/hostshare "
-e EXTRA= " -virtfs local,path=/mnt/hostshare,mount_tag=hostshare,security_model=passthrough,id=hostshare "
전체 예:
# stat mac_hdd_ng.img
SHARE= ~ /somefolder
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-v " ${PWD} /mac_hdd_ng.img:/home/arch/OSX-KVM/mac_hdd_ng.img "
-v " ${SHARE} :/mnt/hostshare "
-e EXTRA= " -virtfs local,path=/mnt/hostshare,mount_tag=hostshare,security_model=passthrough,id=hostshare "
sickcodes/docker-osx:latest
# !!! Open Terminal inside macOS and run the following command to mount the virtual file system
# sudo -S mount_9p hostshare
NFS를 사용하여 폴더를 공유하려면 호스트 시스템에 폴더를 설정합니다(예: /srv/nfs/share
. 그런 다음 /etc/exports
에 추가합니다.
/srv/nfs/share 127.0.0.1/0(insecure,rw,all_squash,anonuid=1000,anongid=985,no_subtree_check)
지금 내보내기를 다시 로드해야 할 수도 있습니다. 그러면 해당 디렉터리 공유가 시작됩니다.
# reload shared folders
sudo exportfs -arv
출처 및 설명
anonuid
및 anongid
에 공유 폴더에 대한 권한을 부여합니다. 여기서 anonuid
및 anongid
Linux 사용자의 것과 일치합니다. id -u
id -u ; id -g
userid:groupid
인쇄합니다.
chown 1000:985 /srv/nfs/share
chmod u+rwx /srv/nfs/share
추가 플래그 --network host
사용하여 Docker-OSX 컨테이너를 시작합니다.
Mac 터미널에서 nfs 폴더를 생성하고 마운트합니다.
mkdir -p ~/mnt
sudo mount_nfs -o locallocks 10.0.2.2:/srv/nfs/share ~/mnt
컨테이너를 시작합니다.
포트(예: 7700
를 선택하십시오.
vid:pid
얻기 위한 lsusb
Linux: sudo usbredirserver -p 7700 1e3d:2096
이제 Docker 창에서 Enter를 눌러 (qemu)
콘솔을 확인하세요.
머신이 시작된 후에도 다음과 같은 명령을 사용하여 디스크를 추가/제거할 수 있습니다.
chardev-add socket,id=usbredirchardev1,port=7700,host=172.17.0.1
device_add usb-redir,chardev=usbredirchardev1,id=usbredirdev1,debug=4
PORT=7700
IP_ADDRESS=172.17.0.1
-e EXTRA= " -chardev socket,id=usbredirchardev1,port= ${PORT} ,host= ${IP_ADDRESS} -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1,debug=4 " `
Fedora의 기본 방화벽 설정으로 인해 Docker의 네트워크 인터페이스가 인터넷에 연결되지 않을 수 있습니다. 이 문제를 해결하려면 방화벽에서 인터페이스를 화이트리스트에 추가해야 합니다.
# Set the docker0 bridge to the trusted zone
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload
컴퓨터에 하드웨어 가상화가 활성화되어 있는지 확인하세요.
sudo tee /sys/module/kvm/parameters/ignore_msrs <<< 1
egrep -c ' (svm|vmx) ' /proc/cpuinfo
-e NETWORKING=vmxnet3
-e NETWORKING=e1000-82545em
/
디렉토리에서 시작하여 du -sh *
사용하고 파일을 제거할 수 있는 큰 디렉토리를 찾는 것입니다. 예: 불필요한 캐시 파일, Xcode 플랫폼 등sudo trimforce enable
사용하여 트림을 활성화하고 재부팅하세요.dd if=/dev/zero of=./empty && rm -f empty
사용하여 디스크의 빈 공간을 0으로 만듭니다.docker cp stoppedcontainer:/home/arch/OSX-KVM/mac_hdd_ng.img .
qemu-img check -r all mac_hdd_ng.img
실행하세요.qemu-img convert -O qcow2 mac_hdd_ng.img deduped.img
실행하고 오류를 다시 확인하세요.qemu-img convert -c -O qcow2 deduped.img compressed.img
실행하여 이미지를 추가로 압축하세요. 이렇게 하면 런타임 속도가 줄어들 수 있지만 크기는 약 25% 감소해야 합니다. FROM sickcodes/docker-osx
USER arch
COPY --chown=arch ./deduped.img /home/arch/OSX-KVM/mac_hdd_ng.img
먼저 자동 부팅이 활성화되어 있는지 확인하십시오
다음으로 SSH가 자동으로 시작되도록 설정하려고 합니다.
sudo systemsetup -setremotelogin on
새 Docker 이미지를 커밋하고 저장하거나 디스크 공간 줄이기 섹션에 설명된 대로 다시 빌드하세요.
그런 다음 이러한 인수를 사용하여 실행하십시오.
# Run with the -nographic flag, and enable a telnet interface
docker run
--device /dev/kvm
-p 50922:10022
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e EXTRA= " -monitor telnet::45454,server,nowait -nographic -serial null "
mycustomimage
Docker-OSX를 로컬로 구축하는 경우 아마도 Arch Linux의 미러를 사용하고 싶을 것입니다.
미러 위치는 여기에서 찾을 수 있습니다(두 글자 국가 코드 사용): https://archlinux.org/mirrorlist/all/
docker build -t docker-osx:latest
--build-arg RANKMIRRORS=true
--build-arg MIRROR_COUNTRY=US
--build-arg MIRROR_COUNT=10
--build-arg SHORTNAME=catalina
--build-arg SIZE=200G .
편리한 런타임 인수 제공자 옵션 -e EXTRA=
사용하여 모든 장치/디렉터리를 Docker 컨테이너 및 QEMU 인수에 전달합니다.
# example customizations
docker run
-e RAM=4
-e SMP=4
-e CORES=4
-e EXTRA= ' -usb -device usb-host,hostbus=1,hostaddr=8 '
-e INTERNAL_SSH_PORT=23
-e MAC_ADDRESS= " $( xxd -c1 -p -l 6 /dev/urandom | tr ' n ' ' : ' | cut -c1-17 ) "
-e AUDIO_DRIVER=alsa
-e IMAGE_PATH=/image
-e SCREEN_SHARE_PORT=5900
-e DISPLAY=:0
-e NETWORKING=vmxnet3
--device /dev/kvm
--device /dev/snd
-v /tmp/.X11-unix:/tmp/.X11-unix
docker-osx:latest
./custom
에서 일련번호를 생성하거나 docker가 런타임에 일련번호를 생성하도록 합니다(아래 참조).
iCloud 등에 로그인하기 전에 언제든지 일련번호를 확인하십시오.
# this is a quick way to check your serial number via cli inside OSX
ioreg -l | grep IOPlatformSerialNumber
# test some commands
sshpass -p ' alpine ' ssh user@localhost -p 50922 ' ping google.com '
# check your serial number
sshpass -p ' alpine ' ssh user@localhost -p 50922 ' ioreg -l | grep IOPlatformSerialNumber '
# ARCH
pacman -S libguestfs
# UBUNTU DEBIAN
apt install libguestfs -y
# RHEL FEDORA CENTOS
yum install libguestfs -y
./custom
폴더 안에는 4
스크립트가 있습니다.
config-nopicker-custom.plist
opencore-image-ng.sh
이 두 파일은 OSX-KVM에서 가져온 것입니다.
이 두 파일을 건드릴 필요는 없습니다.
config.plist에는 자리 표시자로 대체된 5개의 값이 있습니다. 이유 없이 해당 값을 보려면 여기를 클릭하세요.
generate-unique-machine-values.sh
이 스크립트는 Mac 주소와 함께 일련 번호를 생성하고 CSV/TSV로 출력하며 bootdisk image
만듭니다. 수백 개의 ./custom/generate-unique-machine-values.sh --help
생성할 수 있습니다.
./custom/generate-unique-machine-values.sh
--count 1
--tsv ./serial.tsv
--bootdisks
--output-bootdisk OpenCore.qcow2
--output-env source.env.sh
아니면 특정 일련번호가 있는 경우...
generate-specific-bootdisk.sh
generate-specific-bootdisk.sh
--model " ${DEVICE_MODEL} "
--serial " ${SERIAL} "
--board-serial " ${BOARD_SERIAL} "
--uuid " ${UUID} "
--mac-address " ${MAC_ADDRESS} "
--output-bootdisk OpenCore-nopicker.qcow2
# proof of concept only, generates random serial numbers, headlessly, and quits right after.
docker run --rm -it
--device /dev/kvm
-p 50922:10022
-e NOPICKER=true
-e GENERATE_UNIQUE=true
-e DEVICE_MODEL= " iMacPro1,1 "
sickcodes/docker-osx:auto
# -e OSX_COMMANDS='ioreg -l | grep IOPlatformSerialNumber'
# run the same as above 17gb auto image, with SSH, with nopicker, and save the bootdisk for later.
# you don't need to save the bootdisk IF you supply specific serial numbers!
docker run -it
--device /dev/kvm
-p 50922:10022
-e NOPICKER=true
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-e SERIAL= " C02TW0WAHX87 "
-e BOARD_SERIAL= " C027251024NJG36UE "
-e UUID= " 5CCB366D-9118-4C61-A00A-E5BAF3BED451 "
-e MAC_ADDRESS= " A8:5C:2C:9A:46:2F "
-e OSX_COMMANDS= ' ioreg -l | grep IOPlatformSerialNumber '
sickcodes/docker-osx:auto
# run an existing image in current directory, with a screen, with SSH, with nopicker.
stat mac_hdd_ng.img # make sure you have an image if you're using :naked
docker run -it
-v " ${PWD} /mac_hdd_ng.img:/image "
--device /dev/kvm
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-v /tmp/.X11-unix:/tmp/.X11-unix
-p 50922:10022
-e NOPICKER=true
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-e SERIAL= " C02TW0WAHX87 "
-e BOARD_SERIAL= " C027251024NJG36UE "
-e UUID= " 5CCB366D-9118-4C61-A00A-E5BAF3BED451 "
-e MAC_ADDRESS= " A8:5C:2C:9A:46:2F "
-e WIDTH=1000
-e HEIGHT=1000
sickcodes/docker-osx:naked
일련 번호를 생성하려면 -e GENERATE_UNIQUE=true
또는 ./custom
폴더 내에서 생성할 수 있습니다. 그런 다음 다음을 사용하십시오.
-e GENERATE_SPECIFIC=true
-e SERIAL= " "
-e BOARD_SERIAL= " "
-e UUID= " "
-e MAC_ADDRESS= " "
stat mac_hdd_ng_testing.img
touch ./output.env
# generate fresh random serial numbers, with a screen, using your own image, and save env file with your new serial numbers for later.
docker run -it
--device /dev/kvm
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-v /tmp/.X11-unix:/tmp/.X11-unix
-p 50922:10022
-e NOPICKER=true
-e GENERATE_UNIQUE=true
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-v " ${PWD} /output.env:/env "
-v " ${PWD} /mac_hdd_ng_testing.img:/image "
sickcodes/docker-osx:naked
iMessage 또는 iCloud를 사용하려면 5
값을 변경해야 합니다.
SERIAL
BOARD_SERIAL
UUID
MAC_ADDRESS
ROM
각 단어 사이에 :
가 없는 소문자 Mac 주소입니다.
-e GENERATE_UNIQUE=true
사용하여 컨테이너가 생성하도록 지시할 수 있습니다.
또는 -e GENERATE_SPECIFIC=true
사용하여 특정 컨테이너를 사용하도록 컨테이너에 지시합니다.
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-e SERIAL= " C02TW0WAHX87 "
-e BOARD_SERIAL= " C027251024NJG36UE "
-e UUID= " 5CCB366D-9118-4C61-A00A-E5BAF3BED451 "
-e MAC_ADDRESS= " A8:5C:2C:9A:46:2F "
디스플레이 해상도는 다음 라인으로 제어됩니다.
https://github.com/sickcodes/Docker-OSX/blob/master/custom/config-nopicker-custom.plist#L819
해당 디스크를 마운트하는 대신 Docker-OSX는 다음과 같은 멋진 트릭을 사용하여 새로운 OpenCore.qcow2
생성합니다.
-e GENERATE_UNIQUE=true
-e WIDTH=800
-e HEIGHT=600
WIDTH
/ HEIGHT
사용하려면 -e GENERATE_UNIQUE=true
또는 -e GENERATE_SPECIFIC=true
와 함께 사용해야 합니다.
libguestfs
사용하여 새 부팅 파티션을 만들어야 하기 때문에 부팅하는 데 약 30초 정도 더 걸립니다.
-e GENERATE_SPECIFIC=true
-e WIDTH=1920
-e HEIGHT=1080
-e SERIAL= " "
-e BOARD_SERIAL= " "
-e UUID= " "
-e MAC_ADDRESS= " "
# using an image in your current directory
stat mac_hdd_ng.img
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-e SERIAL= " C02TW0WAHX87 "
-e BOARD_SERIAL= " C027251024NJG36UE "
-e UUID= " 5CCB366D-9118-4C61-A00A-E5BAF3BED451 "
-e MAC_ADDRESS= " A8:5C:2C:9A:46:2F "
-e MASTER_PLIST_URL=https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/config-nopicker-custom.plist
-e WIDTH=1600
-e HEIGHT=900
sickcodes/docker-osx:naked
# generating random serial numbers, using the DIY installer, along with the screen resolution changes.
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
-e WIDTH=800
-e HEIGHT=600
sickcodes/docker-osx:latest
여기에 몇 가지 다른 해결 방법이 있습니다! 해상도가 유효하지 않은 경우 기본값은 800x600입니다.
-e WIDTH=800
-e HEIGHT=600
-e WIDTH=1280
-e HEIGHT=768
-e WIDTH=1600
-e HEIGHT=900
-e WIDTH=1920
-e HEIGHT=1080
-e WIDTH=2560
-e HEIGHT=1600
첫 번째 단계는 docker 데몬을 중지하는 것입니다.
sudo systemctl stop docker
두 번째 단계는 컨테이너 구성을 변경하는 것입니다.
/var/lib/docker/containers/[container-id]/config.v2.json
(원래 WIDTH가 1024이고 HEIGHT가 768이라고 가정하면 1024를 검색하여 새 값으로 바꿀 수 있습니다. 768도 마찬가지입니다.)
마지막 단계는 docker 데몬을 다시 시작하는 것입니다.
sudo systemctl restart docker
디스크를 볼륨으로 컨테이너에 전달한 다음 디스크를 다시 QEMU 명령줄 추가 항목에 전달합니다.
부팅 메뉴를 보고 싶으면 config-custom.plist
사용하고, 그렇지 않으면 첫 번째 줄을 생략하세요.
DISK_TWO= " ${PWD} /mount_me.img "
-e MASTER_PLIST_URL= 'https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist'
-v "${DISK_TWO}:/disktwo"
-e EXTRA= '-device ide-hd,bus=sata.5,drive=DISK-TWO -drive id=DISK-TWO,if=none,file=/disktwo,format=qcow2'
OSX_IMAGE= " ${PWD} /mac_hdd_ng_xcode_bigsur.img "
DISK_TWO= " ${PWD} /mount_me.img "
docker run -it
--device /dev/kvm
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e MASTER_PLIST_URL= ' https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist '
-v " ${OSX_IMAGE} " :/image
-v " ${DISK_TWO} " :/disktwo
-e EXTRA= ' -device ide-hd,bus=sata.5,drive=DISK-TWO -drive id=DISK-TWO,if=none,file=/disktwo,format=qcow2 '
sickcodes/docker-osx:naked
참조: 여기.
Docker-OSX에서는 qcow2
이미지를 사용하고 있습니다.
이는 이미지를 사용함에 따라 이미지가 커지지만 게스트 OS에서는 사용 가능한 공간이 200GB라고 생각한다는 의미입니다.
읽기 전용
# mount the qemu image like a real disk
sudo modprobe nbd max_part=8
sudo qemu-nbd --connect=/dev/nbd0 ./image.img
sudo fdisk /dev/nbd0 -l
mkdir -p ./mnt
sudo mount /dev/nbd0p1 ./mnt
# inspect partitions (2 partitions)
sudo fdisk /dev/nbd0 -l
# mount using apfs-linux-rw OR apfs-fuse
mkdir -p ./part
sudo mount /dev/nbd0p2 ./part
sudo apfs-fuse -o allow_other /dev/nbd0p2 ./part
디스크 살펴보기가 끝나면 파티션과 디스크를 마운트 해제하고 루프백 장치를 제거할 수 있습니다.
sudo umount ./part
sudo umount ./mnt
sudo qemu-nbd --disconnect /dev/nbd0
sudo rmmod nbd
먼저 QEMU를 루트로 시작해야 합니다.
컨테이너에 있는 장치의 권한을 변경하여 USB 패스스루를 수행하는 것도 잠재적으로 가능합니다. 여기를 참조하세요.
예를 들어 다음을 사용하여 새 Dockerfile을 만듭니다.
FROM sickcodes/docker-osx
USER arch
RUN sed -i -e s/exec qemu/exec sudo qemu/ ./Launch.sh
COPY --chown=arch ./new_image.img /home/arch/OSX-KVM/mac_hdd_ng.img
new_image.img
는 추출한 qcow2 이미지입니다. 그런 다음 docker build .
다음으로 VM에 전달하려는 USB 장치의 버스 및 포트 번호를 찾아야 합니다.
lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
| __ Port 2: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 12M
| __ Port 2: Dev 5, If 1, Class=Chip/SmartCard, Driver=, 12M
| __ Port 3: Dev 2, If 0, Class=Wireless, Driver=, 12M
| __ Port 3: Dev 2, If 1, Class=Wireless, Driver=, 12M
| __ Port 5: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
| __ Port 5: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
이 예에서는 스마트카드 장치를 통과하려고 합니다. 우리가 원하는 장치는 버스 1과 포트 2에 있습니다.
장치가 USB 2.0(ehci)과 USB 3.0(xhci)인 경우에도 차이가 있을 수 있습니다. 자세한 내용은 여기를 참조하세요.
# hostbus and hostport correspond to the numbers from lsusb
# runs in privileged mode to enable access to the usb devices.
docker run
--privileged
--device /dev/kvm
-e RAM=4
-p 50922:10022
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e EXTRA= " -device virtio-serial-pci -device usb-host,hostbus=1,hostport=2 "
mycustomimage
MacOS 셸에서 system_profiler SPUSBDataType
실행하면 장치가 표시되는 것을 볼 수 있습니다.
중요 참고 사항: 이렇게 하면 VM이 실행되는 동안 호스트 시스템이 USB 장치에 액세스할 수 없게 됩니다!
제가 가장 좋아하는 용기입니다. 기존 디스크 이미지를 Docker 명령줄 인수로 제공할 수 있습니다.
sudo find /var/lib/docker -name mac_hdd_ng.img -size +10G
사용하여 이미지를 가져옵니다.
-v "${PWD}/mac_hdd_ng.img:/image"
명령 인수를 사용하여 자체 로컬 이미지를 제공하고 Docker에 컨테이너 생성을 지시할 때 sickcodes/docker-osx:naked
사용하세요.
네이키드 이미지는 기존 .img 파일을 부팅하기 위한 것입니다(예: 현재 작업 디렉터리( $PWD
)).
기본적으로 이 이미지에는 "true"
인 NOPICKER
라는 변수가 있습니다. 디스크 선택 메뉴를 건너뜁니다. -e NOPICKER=false
또는 true
라는 단어가 아닌 다른 문자열을 사용하여 부팅 메뉴로 들어갑니다.
이를 통해 부팅 메뉴를 건너뛰는 대신 복구 디스크나 디스크 유틸리티와 같은 다른 디스크를 사용할 수 있습니다.
docker pull sickcodes/docker-osx:naked
# run your own image + SSH
# change mac_hdd_ng.img
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
sickcodes/docker-osx:naked
# run local copy of the auto image + SSH + Boot menu
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng_auto.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e " NOPICKER=false "
sickcodes/docker-osx:naked
다음 줄을 유지하면 빠른 시작 명령이 즉시 작동합니다. auto
및 naked
기계에서 작동:
-v /tmp/.X11-unix:/tmp/.X11-unix
-e "DISPLAY=${DISPLAY:-:0.0}"
-e OSX_COMMANDS
사용하면 컨테이너 내부의 모든 명령을 실행할 수 있습니다.
docker pull sickcodes/docker-osx:auto
# boot to OS X shell + display + specify commands to run inside OS X!
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 " "
sickcodes/docker-osx:auto
# Boots in a minute or two!
또는 이미 이미지가 있고 로그인하여 임의의 명령을 실행하려는 경우:
docker pull sickcodes/docker-osx:naked-auto
# boot to OS X shell + display + specify commands to run inside OS X!
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e USERNAME=yourusername
-e PASSWORD=yourpassword
-e " OSX_COMMANDS=/bin/bash -c " put your commands here " "
sickcodes/docker-osx:naked-auto
# Boots in a minute or two!
Docker-OSX와 완벽하게 작동할 수 있는 잠재적인 사용 사례는 무수히 많습니다. 그 중 일부는 아래에서 확인하실 수 있습니다!
헤드리스 컨테이너의 경우 docker run
명령에서 다음 두 줄을 제거합니다 .
# -v /tmp/.X11-unix:/tmp/.X11-unix
# -e "DISPLAY=${DISPLAY:-:0.0}"
이는 CI/CD 파이프라인에 특히 유용합니다.
# run your own image headless + SSH
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng.img:/image "
sickcodes/docker-osx:naked
QEMU 콘솔과 상호 작용하려면 -it를 -i로 변경해야 합니다.
-i를 사용하여 컨테이너를 종료하려면 docker kill <containerid>
수행해야 합니다. 예를 들어, 모든 것을 종료하려면 docker ps | xargs docker kill
.
네이티브 QEMU VNC 예
docker run -i
--device /dev/kvm
-p 50922:10022
-p 5999:5999
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e EXTRA= " -display none -vnc 0.0.0.0:99,password=on "
sickcodes/docker-osx:big-sur
# type `change vnc password myvncusername` into the docker terminal and set a password
# connect to localhost:5999 using VNC
# qemu 6 seems to require a username for vnc now
TLS/HTTPS가 전혀 암호화되지 않았습니다!
또는 ssh -N [email protected] -L 5999:127.0.0.1:5999
, 여기서 1.1.1.1
은 원격 서버 IP입니다.
(참고: 포트 5999를 닫고 SSH 터널을 사용하면 보안이 유지됩니다.)
다음 줄을 추가합니다.
-e EXTRA="-display none -vnc 0.0.0.0:99,password=on"
Docker 터미널에서 (qemu)
가 나타날 때까지 enter
누릅니다.
change vnc password someusername
입력하세요.
새 vnc 사용자 이름의 비밀번호를 입력하세요^.
컨테이너 IP도 필요합니다. docker inspect <containerid> | jq -r '.[0].NetworkSettings.IPAddress'
또는 ip n
일반적으로 컨테이너 IP를 먼저 표시합니다.
이제 VNC는 Docker 컨테이너 IP(예: 172.17.0.2:5999
를 사용하여 연결합니다.
SSH를 통한 원격 VNC: ssh -N [email protected] -L 5999:172.17.0.2:5999
, 여기서 1.1.1.1
은 원격 서버 IP이고 172.17.0.2
는 LAN 컨테이너 IP입니다.
이제 이 명령으로 구축된 모든 컨테이너에 VNC를 직접 연결할 수 있습니다!
선택적으로 remote-viewer
사용하여 VNC가 아닌 OSX 컨테이너에 액세스할 수 있도록 하는 SPICE 프로토콜을 활성화할 수 있습니다.
참고: -disable-ticketing
VM에 대한 인증되지 않은 액세스를 허용합니다. 인증된 액세스("티켓팅") 설정에 대한 도움말은 Spice 매뉴얼을 참조하세요.
docker run
--device /dev/kvm
-p 3001:3001
-p 50922:10022
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e EXTRA= " -monitor telnet::45454,server,nowait -nographic -serial null -spice disable-ticketing,port=3001 "
mycustomimage
그런 다음 remote-viewer spice://localhost:3001
수행하고 디버깅을 위해 --spice-debug
추가하면 됩니다.
# You can create an image of an already configured and setup container.
# This allows you to effectively duplicate a system.
# To do this, run the following commands
# make note of your container id
docker ps --all
docker commit containerid newImageName
# To run this image do the following
docker run
--device /dev/kvm
--device /dev/snd
-v /tmp/.X11-unix:/tmp/.X11-unix
newImageName
docker pull sickcodes/docker-osx:auto
# boot directly into a real OS X shell with no display (Xvfb) [HEADLESS]
docker run -it
--device /dev/kvm
-p 50922:10022
sickcodes/docker-osx:auto
# username is user
# password is alpine
# Wait 2-3 minutes until you drop into the shell.
docker pull sickcodes/docker-osx:latest
docker run -it
--device /dev/kvm
--device /dev/snd
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
sickcodes/docker-osx:latest
# press CTRL + G if your mouse gets stuck
# scroll down to troubleshooting if you have problems
# need more RAM and SSH on localhost -p 50922?
docker run -it
--device /dev/kvm
--device /dev/snd
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
sickcodes/docker-osx:latest
# turn on SSH after you've installed OS X in the "Sharing" settings.
ssh user@localhost -p 50922
추가 옵션 -e NOPICKER=true
추가하세요.
오래된 기계:
# find your containerID
docker ps
# move the no picker script on top of the Launch script
# NEW CONTAINERS
docker exec containerID mv ./Launch-nopicker.sh ./Launch.sh
# VNC-VERSION-CONTAINER
docker exec containerID mv ./Launch-nopicker.sh ./Launch_custom.sh
# LEGACY CONTAINERS
docker exec containerID bash -c " grep -v InstallMedia ./Launch.sh > ./Launch-nopicker.sh
chmod +x ./Launch-nopicker.sh
sed -i -e s/OpenCore.qcow2/OpenCore-nopicker.qcow2/ ./Launch-nopicker.sh
"
컨테이너 설정에는 자동 업데이트가 계속 켜져 있습니다. 이 기능을 끄고 싶을 수도 있습니다. 우리는 이와 관련된 향후 개발 계획을 가지고 있습니다.
${DISPLAY:-:0.0}
은 무엇입니까? $DISPLAY
는 X11 디스플레이 서버를 참조하는 쉘 변수입니다.
${DISPLAY}
동일하지만 다음과 같이 변수를 결합할 수 있습니다.
${DISPLAY}_${DISPLAY}
:0.0_:0.0
을 인쇄합니다.$DISPLAY_$DISPLAY
:0.0
을 인쇄합니다. ... $DISPLAY_
$DISPLAY
아니기 때문입니다.
${variable:-fallback}
사용하면 $variable
설정되지 않은 경우 대체할 "fallback" 변수를 설정할 수 있습니다.
${variable:=fallback}
사용하여 해당 변수를 설정할 수도 있습니다(현재 터미널에서).
Docker-OSX에서는 :0.0
이 기본 $DISPLAY
변수라고 가정합니다.
당신의 것이 무엇인지 알 수 있습니다
echo $DISPLAY
그렇게 하면 ${DISPLAY:-:0.0}
X11 서버가 설정한 변수를 사용하고 그렇지 않으면 :0.0
사용합니다.
-v /tmp/.X11-unix:/tmp/.X11-unix
란 무엇입니까? -v
는 볼륨을 컨테이너에 전달할 수 있는 Docker 명령줄 옵션입니다.
Docker 컨테이너가 사용할 디렉터리는 X 서버 디스플레이 소켓입니다.
/tmp/.X11-unix
Docker 컨테이너가 우리 환경과 동일한 디스플레이 소켓을 사용하도록 하면 Docker 컨테이너 내에서 실행하는 모든 애플리케이션이 화면에도 표시됩니다! https://www.x.org/archive/X11R6.8.0/doc/RELNOTES5.html
컨테이너를 초기화하거나 부팅할 때 (qemu)
콘솔에서 다음 형식의 오류가 표시될 수 있습니다. ALSA lib blahblahblah: (function name) returned error: no such file or directory
. 이는 어느 정도 예상됩니다. 컨테이너로 부팅할 수 있고 모든 것이 작동하는 한 이에 대해 걱정할 이유가 없습니다.
참조: 여기.