- Praktický úvod do Docker a kontejnerů (1) – od instalace po první kontejnery
- Praktický úvod do Docker a kontejnerů (2) – propojování
- Praktický úvod do Docker a kontejnerů (3) – víc najednou aneb něco užitečného s Docker Compose
- Praktický úvod do Docker a kontejnerů (4) – jak z nich získat maximum
- Praktický úvod do Docker a kontejnerů (5) – Docker Machine
- Praktický úvod do Docker a kontejnerů (6) – cluster hostitelů s Docker Swarm
- Praktický úvod do Docker a kontejnerů (7) – scheduler v Docker Swarm
- Praktický úvod do Docker a kontejnerů (8) – váš vlastní registr obrazů
- Praktický úvod do Docker a kontejnerů (9) – multi-host networking
- Praktický úvod do Docker a kontejnerů (10) – Windows kontejnery s Docker API
- Praktický úvod do Docker a kontejnerů (11) – Windows kontejnery s PowerShell
- Praktický úvod do Docker a kontejnerů (12) – Windows Hyper-V kontejner
- Praktický úvod do Docker a kontejnerů (13) – Swarm mode, service, balancing, scaling (v1.12)
Víte, že i Microsoft už má kontejnery? Respektive bude brzy mít s Windows Server 2016 a dnes se na ně podíváme v Technical Preview.
Rozjedeme Windows Server 2016
Pro vyzkoušení Windows kontejnerů se mi nechtělo stahovat velké iso s Windows Server 2016 TP4 a pak ho instalovat, tak jsem využil své MSDN subscription na Azure. Nejprve vytvořte nový virtuální počítač a vyhledejte si správnou šablonu s preview Microsoft kontejnerů:
V dalším kroku nastavte přístupová pravidla tak, aby bylo možné se k VM připojit nejen přes RDP, ale také na portu 80 (tam si vyzkoušíme spustit něco v kontejneru):
Windows kontejnery v Docker stylu
Kontejnery ve Windows jsou samozřejmě jiné, než Docker v Linuxu – mají zcela jiné jádro, jinou architekturu a jiný vrstvený file system. Microsoft ovšem, zřejmě z důvodu pozdního příchodu ke kontejnerovým technologiím, zvolil plnou kompatibilitu s Docker API a CLI. V zásadě ovládání a API je vzato přímo ze zdrojového kódu Docker, který je napsán v Go, takže jeho kompilace pro Windows je relativně snadná. Přestože je tedy technická implementace odlišná, při ovládání se budete cítit jako doma a díky kompatibilitě API můžete používat své stávající skripty a nástroje.
Jaké image jsou k dispozici přímo v základním OS?
C:\>docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE windowsservercore 10.0.10586.0 6801d964fda5 4 months ago 0 B windowsservercore latest 6801d964fda5 4 months ago 0 B
Spusťme kontejner s Windows Server Core v interaktivním režimu a skočíme rovnou do PowerShellu:
C:\>docker run -it --name prvnikont windowsservercore powershell
Nacházíme se teď uvnitř kontejneru a můžeme nainstalovat IIS web server.
PS C:\Windows\system32> Install-WindowsFeature web-server Success Restart Needed Exit Code Feature Result ------- -------------- --------- -------------- True No Success {Common HTTP Features, Default Document, D...
To bychom měli. Vytvořme si teď nějakou webovou stránku:
PS C:\Windows\system32> cd C:\inetpub\wwwroot\ PS C:\inetpub\wwwroot> echo "Muj super server" > index.html PS C:\inetpub\wwwroot> exit
Vyskočili jsme zpět do hostitele. Prohlédněme si seznam kontejnerů – ten náš bude v ukončeném stavu, protože z jeho PowerShell procesu už jsme vyskočili.
C:\>docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 110805dbfa95 windowsservercore "powershell" 6 minutes ago Exited (0) 15 seconds ago prvnikont
Výborně – překonvertujme stav našeho kontejneru do nové image.
C:\>docker commit prvnikont mujwebimage aab0580284b18d9aa0c4e3dd3af7495ba187b92f198465d539f5eabe653d4366
Prohlédněte si kontejnerové obrazy.
C:\>docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE mujwebimage latest aab0580284b1 About a minute ago 172.1 MB windowsservercore 10.0.10586.0 6801d964fda5 4 months ago 0 B windowsservercore latest 6801d964fda5 4 months ago 0 B
Jsme ve Windows hostiteli a tam nám ve výchozím stavu běží Windows firewall. Aby nám hostitel neblokoval webové přístupy, musíme založit příslušné pravidlo ve firewallu hostitele.
powershell.exe "if(!(Get-NetFirewallRule | where {$_.Name -eq 'TCP80'})) { New-NetFirewallRule -Name 'TCP80' -DisplayName 'HTTP on TCP/80' -Protocol tcp -LocalPort 80 -Action Allow -Enabled True }" Name : TCP80 DisplayName : HTTP on TCP/80 Description : DisplayGroup : Group : Enabled : True Profile : Any Platform : {} Direction : Inbound Action : Allow EdgeTraversalPolicy : Block LooseSourceMapping : False LocalOnlyMapping : False Owner : PrimaryStatus : OK Status : The rule was parsed successfully from the store. (65536) EnforcementStatus : NotApplicable PolicyStoreSource : PersistentStore PolicyStoreSourceType : Local
Teď už nám stačí vytvořit z této image kontejner – spustíme ho v odpojeném stavu a publikujeme jeho port 80.
c:\>docker run -d -p 80:80 --name web mujwebimage
Vyzkoušejte si přistoupit na veřejnou IP vašeho hostitele v Azure.
Co dalšího Microsoft chystá?
V příštích dílech se podíváme na dvě zajímavosti. Jednou bude Hyper-V oddělení kontejnerů – Windows jednoduše na příkaz k vytvoření kontejneru založí nejprve novou VM s vnořeným hostitelem a kontejner uvnitř této VM (tedy řeší silné tradiční oddělení, ale přes kontejnerové API). Tou druhou je ovládání kontejnerů z PowerShellu – příznivci Dockeru jistě zvolí jeho CLI, ale nadšenci do Microsoft technologií pravděpodobně PowerShell uvítají. No moc v něm neumím, tak alepoň zjistím jak na to 🙂