Docker: Linux and Windows event more <3 with containers (LCOW)

I have noticed “Linux containers on Windows built with LinuxKit” (LCOW)  a while back. Today I found a blog post from briantweet actually running a Windows and Linux container together.

There are a few steps that you need to follow to get things working though.

  1. You need to be working on a later release of docker (at least 18.03 I believe)
  2. Switch to windows containers:
    image
  3. and have the experimental features enabled :
    image
  4. You need to then install the LinuxKit on your machine, which is luckily fairly simple:
    1. Download the latest release
    2. Run an elevated powershell prompt and execute the
      following:
      Remove-Item "$env:ProgramFiles\Linux Containers" -Force -Recurse
      Expand-Archive release.zip -DestinationPath "$Env:ProgramFiles\Linux Containers\."
  5. Now, the first thing I tried was to run the MS-SQL container on Linux (as did brian) and we both ran into the
    same memory issue. It is a bit hairy to fix, and you may not even need to do this depending on what you are
    trying to run, but just in case:

    1. We need to recompile the docker deamon. Luckily there are steps to do exactly that, in a docker container. Brian explains it
      quite well, but missed a few steps that I will fill in:

      1. You will find the client_local_windows.go file in the libcontainerd
        directory under the root of the docker source code
      2. You will need to find the
        configuration := &hcsshim.ContainerConfig{
        HvPartition: true,Name: id,
        SystemType: "container",
        ContainerType: "linux",
        Owner: defaultOwner,
        TerminateOnLastHandleClosed: true,
        }

        section, round about line 360. Then insert theMemoryMaximumInMB: 4096,in that config
      3. When running step 4 (from the steps) to build the images, add the “-m 2GB” arg.,
        else you will have an “out of memory” error
      4. Finally, only copy over the “dockerd.exe” file to the original docker install folder under the
        resources directory. On my machine : C:\Program Files\Docker\Docker\resources

This allowed me to run both the Linux ms-sql image and a windows based dotnet sample image together..

image

Magic!

Leave a Reply

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