Instalace virtuálního počítače s Windows do kontejneru Linux Docker
Podrobný průvodce kontejnerováním virtuálního počítače s Windows – s přístupem RDP – na platformě Linux Docker s KVM Hypervisor
Pozadí
Nedávno jsem dostal za úkol vyvinout PoC laboratorního prostředí, kde budou mít studenti přístup k předinstalovaným a předkonfigurovaným strojům – Linux a Windows – aby mohli provádět nezbytná cvičení. Chtěl jsem zajistit jednotný přístup ke všem strojům přes HTTP / HTTPS (založený na prohlížeči). Zatímco webový přístup ke strojům lze snadno implementovat pomocí platformy jako Guacamole, větší výzvou bylo, jak nasadit stroje způsobem, který efektivně a rychle využívá systémové prostředky – zejména CPU, RAM a HDD. V tomto bodě se ukázalo, že nejlepší cestou je technologie jako Dockerova kontejnerizace. To však představovalo další výzvy.
Každý ze systémů Windows a Linux má své vlastní požadavky na kontejnerizaci – jak bude popsáno v následující části. Nativně nelze na stejném démonu Dockeru spustit současně kontejnery Linux a Windows. Po nějakém výzkumu bylo řešením, které se ukázalo jako nejschopnější, instalace každého počítače se systémem Windows jako virtuálního počítače do jednoho kontejneru Linuxu. Z pohledu démona Dockeru jsou všechny kontejnery založeny na Linuxu. Některé z těchto kontejnerů však provozují hypervisor a navíc je k dispozici virtuální počítač s Windows. I když kontejner s virtuálním počítačem v něm zabere více místa na disku než jiné kontejnery, efektivita při úspoře místa na disku, když máme mnoho kontejnerovaných virtuálních počítačů, je stále vysoká ve srovnání se spuštěním nekontaminovaných virtuálních počítačů.
Nakonec jsem chtěl získat přístup ke stroji se systémem Windows pomocí RDP a užít si plný přístup ke vzdálené ploše k tomuto stroji. Bohužel neexistují uspokojivé podrobné výukové programy a úplné návody, které celý postup snadno a jasně vysvětlují. A cestou jsem musel čelit mnoha malým výzvám. Během svého výzkumu jsem také viděl mnoho lidí – na různých technických fórech – bojovat s takovou implementací a vyjadřovat svou frustraci! Doufám, že tento dokument slouží jako kompletní průvodce řešením tohoto problému.
Proč Containerizing a VM: Our Use Case
Možná se ptáte sami sebe, proč by někdo chtěl instalovat virtuální počítač do kontejneru? Zpočátku to vypadá divně, protože vrstva kontejneru se zdá být zbytečná a lze jednoduše nainstalovat virtuální počítač přímo na základní operační systém. Existují však různé důvody, proč to může být řešení a nezbytný požadavek.
Náš konkrétní případ použití zahrnuje roztočení více identických virtuálních počítačů s Windows, které budou používat různí uživatelé. Kdybychom chtěli pouze jeden virtuální počítač, pak by nebylo nutné jej kontejnerizovat. Ale protože chceme vytvořit mnoho identických virtuálních počítačů, ušetříme obrovské prostředky (HDD, RAM a CPU) tím, že tyto virtuální počítače kontejnerizujeme.
Pokud porovnáme scénář, kde spustíme jeden virtuální počítač přímo v našem základním operačním systému, se scénářem kontejnerizace tohoto virtuálního počítače, zjistíme, že oba budou spotřebovávat podobné místo na disku a další prostředky. Ve skutečnosti pokaždé, když chceme spustit kontejnerový virtuální počítač, uděláme dva kroky: spustit kontejner a poté zapnout virtuální počítač. Následující diagram ukazuje tyto dva scénáře; přímý virtuální počítač zabírá na HDD 30 GB, zatímco Docker Image zabírá 35 GB. Zde není dosaženo velké výhody – z hlediska úspory systémových zdrojů.
Co se však stane, pokud chceme spustit 6 kopií našich zamýšlených virtuálních počítačů? Budeme muset vytvořit 6 kopií tohoto virtuálního počítače, kde každý zabírá přesně stejné místo na disku jako ten původní. Pokud je tedy původní virtuální 30 GB, bude mít 6 kopií počítač 180 GB na pevném disku .
To se dramaticky změní, když kontejnerizujeme každý z těchto identických virtuálních počítačů. Toto je přidaná hodnota technologie kontejnerizace Docker. Vděčí za svou hodnotu tomu, jak Docker rozlišuje mezi dvěma hlavními koncepty: obrázky a kontejnery. Obrázky jsou jen pro čtení a tvoří základ kontejnerů. Kontejnery vytvořené ze stejného obrázku sdílejí stejné jádro jen pro čtení (tj. Obrázek), zatímco každý kontejner přidává vlastní vrstvu pro čtení a zápis, která interaguje s obrázkem jen pro čtení. Další diskuzi o rozdílech mezi obrázky a kontejnery najdete v tomto dokumentu: < klikněte sem >
Pokud vezmeme 35GB Docker Image, v našem příkladu a 6 vytvoříme z něj kontejnerů, každý kontejner vytvoří vlastní vrstvu pro čtení a zápis, prostřednictvím které bude přistupovat k obrazu jen pro čtení. V době vytvoření má tato R / W vrstva 0 velikost; Jakmile však uživatel začne komunikovat s kontejnerem – dělat věci, jako je napájení na virtuálním počítači -, velikost této vrstvy se začne zvětšovat. A pokud budeme předpokládat, že všechny dynamické změny v jedné vrstvě se nahromadily o velikosti 10 GB , to znamená, že všechny 6 kontejnery přidali celkem 60BG v horní části původního 35GB obrazu.
Výzvy
Vyzvěte 1 kontejnery Windows na platformě Windows a kontejnery Linux na platformě Linux
Jednou z největších překážek, kterým čelíte s Dockerem a obecně s kontejnerováním, je to, že nemůžete mít současně spuštěné kontejnery Linux a Windows na stejné platformě (tj. Stejný Dockerův démon). Důvodem je to, že Docker je virtualizace na úrovni OS; To znamená, že jeho hlavní funkcí je obsahovat a izolovat aplikace spuštěné v operačním systému. Démon Docker poskytuje každému kontejneru všechny potřebné vlastnosti na úrovni jádra, aby mohla běžet kontejnerizovaná aplikace. Z tohoto důvodu musí kontejnery se službami / aplikacemi Linux běžet na platformě Linux a kontejnery se službami / aplikacemi Windows musí běžet na platformě Windows.
Windows Docker Desktop má funkci poskytování linuxového subsystému ; a v tomto případě může být spouštění kontejneru Linux nakonec spuštěno ve Windows. Měli bychom si však uvědomit, že pokud je tato funkce povolena, mohou běžet pouze kontejnery Linux, zatímco kontejnery Windows nikoli. Pro spuštění kontejnerů Windows je nutné tuto funkci vypnout; a v tomto scénáři nelze spustit kontejnery Linuxu. Stále není možné spouštět současně kontejnery Linux i Windows na stejné platformě.
Pokud potřebujete mít současně spuštěné kontejnery Linux a Windows a komunikovat s ostatními, možným řešením je nechat každou skupinu spustit na příslušné platformě, poté nakonfigurovat pravidla směrování sítě, NAT a předávání portů.
Ke kontejnerům výzvy 2 Windows Docker nelze přistupovat prostřednictvím protokolu RDP nebo VNC, tj. Bez grafické plochy
I když jsme se rozhodli mít dvě samostatné platformy – platformu Windows pro kontejnery Windows a platformu Linux pro kontejnery Linux – s příslušnou konfigurací sítě, budeme čelit výzvě, že kontejnery Windows nemohou mít desktopové prostředí. To platí pro všechny kontejnery Windows. Jsou navrženy a vytvořeny pro provozování služeb a aplikací; a lze k nim přistupovat pomocí rozhraní příkazového řádku PowerShell / CMD.
Na rozdíl od systému Linux, kde je desktopové prostředí instalovatelnou službou, je Windows Desktop dodáván přímo s OS dodávaným společností Microsoft. A pokud jde o kontejnery založené na systému Windows, společnost Microsoft zveřejnila určité obrázky (známé jako základní obrázky), které tvoří základ jakéhokoli kontejneru Windows. Tyto základní obrázky nepřicházejí se službou Desktop; a člověk nemá ten luxus, aby si jej nainstaloval později jako doplněk.
Další informace o kontejnerech / obrázcích Windows získáte < kliknutím Klikněte sem >
Přehled architektury
Naším konečným cílem je mít plně běžící operační systém Windows, přístupný přes RDP a kontejnerizovaný a spravovaný démonem Docker. Abychom toho dosáhli, budeme mít následující:
- Základní operační systém : bude to hlavní platforma hostující vše ostatní. V našem konkrétním příkladu to bude Linuxový stroj Ubuntu 18.04 .
- Docker Daemon : toto je platforma pro kontejnerování nainstalovaná v základním OS. Prostřednictvím Dockeru vytvoříme náš konečný „obraz“, ze kterého vytvoříme mnoho kontejnerů.
- Docker Image s operačním systémem : Tento operační systém bude součástí každého vytvořeného kontejneru a jeho hlavní funkcí je spuštění hypervisoru, na kterém bude spuštěn virtuální počítač s Windows. V našem případě zde použijeme Ubuntu: 18.04 Docker Image (k dispozici na Docker Hub).
- Hypervisor na Docker Image : Uvnitř Ubuntu Docker Image budeme mít také Hypervisor, který nám umožní později nainstalovat Windows Windows. V našem konkrétním případě použijeme KVM-QEMU hypervisor .
- Virtuální stroj Windows : toto je stroj, ke kterému budeme na konci přistupovat prostřednictvím RDP. V našem příkladu použijeme předbalený Windows 10 Vagrant Box dostupný na ( https://app.vagrantup.com/peru/boxes/windows-10-enterprise-x64-eval )
Instalace Dockeru na hlavní platformu
První věcí, kterou musíme udělat, je nainstalovat Docker do našeho hlavního operačního systému. Kvůli tomuto výukovému programu je naším hlavním systémem Ubuntu 20.04 (Linux Kernel 5.4.0–40-generický) se 70 GB HDD, 4 GB RAM a 2 jádry CPU.
Při instalaci Dockeru postupujte podle následujících pokynů:
[1] Aktualizujte index balíku apt a nainstalujte balíčky, aby apt mohl používat úložiště přes HTTPS:
sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
[2] Přidat oficiální klíč GPG Dockeru:
curl -fSSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add
sudo apt-key fingerprint 0EBFCD88
[3] Nastavení stabilního úložiště Dockeru:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
[4] Aktualizovat index balíku apt:
sudo apt update
N ozn á mka : Jedná se o důležitý krok po přidání nové úložiště v kroku 3.
[5] Nainstalujte nejnovější verzi Docker Engine:
sudo apt install docker-ce -y
Poznámka : Nemusíte instalovat balíčky docker-ce-cli nebo containerd.io, protože jsou instalovány přímo s balíčkem docker-ce.
[6] Spusťte Docker hned teď a nakonfigurujte jej tak, aby se automaticky spouštěl po restartu:
sudo systemctl start dockersudo systemctl enable docker
Vytváření správného obrazu Dockeru
Nyní, když je Docker nainstalován, můžeme začít vytvářet image, která bude základem pro náš kontejner, na kterém budeme mít virtuální počítač. První část níže vysvětluje, jak vytvořit tento obrázek ručně bez použití souboru Dockerfile. Poté ve druhé části vysvětlím, jak automatizovat vytváření obrazu pomocí souboru Dockerfile.
Před vytvořením bitové kopie však musíme zkontrolovat, zda náš systém podporuje virtualizaci. Protože náš kontejner bude provozovat hypervisor, nebude fungovat, pokud hlavní platforma nepodporuje virtualizaci. V opačném případě budeme při pokusu o instalaci virtuálního počítače čelit chybě později. Můžeme spustit následující příkaz:
sudo egrep -c '(vmx|svm)' /proc/cpuinfo
Pokud je na výstupu číslo větší než 0, je dobré pokračovat dále. Jinak se musíte ujistit, že je v nastavení systému BIOS povolena virtualizace (VT-x). Pokud je vaše hlavní platforma sama o sobě virtuálním strojem, ujistěte se, že je VT-x povolen prostřednictvím virtualizačního softwaru.
- Povolte VT-x na pracovní stanici VMWare
- Povolte VT-x ve Virtualboxu
Vytváření obrazu bez souboru Docker
[1] Vytáhněte základní obrázek Dockeru ubuntu: 18.04:
sudo docker pull ubuntu:18.04
Poznámka : Chcete-li ověřit, že byl obrázek úspěšně přidán, zadejte následující příkaz:
sudo docker image ls
[2] Spusťte kontejner (s názvem ubuntukvm) z Image ubuntu: 18:04 s některými privilegovanými parametry:
sudo docker run --privileged -it --name ubuntukvm --device=/dev/kvm --device=/dev/net/tun -v /sys/fs/cgroup:/sys/fs/cgroup:rw --cap-add=NET_ADMIN --cap-add=SYS_ADMIN ubuntu:18.04 /bin/bash
Protože do tohoto kontejneru nainstalujeme hypervisor (QEMU-KVM), musíme jej spustit s určitými parametry takto:
– device = / dev / kvm namapuje zařízení / dev / kvm v hlavním OS uvnitř kontejneru.
– device = / dev / net / tun bude mapovat zařízení / dev / net / tun v hlavním OS uvnitř kontejneru.
-v / sys / fs / cgroup: / sys / fs / cgroup: rw namapuje adresář / sys / fs / cgroup v hlavním operačním systému uvnitř kontejneru a kontejner bude mít v tomto adresáři oprávnění ke čtení a zápisu.
– cap-add = NET_ADMIN přidá do kontejneru možnosti správce sítě.
– cap-add = SYS_ADMIN přidá do kontejneru možnosti správce systému.
Jakmile se příkaz úspěšně spustí, měli byste být uvnitř kontejneru s příkazovým řádkem:
root@<container_id>:/#
[3] Uvnitř kontejneru aktualizujte index apt balíčku:
root@<container_id>:/# apt-get update -y
[4] Uvnitř kontejneru nainstalujte balíček hypervisoru QEMU-KVM a Libvirt:
root@<container_id>:/# apt-get install -y qemu-kvm libvirt-daemon-system libvirt-dev
Nemusíte instalovat klienty libvirt a bridge-utils, protože by již byly nainstalovány spolu s libvirt-daemon-sys.
Libvirt-dev je důležitý balíček zejména pro provozování Vagrant Boxes.
[5] Změnit vlastnictví skupiny / dev / kvm:
root@<container_id>:/# chown root:kvm /dev/kvm
Poznámka : zařízení / dev / kvm musí vlastnit skupina kvm a každý uživatel, který potřebuje spouštět virtuální počítače, musí být součástí skupiny kvm.
[6] Spusťte služby Libvirt:
root@<container_id>:/# service libvirtd startroot@<container_id>:/# service virtlogd start
[7] Nainstalujte balíček Linux Image, který obsahuje všechny potřebné moduly jádra:
root@<container_id>:/# apt-get install -y linux-image-$(uname -r)
Poznámka : toto je důležitý krok. Existují určité moduly (např. Ip_tables a ip6_tables), které jsou potřeba později; a pokud chybí, vygeneruje se chybová zpráva.
[8] Nainstalujte balíček zvlnění (slouží ke stažení aplikace Vagrant):
root@<container_id>:/# apt-get install curl -y
[9] Nainstalujte balíček net-tools (poskytuje nástroj ipconfig):
root@<container_id>:/# apt-get install net-tools -y
[10] Stáhněte a spusťte nejnovější verzi aplikace Vagrant:
root@<container_id>:/# apt-get install jq -yroot@<container_id>:/# vagrant_latest_version=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/vagrant | jq -r -M '.current_version')root@<container_id>:/# echo $vagrant_latest_versionroot@<container_id>:/# curl -O https://releases.hashicorp.com/vagrant/$(echo $vagrant_latest_version)/vagrant_$(echo $vagrant_latest_version)_x86_64.debroot@<container_id>:/# dpkg -i vagrant_$(echo $vagrant_latest_version)_x86_64.deb
Poznámka 1 : Výše uvedené příkazy provádějí následující akce:
– Nainstalujte si nástroj JSON Query parser, jq, který bude použit v dalším příkazu.
– Získejte hodnotu nejnovější verze Vagrant a uložte ji do proměnné prostředí vagrant_latest_version.
– Stáhněte si nejnovější verzi balíčku Vagrant.
– Nainstalujte stažený balíček Vagrant.Poznámka 2 : Je velmi důležité a důležité, abyste si Vagrant stáhli a nainstalovali touto metodou. Ještě ne dostat z repozitáře Ubuntu (nebo jiných úložišť Linux, jako je Red Hat) pomocí příkazu apt-get install pobuda. Důvodem je to, že WinRM knihovna není dodávána s balíčky Vagrant poskytovanými distribucí Linuxu a je dodávána nativně s oficiálním balíčkem. Knihovna WinRM je nutná ke spuštění krabic Windows Vagrant.
[11] Nainstalujte si plugin Vagrant Libvirt:
root@<container_id>:/# vagrant plugin install vagrant-libvirt
[12] Stáhněte a nainstalujte Windows10 Vagrant box:
root@<container_id>:/# mkdir /win10root@<container_id>:/# cd /win10root@<container_id>:/win10# vagrant init peru/windows-10-enterprise-x64-evalroot@<container_id>:/win10# VAGRANT_DEFAULT_PROVIDER=libvirt vagrant up
příkaz init stáhne soubor vagrant Vagrant, který obsahuje pokyny pro sestavení pole Vagrant.
příkaz tulák nahoru postaví krabici. Pamatujte, že tento příkaz nějakou dobu trvá. Konkrétní Vagrant box, který zde stahujeme (peru / windows-10-enterprise-x64-eval), má velikost 5,62 GB.
jakmile výše uvedený příkaz dokončí provádění, zadejte následující příkaz, který se pokusí o přístup do pole přes RDP. I když se to nezdaří (protože v kontejneru není nainstalován žádný klient RDP), získáme IP adresu Vagrant boxu:
root@< container_id >:/win10# vagrant rdp==> default: Detecting RDP info… default: Address: 192.168.121.68:3389 default: Username: vagrant ==> default: Vagrant will now launch your RDP client with the connection parameters ==> default: above. If the connection fails, verify that the information above is ==> default: correct. Additionally, make sure the RDP server is configured and ==> default: running in the guest machine (it is disabled by default on Windows). ==> default: Also, verify that the firewall is open to allow RDP connections. An appropriate RDP client was not found. Vagrant requires either `xfreerdp` or `rdesktop` in order to connect via RDP to the Vagrant environment. Please ensure one of these applications is installed and available on the path and try again.
[13] Nastavení pravidel přesměrování portů iptables:
Toto je důležitý krok, pokud chcete přistupovat k portu RDP na krabici Vagrant z kontejneru. Ve výchozím nastavení aplikace Vagrant konfiguruje pravidla brány firewall tak, aby umožňovala přístup pouze z kontejneru do pole Vagrant a naopak. Stroje mimo kontejner nemají přístup do Vagrant boxu. Chtěli bychom nastavit pravidla takovým způsobem, abychom umožnili našemu hlavnímu OS (Ubuntu) přístup k Vagrant boxu na RDP. Následující diagram to logicky ilustruje:
Add the following rules to NAT/Port Forward connections from the main OS to the container on port 3389 to be forwarded to the Vagrant Box on port 3389:
root@<container_id>:/# iptables -A FORWARD -i eth0 -o virbr1 -p tcp --syn --dport 3389 -m conntrack --ctstate NEW -j ACCEPTroot@<container_id>:/# iptables -A FORWARD -i eth0 -o virbr1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTroot@<container_id>:/# iptables -A FORWARD -i virbr1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTroot@<container_id>:/# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3389 -j DNAT --to-destination 192.168.121.68root@<container_id>:/# iptables -t nat -A POSTROUTING -o virbr1 -p tcp --dport 3389 -d 192.168.121.68 -j SNAT --to-source 192.168.121.1
Poté bychom měli odstranit pravidla, která odmítají veškerý provoz do / z rozhraní virb1; tato pravidla mají přednost před našimi nově vloženými pravidly:
root@<container_id>:/# iptables -D FORWARD -o virbr1 -j REJECT --reject-with icmp-port-unreachableroot@<container_id>:/# iptables -D FORWARD -i virbr1 -j REJECT --reject-with icmp-port-unreachableroot@<container_id>:/# iptables -D FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachableroot@<container_id>:/# iptables -D FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
pokud zkazíte iptables, nebo pokud bude komunikace později problematická, můžete vyčistit všechny tabulky a poté přidat pravidla (uvedená výše) na čistý štít. Chcete-li vymazat iptables, vydejte následující:
root@<container_id>:/# sudo iptables-save > $HOME/firewall.txt
root@<container_id>:/# sudo iptables -X
root@<container_id>:/# sudo iptables -t nat -F
root@<container_id>:/# sudo iptables -t nat -X
root@<container_id>:/# sudo iptables -t mangle -F
root@<container_id>:/# sudo iptables -t mangle -X
root@<container_id>:/# sudo iptables -P INPUT ACCEPT
root@<container_id>:/# sudo iptables -P FORWARD ACCEPT
root@<container_id>:/# sudo iptables -P OUTPUT ACCEPT
[14] Potvrdit všechny změny a vytvořit nový obrázek:
Až do tohoto bodu máme plně spuštěný kontejner s požadovaným virtuálním počítačem Windows. Tento kontejner však nemůžeme přenést ani uložit. Kromě toho nemůžeme vytvořit více kopií tohoto kontejneru, aniž bychom prošli všemi kroky, které jsme doposud provedli. Z tohoto důvodu musíme potvrdit změny nového obrazu Dockeru. Obrázek lze přenést nebo uložit. Lze vytvořit – vytvořit instanci – více kontejnerů téměř okamžitě.
Abychom provedli změny nového obrázku, musíme nejprve opustit kontejner:
root@<container_id>:/win10# exit$ sudo docker ps -a
Poznamenejte si ID kontejneru; a poté zadejte následující příkaz:
$ sudo docker commit <container_id> ubuntukvm
Poznámka 1: Název „ubuntukvm“ můžete nahradit jakýmkoli jménem, které se vám líbí. Toto bude název nového obrázku.
Vytváření obrazu pomocí souboru Docker
Namísto ručního vytváření Image – jak je znázorněno v předchozí části, můžeme celý proces automatizovat pomocí souboru Dockerfile.
[1] Příprava souboru Docker:
V novém adresáři vytvořte Dockerfile (s názvem Dockerfile ) a napište do něj následující příkazy. Většinou se jedná o stejné příkazy, které jsme provedli jednotlivě v předchozí části:
[2] Připravte si Startup Shell Script (startup.sh):
Tento soubor bude zkopírován do obrázku a bude spuštěn automaticky pokaždé, když vytvoříte instanci kontejneru z tohoto obrázku. Skript přiřadí určitá oprávnění a spustí potřebné služby. Kromě toho vytvoří pravidla iptables, která budou přenášet porty RDP.
[3] Vytvořte kontejner ze souboru Docker:
sudo chmod +x startup.shsudo docker build -t ubuntukvm:latest -f Dockerfile .
[4] Vytvořte instanci kontejneru a spusťte jej:
sudo docker run --privileged -it --name kvmcontainer1 --device=/dev/kvm --device=/dev/net/tun -v /sys/fs/cgroup:/sys/fs/cgroup:rw --cap-add=NET_ADMIN --cap-add=SYS_ADMIN ubuntukvm bash
Testování přístupu RDP
Nyní bychom měli mít přístup ke službě RDP v poli Windows Vagrant připojením k IP adrese kontejneru Docker. K otestování, zda je port 3389 / tcp (RDP) dosažitelný z hlavního OS, použijeme jednoduchý příkaz Nmap.
Nejprve, pokud jste uvnitř kontejneru Docker, stisknutím kláves Ctrl + p + q umístěte kontejner na pozadí při běhu; toto by vás mělo vrátit na hlavní výzvu terminálu OS:
root@<container_id>:/win10# <Ctrl+p+q>$ sudo nmap -Pn -p 3389 172.17.0.2
Dále musíme nainstalovat klienta RDP pro Linux. Populární je RDesktop:
sudo apt-get install rdesktop
Nakonec můžeme přistupovat k virtuálnímu počítači s Windows:
sudo rdesktop 172.17.0.2
Pole Windows Vagrant, které jsme nainstalovali, má dva integrované účty:
- Uživatelské jméno: tulák Heslo: tulák
- Uživatelské jméno: správce Heslo : tulák
Závěr
Doufám, že tento příspěvek byl komplexním průvodcem pro kontejnerizaci virtuálního stroje. Provozování virtuálního počítače v kontejneru má různé výhody; jeden z nich provozuje více kontejnerů současně. Požadovaný obrázek můžete automaticky vytvořit pomocí souboru Dockerfile nebo ho můžete vytvořit ručně spuštěním každého příkazu samostatně. V tomto příspěvku jsme se zabývali oběma způsoby.
Source: https://medium.com/axon-technologies/installing-a-windows-virtual-machine-in-a-linux-docker-container-c78e4c3f9ba1