deploying windows containers on windows server 2016
TRANSCRIPT
Deploying Docker Containers on Windows Server 2016
OcelotUproar.com / Katacoda.com
@Ben_Hall / Blog.BenHall.me.uk
Tech Support > Tester > Developer > Founder
Software Development Studio
WH
O AM
I?
Agenda
• Introduction to Docker• Windows Containers• Deploying IIS / ASP.NET with Containers• Running containers in Production• Future
Own Process SpaceOwn Network InterfaceOwn Root Directories
Sandboxed
Like a lightweight VM. But it’s not a VM.
> docker run –p 6379:6379 redis _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.0.3 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 1 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-'
1:M 05 Nov 10:42:24.402 # Server started, Redis version 3.0.31:M 05 Nov 10:42:24.402 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.1:M 05 Nov 10:42:24.402 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.1:M 05 Nov 10:42:24.403 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.1:M 05 Nov 10:42:24.403 * The server is now ready to accept connections on port 6379
Windows Hyper-V Containers
Windows Kernel
Windows Server 2016
SQL Server MSMQ IIS /
ASP.NET
Windows Kernel
Windows Server 2016
Hyper-V
Docker Engine
Windows Server Core
• Nearly Win32 Compatiable• Same behaviour of Windows• Install all of the same tooling
Windows Nano
• Stripped down• Smallest footprint• 1/20th the size of Windows Server Core• Only essential components– Hyper-V, Clustering, Networking, Storage, .Net,
Core CLR
Windows Server Core => Ubuntu Linux
Windows Nano => Alpine Linux
Windows Server Core => Legacy Apps?
Windows Nano => Modern Apps?
Work In Progress
• https://msdn.microsoft.com/en-us/virtualization/windowscontainers/about/work_in_progress
• eg: Windows Containers cannot be managed/interacted with through a RDP session in TP4.
C:\> Install-WindowsFeature containers
C:\> wget https://aka.ms/tp4/docker -OutFile $env:SystemRoot\system32\docker.exe
C:\> start-process nssm install
PS C:\> docker imagesREPOSITORY TAG IMAGE ID CREATEDwindowsservercore 10.0.10586.0 6801d964fda5 2 weeks ago windowsservercore latest 6801d964fda5 2 weeks ago nanoserver 10.0.10586.0 8572198a60f1 2 weeks ago nanoserver latest 8572198a60f1 2 weeks ago
PS C:\> docker run -it \ windowsservercore cmd C:\> dir Users Program Files Windows etc
Thank you to https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/manage_docker
PS C:\> docker run -it \ --name iisbase \ windowsservercore cmd [iisbase] C:\>
Thank you to https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/manage_docker
PS C:\> docker run -it \ --name iisbase \ windowsservercore cmd C:\> powershell.exe Install-WindowsFeature web-server C:\> exit
PS C:\> docker commit iisbase windowsservercoreiis 4193c9f34e320c4e2c52ec52550df225b2243927ed21f014fbfff3f29474b090
C:\docker-iis> type Dockerfile
FROM windowsservercore:10.0.10586RUN dism /online \ /enable-feature \ /all \ /featurename:iis-webserver \ /NoRestart
C:\>docker build –t iis:10 c:\docker-iis
C:\> docker imagesREPOSITORY TAG IMAGE ID CREATEDiis 10 as4w9c928829 9 seconds ago windowsservercore 10.0.10586.0 6801d964fda5 2 weeks ago windowsservercore latest 6801d964fda5 2 weeks ago nanoserver 10.0.10586.0 8572198a60f1 2 weeks ago nanoserver latest 8572198a60f1 2 weeks ago
C:\SourceCode\App> type Dockerfile
RUN echo "Hello World - Dockerfile" > c:\inetpub\wwwroot\index.html
C:\SourceCode> docker build –t app .
PS C:\> docker imagesREPOSITORY TAG IMAGE ID CREATEDapp latest k23jjin423d 1 minutes ago iis 10 as4w9c928829 9 minutes ago windowsservercore 10.0.10586.0 6801d964fda5 2 weeks ago windowsservercore latest 6801d964fda5 2 weeks ago nanoserver 10.0.10586.0 8572198a60f1 2 weeks ago nanoserver latest 8572198a60f1 2 weeks ago
Building Windows Nano image?
• Wait until TP5
> docker run --name iisnanobase -it -v c:\share:c:\iisinstall --isolation=hyperv nanoserver cmd
> docker commit iisnanobase nanoserveriis
Powershell API
PS C:\> Get-ContainerImageName Publisher Version IsOSImage---- --------- ------- ---------NanoServer CN=Microsoft 10.0.10584.1000 TrueWindowsServerCore CN=Microsoft 10.0.10584.1000 True
PS C:\> New-Container -ContainerImageName WindowsServerCore -Name demo -ContainerComputerName demo
Name State Uptime ParentImageName---- ----- ------ ---------------demo Off 00:00:00 WindowsServerCore
Persisting Data> docker run –v <host-dir>:<container-dir> image
-v /opt/docker/elasticsearch:/data
-v /opt/docker/mysql:/var/lib/mysql
-v /docker/scrapbook/uploads:/app/public/uploads
-v $(PWD):/host
-v /var/log/syslog:/var/log/syslog
Users and Domains
• Local user accounts may be created and used for running Windows services and applications in containers
• Containers cannot join Active Directory domains, and cannot run services or applications as domain users, service accounts, or machine accounts.
• "Microsoft are actively looking at solutions to support these types of scenarios."
Docker Images will behave as expected
• Linux Manifest• Windows Manifest• ARM Manifest• Future IoT thing Manifest
• docker pull redis– Image pulled depends on Docker Engine
Linux / Windows
• Linux has cgroups and namespaces– cgroups – How much access/resources do I have?– namespaces – What can I see?
• Windows wanted this in the Kernel• Prototype was called Drawbridge• Server 2016 Kernel brings in the new
cgroups/namespaces• Microsoft reached out to Docker to partner
Host Fingerprinting
• Constraints based deployment
• Container is based on Nano Server, within cluster, deploy to server capable of running Nano Server (ie. Windows Server 2016)
Resources
• https://channel9.msdn.com/Blogs/containers
• https://aka.ms/containers
Summary
• Docker and Containers have changed how Linux processes are managed
• Real container support coming to Windows Kernel
• Automation will be easier
• Better ROI and cluster management