Nano Server CTP 5 In Azure

In this post I’m having a look at running Nano Server CTP 5 in Azure. Keep in mind this is CTP 5 so it is very far from done.

Nano Vs Core
Turns out there is a huge difference between Nano and Core 2016. Nano doesn’t have the full .NET framework, it is running .NET Core and you can’t install the full .NET framework even if you wanted to and support for the full .NET framework was not planned at the time of writing. Since you don’t have the full .NET framework you also don’t have full PoweShell, you get PowerShell Core.

Nano Server CTP 5 In Azure

There is no GUI, not even a command prompt, you can’t RDP into it, you don’t have a basic console like Core but there is a recovery console to help you establish network connectivity. You manage it using remote tools like PowerShell or Server Manager. In CTP5 DSC Push is working but you can’t use a Pull server. Here is a comprehensive list of PowerShell features and commands that are not working in the CTP 5 preview on Nano server.

Creating The Image And Installing Features
Nano server is basically empty if you use the base image, you have to inject features you need to turn it into anything useful. There is detailed documentation here. Basically you install a PowerShell module, copy the base image from Windows 2016 install media and execute New-NanoServerImage to create the Nano VHD. Most features are switched on or off by passing the correct switch parameter. It is mostly aimed at running in virtual environments but you can install it on a physical machine. At this point you need Windows already installed on the physical machine and you have to manually configure it to boot from the Nano VHD. It is possible to install components while the server is running but the current experience is very cumbersome using dism.exe. Apparently in the release version it will be streamlined and you’ll be able to use PowerShell commands to manage the features.

Nano On Azure
There are a few extra steps when you create your Nano server in Azure, most of it is covered here. The long and the short of it is:

  • Add a rule in your Network Security Group to allow WinRM over HTTP on port 5895.
  • At the remote machine public IP to the trusted hosts on your local machine
     Set-Item WSMan:\localhost\Client\TrustedHosts "AzureNanoPIP"
  • Connect to is using Powershell:
    Enter-PSSession -ConnectionUri "http://AzureNanoPIP:5985/WSMAN" -Credential (Get-Credential)

Side note: I used an A0 instance for testing and the Nano instance was using around 260MB Ram and 1.8 GB harddrive space.

Francois Delport