Docker і VMWare Workstation на адной Windows машыне
Задача было простае, паставіць Docker на свой працоўны наўтбук з Windows, на якім ужо і так заапарк. Паставіў Docker Desktop стварыў кантэйнеры, усё ок, вось толькі хутка выявіў, што VMWare Workstation перастала запускаць віртуалкі з памылкай:
VMware Workstation and Device/Credential Guard are not compatible. VMware Workstation can be run after disabling Device/Credential Guard.
Праца ўстала, трэба тэрмінова правіць
Метадам гуглення было высветлена, што дадзеная памылка ўзнікае з-за несумяшчальнасці VMWare Workstation і Hyper-V на адной машыне. Праблема вядомая і ёсць афіцыйнае рашэнне VMWare як гэта паправіць, са спасылкай на базу ведаў Microsoft Manage Windows Defender Credential Guard. Рашэнне заключаецца ў адключэнні Defender Credential Guard (мне дапамог пункт 4 раздзела Disable Windows Defender Credential Guard):
Пасля перазапуску Windows спытае, ці сапраўды адключыць Defender Credential Guard. Так! Такім чынам VMWare Workstation вернецца да звычайнай працы, і мы апынемся ў тым жа месцы, што і да ўсталёўкі докера.
Рашэнні як памірыць Hyper-V і VMWare Workstation я так і не знайшоў, спадзяюся ў новых версіях яны пасябруюць.
Іншы шлях
Я ўжо даўно падсеў на VMWare Workstation для розных мэт, спрабаваў злезці на Hyper-V і VirtualBox, але функцыянал не задаволіў маім задачам, так дагэтуль і сяджу. Аказалася ёсць рашэнне як пасябраваць VMWare, Docker і VSCode у адным працоўным асяроддзі.
Машына Docker - дазваляе запускаць Docker Engine на віртуальным хасце і падлучацца да яго як выдалена, так і лакальна. І для яго ёсць драйвер сумяшчальнасці з VMWare Workstation, спасылка на GitHub
Інструкцыю па ўстаноўцы асабліва пераказваць не буду, толькі спіс інгрэдыентаў:
Так, Docker Desktop, нажаль, таксама спатрэбіцца. Калі знеслі яго, то ўсталёўваны нанова, але на гэты раз прыбраўшы чекбокс аб занясенні змен у АС, каб ізноў не зламаць VMWare Workstation.
Адразу хачу заўважыць, што ўсё выдатна працуе ад простага карыстальніка, праграмы ўстаноўкі папросяць эскалацыю правоў калі ім спатрэбіцца, але ўсе каманды ў камандным радку і скрыпты выконваюцца ад бягучага карыстальніка.
У выніку камандай:
$ docker-machine create --driver=vmwareworkstation dev
з Boot2Docker будзе створана віртуалка dev ўнутры якой будзе Docker.
Гэтую віртуалку можна прычапіць у графічны інтэрфейс VMWare Workstation, адкрыўшы які адпавядае vmx файл. Але гэта не абавязкова, бо VSCode зараз запатрабуецца запускаць PowerShell скрыптам (у мяне чамусьці docker-machine і docker-machine-driver-vmwareworkstation апынуліся менавіта ў тэчцы bin):
cd ~/bin
./docker-machine env dev | Invoke-Expression
code
Адкрыецца VSCode для працы кодам на лакальнай машыне і докерам у віртуалцы. Убудова Docker for Visual Studio Code дазваляе зручна кіраваць кантэйнерамі ў віртуалцы не залазячы ў кансоль.
Складанасці:
У працэсе стварэння docker-machine у мяне працэс завісаў:
Waiting for SSH to be available...
І праз некаторы час завяршыўся з перавышэннем спроб усталяваць злучэнне з віртуалкай.
Уся справа ў палітыцы да сертыфікатаў. Пры стварэнні віртуальнай машыны, у вас з'явіцца каталог ~.dockermachinemachinesdev у гэтым каталогу будуць файлы сертыфіката для падлучэння па SSH: id_rsa, id_rsa.pub. OpenSSH можа адмаўляцца іх выкарыстоўваць, бо лічыць, што ў іх праблемы з правамі доступу. Толькі вось docker-machine вам пра гэта нічога не скажа, а проста будзе перападключаць пакуль не надакучыць.
рашэнне: Як толькі пачнецца стварэнне новай віртуальнай машыны заходзім у каталог ~.dockermachinemachinesdev і мяняем правы на паказаныя файлы, па адным.
Уладальнікам файла павінен быць бягучы карыстач, поўны доступ толькі ў бягучага карыстача і SYSTEM, усіх астатніх карыстачоў, уключаючы групу адміністратараў і саміх адміністратараў трэба выдаляць.
Гэтак жа могуць быць праблемы з пераўтварэннем абсалютных шляхоў з Windows фармату ў Posix, і з біндзінгам тамоў утрымоўвальных symbolic link. Але гэта ўжо іншая гісторыя.