Run Docker Linux Containers on Windows Containers

A few days ago, Docker and Microsoft announced the upcoming release of a new feature that will allow running Linux Containers on Windows Container Host.

Update: This article is for Windows Server Insider, please visit the article below for Windows Server 2016 Version 1709:

How To Run Linux Containers On Windows Server 2016 Version 1709

This feature is the #1 requested option by customers and developers and it looks like it’s getting closer to mainstream release.

I should say that the requirement to get this working is not simple and I’ve listed them below:

  • Latest Windows Server 2016 Insider build
  • Hyper-V role Installed
  • Docker Windows Server Insider installed

The article below will help you configure all the above options.

How to Install Windows Containers on Windows Server insider

 

Once all prerequisites are Installed and configured it works 100%.

How Does It Work?

At this stage, Linux Containers work by running a 2nd instance of Docker Containers on the Windows host that utilizing Hyper-V Containers.

Every time we need to create or access the Linux Container we need to do it from the 2nd instance while the Instance is running on a second window (you will see shortly)

Installing Docker and LinuxJit

Before you start this step, make sure Hyper-V and docker for Windows Server Insider are installed on the server.

To install Docker for Linux and LinuxKit run the cmdlet below.

$progressPreference = 'silentlyContinue'
mkdir "$Env:ProgramFiles\Linux Containers"
Invoke-WebRequest -UseBasicParsing -OutFile linuxkit.zip https://github.com/friism/linuxkit/releases/download/preview-1/linuxkit.zip
Expand-Archive linuxkit.zip -DestinationPath "$Env:ProgramFiles\Linux Containers\."
rm linuxkit.zip

Next, I’ll Install the daemon for the Linux support.

Invoke-WebRequest -UseBasicParsing -OutFile dockerd.exe https://master.dockerproject.org/windows/x86_64/dockerd.exe

In this very important part, I’ll run these two cmdlets and leave them running in the background.

Remember, this window needs to run all the time on a separate Windows.

$Env:LCOW_SUPPORTED=1
.\dockerd.exe -D -H "npipe:////./pipe//docker_lcow" --data-root c:\lcow

Below you will see the two windows.

Next, I’ll download the Linux container image that is support for Linuxkit and Windows Containers.

Remember: You have to use the docker -H “npipe:////./pipe//docker_lcow” cmdlet before any command you want to run on the Docker for Linux

docker -H "npipe:////./pipe//docker_lcow" pull busybox

Once download, I’ll check that the image is there

docker -H "npipe:////./pipe//docker_lcow" images

And the million dollar moment, I’ll run a Linux Container on Windows Container Host

docker -H "npipe:////./pipe//docker_lcow" run -ti busybox

Below I run top inside my Linux Container

Summary

Running Linux Containers on Windows Server is a major shift and will change many things.

At this stage, there are a lot of requirements to get this done but it’s possible.

Leave a Reply

Your email address will not be published. Required fields are marked *