blog post image
Andrew Lock avatar

Andrew Lock

~6 min read

Installing Docker Desktop for Windows and WSL 2

In this post, I describe how to install WSL 2 to serve as the backend for Docker Desktop for Windows. Previously I've always worked with Linux in a Virtual Machine using something like VMWare or Virtual Box, but I decided to give Docker Desktop a try, and was pleasantly surprised by the experience!

I'll start by describing how to install WSL 2 based on the install documents, then show how to install Docker Desktop. Finally, I show the the experience of running a container and how it looks in Docker Desktop.

Installing WSL2

The Windows Subsystem for Linux (WSL) is a way to run a full Linux environment on your Windows machine, without having to install a "heavier" virtual machine, such as Virtual Box, VM Ware, or Hyper-V. WSL 2 also provides a mechanism for running Docker (with Linux containers) on your Windows machine. We'll install it as a prerequisite for Docker Desktop for Windows.

If you're running Windows Home, WSL 2 is the only way to run Docker Desktop. On Windows Pro, you can also use Hyper-V, but that is deprecated now, so WSL 2 is the way to go in all cases.

1. Install WSL 1

We'll start by installing WSL 1 by enabling the WSL feature.

Open PowerShell as Administrator (I hit the Start key, type powershell and hit ctrl+shift+enter to open an elevated command prompt). Run the following, to enable WSL 1

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

You should see the following:

> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

Deployment Image Servicing and Management tool
Version: 10.0.19041.746

Image Version: 10.0.19042.804

Enabling feature(s)
[==========================100.0%==========================]
The operation completed successfully.

That enables WSL, but we're going to enable the newer WSL 2 version, which Docker Desktop can use to run the VM it needs to run containers.

2. Enable the Virtual Machine feature

WSL 2 uses a lightweight VM, so you need to enable the Virtual Machine feature available in Windows 10 version 1903 and higher. In the same, elevated command prompt, run:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

You should see something like the following:

> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Deployment Image Servicing and Management tool
Version: 10.0.19041.746

Image Version: 10.0.19042.804

Enabling feature(s)
[==========================100.0%==========================]
The operation completed successfully.

3. Restart

Time to restart your machine to ensure everything is registered correctly.

4. Install the WSL 2 update

Download the WSL2 Linux kernel update package for x64 machines and install it.

Note, if you see the following error when running the update, make sure you've restarted your machine afer installing the WSL 1 and VM features:

Error installing the WSL 2 update if you haven't restarted

The installer runs very quickly, and hopefully you'll see a confirmation screen, something like the following:

Successfully installing the WSL 2 update

5. Set WSL 2 as your default version

This is an easy step, just run wsl --set-default-version 2 in any PowerShell window:

>wsl --set-default-version 2
For information on key differences with WSL 2 please visit https://aka.ms/wsl2

6. (Optional) Install a Linux distribution

We actually don't need to install a Linux distribution to use Docker Desktop, but if you want to shell into Linux directly, you'll need to install one. You can install a distribution directly from the Microsoft Store.

WSL 2 distributions available in the MS Store

The first time you launch the distribution, the distribution will extract and install, and you'll need to set a username and password.

7. (Optional) Add to Windows Terminal

If you're using Windows Terminal (you should be!) you can configure it to open your WSL distribution. The easiest way to do this is to open up the settings.json file and reset it. You can do this by deleting the contents of the file—Terminal will automatically repopulate it with the defaults, which will include a tab for WSL.

Obviously you won't want to lose your setting customisations, so make sure to backup the contents of the file first!

You're looking for WSL in the profiles list—add that to you profile list, and you'll be able to quickly open up your WSL instance from Windows Terminal!

That's the prerequisite starter for Docker Desktop covered, so now lets get to the main course!

Installing Docker Desktop for Windows

1. Download and Install

Head to the Docker Desktop website and download the Installer for Windows.. This is a hefty ~500MB, but once it's finished, run the installer.

On the first screen, ensure you keep "Install required components for WSL 2" checked:

Installing Docker Desktop for Windows

After clicking OK, the installer will unpack a whole load of files:

Installing Docker Desktop for Windows log

Before finally prompting you to log out of your Windows account to complete the installation:

Completing Docker Desktop for Windows install

2. Logout and back in

The Docker Desktop installer will automatically log you out of your Windows account on completion. When you sign back in, you'll get a notification that Docker is starting the Linux Containers WSL 2 backend. Eventually, the main Docker Desktop window will pop up, and offer you a tutorial

Docker Desktop for Windows

3. Give it a try!

With Docker Desktop installed, you now have the docker command available in your command prompt:

> docker

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
...

Now it's installed, let's take it for a spin!

Trying out Docker Desktop for Windows

For simplicity, we'll run one of the .NET 5.0 sample apps available on DockerHub:

docker run -it --rm `
    -p 8000:80 `
    --name my-sample `
    mcr.microsoft.com/dotnet/samples:aspnetapp

This is a simple Razor Pages app, packaged in a Docker image, and ready to run. You can see the Dockerfile for the app here. When you run the above command Docker will pull the image, run it and start listening:

Unable to find image 'mcr.microsoft.com/dotnet/samples:aspnetapp' locally
aspnetapp: Pulling from dotnet/samples
45b42c59be33: Extracting [=========================>                         ]  13.57MB/27.1MB
752dcc4c3a04: Download complete
5ccb476d6b8b: Download complete
513626bd05cb: Downloading [======================>                            ]  472.8kB/1.
...
Status: Downloaded newer image for mcr.microsoft.com/dotnet/samples:aspnetapp
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://[::]:80

If you navigate to http://localhost:8000/, you'll see the app running there—a Linux container, running on Windows 🤯

Running the Linux app on Windows

The interesting thing, which I didn't realise until I installed it, is that Docker Desktop for Windows installs a very nice UI for managing your containers!

The Docker Desktop container interface

If you click on the my-sample container row, you'll see the logs for the container:

The Logs from a container in Docker Desktop

You can also inspect the environment variables, view stats about the container, or click CLI to open a shell inside (exec into) the container! You can do all these things from the command line obviously, and if you're automating things, that's definitely the right option. For casual or local development, personally I find you can't beat a nice GUI!

Summary

In this post I described how to Install WSL, upgrade it to WSL 2, and how to install Docker Desktop. This requires a restart of Windows and a logout which is a bit annoying, but otherwise it went very smoothly. The Docker Desktop UI also looks very handy, in particular the ability to exec into a container—I'm always getting the CLI command wrong, so that will be very unseful!

Andrew Lock | .Net Escapades
Want an email when
there's new posts?