Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Windows Server Containers and Docker

Windows Server Containers and Docker

At DevOpsCon 2016 in Munich, I do a session about Windows Server Containers and Docker. Here are my slides

Rainer Stropek

December 07, 2016
Tweet

More Decks by Rainer Stropek

Other Decks in Technology

Transcript

  1. Your Host Rainer Stropek Developer, Entrepreneur MVP Microsoft Azure MVP

    Development Technologies MS Regional Director Senior Consultant IT-Visions Contact software architects gmbh [email protected] Twitter: @rstropek
  2. Agenda With Windows Server 2016, Windows learns to speak Docker.

    In this session, Rainer Stropek, long-time Azure MVP and MS Regional Director, introduces Windows Server Containers. You see how to manage them with PowerShell and the Docker CLI. Additionally, Rainer will demonstrate Dockerfiles with containers on Windows. Note that Rainer assumes for this session that you already have basic knowledge about PowerShell and the Docker CLI.
  3. Microsoft  Containers Docker client on Windows In Windows shell

    In Bash shell (Bash on Ubuntu on Windows)
  4. Demo Docker Client Docker Client in Windows Shell Ubuntu subsystem

    for Windows Not Docker, not Hyper-V Pico processes Bash on Ubuntu on Windows Advantage: Completion (e.g. image name in docker run)
  5. Microsoft  Containers Docker client on Windows In Windows shell

    In Bash shell (Bash on Ubuntu on Windows) Linux containers on Windows Docker for Windows Windows containers on Windows Windows Server containers Hyper-V containers Docker support on Windows Server 2016 and Windows 10
  6. Microsoft  Containers Ready-made containers For Linux and Windows See

    Docker Hub (e.g. Azure CLI, .NET Core, PowerShell, IIS) Containers on Azure Templates (e.g. Docker on Unbuntu) and drivers from Microsoft (details later) Docker Machine with Azure driver Run clusters (DC/OS, Docker Swarm, Kubernetes) with Azure Container Service Visual Studio Support Visual Studio Tools for Docker VSTS Docker Extension
  7. Strengths and Limits Windows Server vs. Hyper-V Containers Managed almost

    identically (Docker and PowerShell) Difference: Isolation level More details in MSDN Source: Mark Fussel (Microsoft), Azure Service Fabric - Build always-on, hyper-scalable, microservice-based cloud applications Linux Windows Process Linux Container Virtual Machines Process Windows Server Container Hyper-V VMs Hyper-V Container Quotas, Limits Added Isolation Kernel Kernel Faster, more efficient More isolated, more secure
  8. Windows on Windows OS Support Windows Server 2016 Windows 10

    (Hyper-V Container) Windows Server Container Hyper-V Container Additional isolation layer Runs inside of Windows Nano Server VM docker run -it --rm --isolation=hyperv microsoft/nanoserver cmd
  9. Demo Windows Container Docker on Windows Server 2016 Full Server

    Nano Server Connect Docker client Docker client on Host Remote Docker (Linux and Windows) client Container scenarios Interactive container Dockerfiles on Windows Volume mapping Ready-made container (.NET)
  10. Demo # Ping Docker host on Windows Server docker -H

    tcp://1.2.3.4:2375 info set DOCKER_HOST=tcp://1.2.3.4:2375 docker info docker ps -a docker images # Run ’dir’ inside a short-lived Nano Server container docker run -it --rm microsoft/nanoserver cmd /C dir # Run existing IIS image (source: Microsoft) docker run -d -p 80:80 microsoft/iis cmd ping localhost -t # Build Dockerfile, install IIS (details about IIS on Nano see # https://technet.microsoft.com/en-us/library/mt627783.aspx) docker build -t myiis . docker images docker run -it --rm myiis cd \install dism /online /apply-unattend:.\unattend.xml net start w3svc # On Docker host (e.g. Enter-PSSession) echo Hello > c:\temp\greeting.txt Docker run --rm -v c:\temp:c:\somedir microsoft/nanoserver cmd /C type \somedir\greeting.txt Prerequisites Windows Server with Container support See also sample Dockerfile https://github.com/rstropek/DockerVS2015Intro/blob/master/do ckerDemos/07-win-container-nano-server/Dockerfile
  11. Demo FROM microsoft/dotnet:sdk-nanoserver RUN mkdir \app WORKDIR \app RUN dotnet

    new -t web & dotnet restore CMD ["dotnet", "run"] .NET Web Server in Dockerfile
  12. Windows OS for the Cloud Optimized for the cloud (private/public)

    Smaller footprint, faster startup, less update, etc. How can it be smaller and faster? Headless (=no GUI) Limited functionality (e.g. only 64bit, no AD domain controller, no group policy, …; details) Current Branch for Business (CBB) 2-3 feature update/year for Nano Server Not more than two Nano Server CBB releases behind for support (details)
  13. Installation # Location where the Windows Server 2016 ISO is

    mounted. # We will copy the Nano Server Image Generator from there. $winServerInstallRoot = "d:\" $temp = "c:\temp" $nanoServerImageGeneratorFolder = "$temp\NanoServerImageGenerator" $targetPath = $temp + "\demo\NanoServerVM.vhd" $computerName = "mynanoserver" $secure_string_pwd = convertto-securestring "pass" -asplaintext -force [Environment]::SetEnvironmentVariable("TEMP", "c:\temp\tempFolder",` "Process") # Copy Nano Server Image Generator to local disk if (!(Test-Path -Path "$nanoServerImageGeneratorFolder")) { Copy-Item "$winServerInstallRoot\NanoServer\NanoServerImageGenerator" ` "$nanoServerImageGeneratorFolder" -Recurse -Force } # Import Nano Generator module cd $nanoServerImageGeneratorFolder Import-Module .\NanoServerImageGenerator -Verbose # Create Nano Server ISO VHD New-NanoServerImage -Edition Standard -DeploymentType Guest ` -MediaPath $winServerInstallRoot ` -BasePath .\Base -TargetPath $targetPath -ComputerName $computerName ` -AdministratorPassword $secure_string_pwd ` -Package Microsoft-NanoServer-Guest-Package -MaxSize 100GB ` -EnableRemoteManagementPort -Verbose Create VHD https://github.com/rstropek/DockerVS2015Intro/blob/master/do ckerDemos/07-win-container-nano-server/setup-simple-nano- server.ps1
  14. Installation Import-Module Hyper-V net start WinRM $computerName = "Simple Nano

    Server" $vm = Get-VM -Name $computerName $vmIP = (Get-VMNetworkAdapter $vm)[0].IPAddresses[0] Set-Item WSMan:\localhost\Client\TrustedHosts $vmIP -Force $cred = Get-Credential $session = New-PSSession -ComputerName $vmIP -Credential $cred Enter-PSSession -Session $session Connect and create session https://github.com/rstropek/DockerVS2015Intro/blob/master/do ckerDemos/07-win-container-nano-server/connect-nano- server.ps1
  15. Deployment Virtual machine from ISO Physical machine Dual boot VHD/VHDX

    PxE-boot and install Nano Server from WDS (details) Booting into WinPE and deploying Nano Server using a .wim file (details) Tip: Consider Nano Server Image Builder GUI
  16. PowerShell PowerShell Core Edition Limited functionality Details in TechNet Guidelines

    for porting to PowerShell Core available Details in TechNet
  17. Summary Microsoft  Linux and containers Linux on Windows Windows

    on Windows All kinds of containers on Azure For dev/test and prod Containers on Windows 10 for devs Windows Server 2016 or Azure Container Service for prod Nano Server = Windows OS for the cloud Higher hosting density  lower costs Less updates and reboots  higher availability
  18. Saves the day. Workshop Q&A Rainer Stropek software architects gmbh

    http://www.timecockpit.com [email protected] @rstropek Thank you for attending! Web Mail Twitter