Tag: Hyper-V Container

HCSDiag.exe - Hyper-V Host Compute Service Diagnostics Tool

HCSDiag.exe – Hyper-V Host Compute Service Diagnostics Tool

As you know, Hyper-V is not just a server virtualization software anymore. Today, you can find Hyper-V technology across different operating systems, products, and services, like Windows Defender Application Guard, Windows Sandbox, Hyper-V Containers, or many more. Thanks to Ben Armstrong from the Hyper-V team, I found out that there is a tool in Windows to troubleshoot these Hyper-V containers called hcsdiag.exe or Hyper-V Host Compute Service Diagnostics Tool. The Hyper-V Host Compute Service Diagnostics Tool (HCSDiag.exe) is available in Windows 10 and Windows Server 2019 if you have the Hyper-V roles or virtualization features enabled, and can be helpful to troubleshoot Hyper-V containers, virtual machines (VMs), Windows Sandbox, Windows Defender Application Guard, Windows Subsystem for Linux 2 and more.

HCSDiag.exe - Hyper-V Host Compute Service Diagnostics Tool

HCSDiag.exe – Hyper-V Host Compute Service Diagnostics Tool

Let’s have a look at the HCSDiag.exe, which you can find in C:\Windows\System32. It provides you with a couple of different commands and options. However, keep in mind that not all features work with every type of container. Some features are limited to scenarios where the VM is being used under the same user context as the host, where it is all about protecting the host from the guest and not the guest from the host like in the server version of Hyper-V.

To install Hyper-V, check out the following posts:

HCSDiag.exe

hcsdiag <command> [options…]

  • list
    Lists running containers and VMs.
  • exec [-uvm] <id> <command line>
    Executes a process inside the container.
  • console [-uvm] <id> [command line]
    Launches an interactive console inside the container.
  • read [-uvm] <id> <container file> [host file]
    Reads a file from the container and outputs it to standard output or a file.
  • write [-uvm] <id> [host file] <container file>
    Writes from standard input or a host file to a file in the container.
  • kill <id>
    Terminates a running container.
  • share [-uvm] [-readonly] [-asuser] [-port <portnumber>] <id> <host folder> <container folder>
    Shares a host folder into the container.
  • vhd [-uvm] <id> <host vhdx file> <container folder>
    Shares a virtual hard disk file into the container.
  • crash <id>
    Forces a crash of the virtual machine hosting the container (only works for containers hosted in a virtual machine).

I will give you some examples of how you can use hcsdiag.exe to interact with some of the Hyper-V containers. Now again, this focuses mostly on technologies like Windows Sandbox, Docker Hyper-V Containers, WSL 2, and similar features.

You can find more documentation on Hyper-V on Windows Server or Hyper-V on Windows 10 on Microsoft Docs.

List all containers and Hyper-V VMs

With the hcsdiag list command, you can create a list of containers and Hyper-V virtual machines running on the host. Including Windows Sandbox, Windows Subsystem for Linux 2, and Application Guard.

hcsdiag.exe list

hcsdiag.exe list

Connect Console to Hyper-V containers and Windows Sandbox

You can also directly connect to the console of containers or the Windows Sandbox. Remember that it only works for Hyper-V containers where the guest is not protected from the host. Not for containers like Hyper-V VMs, where the guest is also protected from the host. If you need to remote into want console access or run commands against a Hyper-V VM from the host, check out PowerShell Direct for Windows VMs and hvc.exe for Linux VMs.

hcsdiag console connect

hcsdiag console connect

Here is an example where I am connected to a Windows Sandbox container using hcsdiag.exe.

hcsdiag Windows Sandbox

hcsdiag Windows Sandbox

But that also works with Dockers container (Hyper-V containers) running Windows and Linux.

hcsdiag Linux Container

hcsdiag Linux Container

HCSDiag console provides you with an interactive connection to interact with the container.

Additional HCSDiag.exe features and commands

The HCSDiag.exe also provides you with a couple of additional commands you can use. For example, the read command to read a file from the container and output it to the host or as a file to the host.

hcsdiag read

hcsdiag read

You can use the “share” command to share a host folder into the container or use “vhd” to mount a virtual disk file (VHD) file to a container. The hcsdiag kill command terminates a running container.

Conclusion

HCSDiag.exe – Hyper-V Host Compute Service Diagnostics Tool is excellent if you need to troubleshoot these Hyper-V containers, virtual machines (VMs), Windows Sandbox, Windows Defender Application Guard, Windows Subsystem for Linux 2 and more. If you have any questions, feel free to leave a comment.



Video Microsoft Ignite Live 2019 - Hyper-V Containers

Video Microsoft Ignite Live – Hyper-V and Containers

This is the last set of recordings of Microsoft Ignite Live stage recordings I am going to share. Today I am going to share two videos, in one I had the chance to speak with Craig Wilhite and Vinicius Apolinario about why you should care about containers and how to get started. In the second one, I spoke with Ben Armstrong from the Hyper-V team about some of the great fun bits the team is doing.

Video: Windows Container

A lot has been said about containers recently, but why should you care? Containers are not an “all or nothing” situation and understanding when they can be beneficial is key to a successful implementation. Come and learn from the containers team how you can get started with this technology and some tips and tricks that will help you with your containerization journey!

Video: Hyper-V

Ben Armstrong, Principal Program Manager on the Hyper-V team talks about some of the challenging, interesting, quirky, and just fun changes that have happened in virtualization over the last year.

I hope this gives you a quick look at some of the fun parts the Hyper-V team is doing with containers and Hyper-V. You can check out the following links to get more information:

Microsoft Ignite 2019 was a lot of fun, and you can also watch my session about Hybrid Cloud Management at Microsoft Ignite. If you have any questions, please let me know in the comments.



Windows Server Banner

Microsoft Windows Server Summit – Online Summit

On Tuesday, June 26, 2018 Microsoft will held the Windows Server Summit Online, a virtual experience to learn tips and tricks for modernizing your infrastructure and applications—regardless of whether you’re running it on-premises or in the cloud. And you can bet you will also get some new information on Windows Server 2019.

Learn how to build the future with Windows Server

Microsoft will talk about the roadmap for Windows Server, and let you discover new skills and best practices, and get your questions answered in conversations with the Microsoft experts behind our products.

This online summit will focus on 4 key areas of Windows Server:

  • Hybrid – Learn how Windows Server helps you integrate Azure services into your on-premises environment and how to better run Windows Server in Azure.
  • Security – Better security starts with the Operating System. Learn how Windows Server helps you elevate your company’s security posture.
  • Hyper-converged infrastructure (HCI) – Windows Server 2016 introduced new HCI capabilities that are game-changers. Now, check what’s new around HCI for Windows Server 2019.
  • Application platform – Containers are changing the way developers and operations teams run applications. Learn how Windows Server helps you modernize yours.

So if you want to know more, join the Microsoft online event!

 



Docker Windows Server Container Images

Docker Container Images for Windows Server 1709 and new tagging

Last week Microsoft announced new Windows Server 1709 and the new Windows Server 1709 container images. The new container images in Windows Server version 1709 are highly optimized, especially in size. So for example the new Nano Server Container Image in 1709 is 5x smaller than the Nano Server Container Image in Windows Server 2016.

Microsoft also made some changes to tagging which is interesting.

If you want to use the latest images of the container images based on the Windows Server 2016 (which is in the Long-Term Servicing Channel, LTSC) you just run:

 
"microsoft/nanoserver"
or
"microsoft/windowsservercore"

This will give you the latest images of the Windows Server and Nano server container images. If you want to run a specific patch level of the Windows Server 2016 (LTSC)m images, you can run the following:

 
"microsoft/nanoserver:10.0.14393.1770"
or
"microsoft/windowsservercore:10.0.14393.1770"

Docker Windows Server Container Images Size

If you want to use the new Windows Server 1709 container images from the Semi-Annual Channel you can run the following

 
"microsoft/nanoserver:1709"
or
"microsoft/windowsservercore:1709"

and again you cans also add a specific base OS container image by using a KB number:

 
"microsoft/nanoserver:1709_KB4043961"
or
"microsoft/windowsservercore:1709_KB4043961"

If you already tried out the new container images during the development using the insider images, they still existing:

 
"microsoft/nanoserver-insider"
or
"microsoft/windowsservercore-insider"

However, I am not sure what the plan for the insider images is going forward.



Docker for Windows Update Linux Containers

How to run Docker Linux Container on Windows 10 Fall Creator Update

I just blogged about how to run a Docker Linux Container natively on the new Windows Server version 1709. Docker today released a new update for Docker on Windows which also enables this scenario a little bit easier on your Windows 10 machine. It will ask you if you want to use the new feature to run Linux Containers natively on a Hyper-V Container running on Windows 10 (without the Moby VM).

As you can see the only thing right now you have to turn the feature on and off, since in this technical preview it is not yet possible to run Linux and Windows containers in parallel. But I guess soon that will be the case.

What you need is:

  • Windows 10 Fall Creators Update (Build 16299, Version 1709, RS3)
  • Docker for Windows 17.10.0-ce-win36 (13788) or higher

Enable Linux Containers on Windows

You can change the settings in the Docker Settings:

Docker for Windows Settings Enable Linux contianers on Windows

With hat setting on you can now run Linux Containers such as ubuntu on Windows directly, without having a Linux Virutal Machine running in the background to host the Linux containers.

Docker Run Ubuntu on Windows 10 Verions

Now you can also do some other fancy things like run the Azure CLI in a Linux Container on Windows 10.

Docker Azure CLI on Linux on Windows 10 Container

Simple and effective, and it will be even more powerful when you can run Linux and Windows Container in parallel on Windows Sever and on Windows 10.



How to run Docker Linux Container on Windows Server 1709

As mentioned Microsoft released the final version of Windows Server 1709 in the last week. Windows Server 1709 brings a couple of new improvements, especially in the container space. Microsoft and Docker are working on bringing Linux Container support to Windows Server, so you can now run Windows and Linux Container at the same time on a Windows Server Container Host running Windows Server 1709 or Windows 10 with the Fall Creators Update (1709).

In this post I want to show you how you setup up a Container Host to run Windows and Linux Containers at the same time using Docker.

Create Container Host Virtual Machine

Enable Nested Virtualization

If you run Docker on a physical server you can skip this step. If you want to run Docker Containers using Linux inside a Virtual Machine running on Hyper-V you should enable Nested Virtualization for the Container Host Virtual Machine. You can do this by running the following command:

 
Get-VM *WinContainerHost* | Set-VMProcessor -ExposeVirtualizationExtensions $true

if you want to do this on a Hyper-V Server in Azure, check out this post: How to setup Nested Virtualization in Microsoft Azure

Install Docker Enterprise Edition Preview on Windows Server 1709

First you have to install Docker Enterprise Edition Preview on your Windows Server 1709 container host. You can install the Docker EE preview using PowerShell package management, using the following commands:

 
Install-Module DockerProvider
Install-Package Docker -ProviderName DockerProvider -RequiredVersion preview

As mentioned this is a preview version of Docker EE which enables a bunch of new features, to run Docker in production environments please use Docker EE 17.06.

Enable Docker Linux Containers on Windows

The preview Docker EE package includes a full LinuxKit system (13MB) for use when running Docker Linux containers. To enable this use the following command:

 
[Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", "1", "Machine")
Restart-Service Docker

to disable it again use the following:

 
[Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", $null, "Machine")
Restart-Service Docker

Run Docker Linux Container on Windows Server

Docker Ubuntu Container on Windows Server

Now you are able to run Linux Containers on Windows Server 1709.

 
docker run ubuntu

for fun you can also run Nyancat!

Docker Nyan Cat on Windows Server

 
docker run -it supertest2014/nyan

Things are still in preview, so don’t expect to work 100% :)



Azure Nested Virtualization

Hyper-V Container and Nested Virtualization in Microsoft Azure Virtual Machines

Last week Microsoft announced some pretty cool new Azure Stuff, like the Azure Cloud Shell, Azure PowerShell 4.0, Azure Cosmos DB and much more. In the session about Azure Compute, Microsoft introduced a bunch of new features, like new VM sizes, new experiences and new integration technology as well as updates to Azure Service Fabric, Azure Container Service and Azure Functions. One which really got my interest was the announcement about the new Virtual Machines sizes for Dv3 and Ev3, which will enable customers to use Virtualization inside their Windows Server Virtual Machines on Azure, enabled by Nested Virtualization from Windows Server 2016 Hyper-V. With that Dv3 and Ev3 Azure Virtual Machines are Nested Virtualization enabled. This means you can now run Nested Virtualization in Microsoft Azure Virtual Machines.

Update: The new Azure Dv3 and Ev3 VM sizes are now available, and you can now use Nested Virtualization in Azure.

Azure Nested Virtualization and Hyper-V Containers

You can now run Hyper-V in Azure Virtual Machines and even more important you can now run Hyper-V Container inside Azure Virtual Machines. With the announcements for Windows Server 2016 supporting Hyper-V Containers running Linux and Windows Server this is great news. You will be able to create Container Hosts in Azure running Windows Server and create Windows and Linux Containers on the same Container Host.

Azure VM Sizes

By the way, if you want to run Hyper-V Container in Azure today, and you don’t want to wait until the Dv3 and Ev3 series are available you can run them inside Azure Service Fabric. So yes, Microsoft now allows you to run Hyper-V Containers in Azure Service Fabric.

Azure Nested Virtualization Demo

As you could see in the demo, they are offering quite large Virtual Machines with a lot of RAM, running on Intels Xeon E7 CPUs.