Skip to main content

Docker · Desktop

The Docker Desktop app

Docker Desktop is the app that gives a Windows or Mac machine a Docker Engine, the docker command line and a dashboard to watch them with. This guide installs it, walks through the parts you will use every day, and ends with the one line that runs this site’s lab image on your own machine.

Before you install

The current release is Docker Desktop 4.93.0, published on , which bundles Docker Engine 29.8.1. The release notes (opens in a new tab) list every version since.

Check the licence before you install it at work. Docker Desktop is free for small businesses (fewer than 250 employees and less than $10 million in annual revenue), for personal use, for education and for non-commercial open source projects. Professional use in a larger organisation needs a paid subscription, as does any government entity, and the Docker Pro, Team and Business subscriptions include it. Docker Engine itself is open source and its terms are separate. Docker Desktop licence agreement (opens in a new tab).

  • Windows on x86_64, with the WSL 2 backend: Windows 11 64-bit Enterprise, Pro or Education version 23H2 (build 22631) or later, or Windows 10 64-bit Enterprise, Pro or Education 22H2 (build 19045); WSL 2.1.5 or later; 8 GB of RAM; and hardware virtualisation turned on in the BIOS or UEFI. Windows Server is not supported. The install steps below download the x86_64 installer; Windows on Arm is out of scope here.
  • macOS: the current macOS release or one of the two before it, and at least 4 GB of RAM, on Apple silicon or Intel.

Install on Windows

Docker Desktop runs its engine in WSL 2, so check WSL first. If the command prints no version details, you have the old built-in WSL, which needs updating from a PowerShell window opened as administrator.

PowerShell
wsl --version
bash
wsl --version
PowerShell (as administrator)
wsl --update

Then download the installer to your Downloads folder and run it for your user only, which installs to %LOCALAPPDATA%\Programs\DockerDesktop and needs no administrator rights. Use either the two PowerShell lines or the two Git Bash lines.

PowerShell
Invoke-WebRequest -Uri 'https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe' -OutFile "$HOME\Downloads\Docker Desktop Installer.exe"
PowerShell
Start-Process "$HOME\Downloads\Docker Desktop Installer.exe" -Wait -ArgumentList 'install','--user'
bash (Git Bash)
curl -fLo "$HOME/Downloads/Docker Desktop Installer.exe" 'https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe'
bash (Git Bash)
"$HOME/Downloads/Docker Desktop Installer.exe" install --user

Docker Desktop does not start by itself after installing. Open it from the Start menu, read the Docker Subscription Service Agreement and accept it; the app does not run until you do. If you had installed Docker Engine directly inside a WSL Linux distribution, Docker’s guidance is to remove it first, because the two conflict.

Install on macOS

Download the disk image for your chip (Apple menu, About This Mac, shows which one you have):

bash (Apple silicon Mac)
curl -fLo Docker.dmg https://desktop.docker.com/mac/main/arm64/Docker.dmg
bash (Intel Mac)
curl -fLo Docker.dmg https://desktop.docker.com/mac/main/amd64/Docker.dmg

Then install it into Applications from the same folder. These lines run the same in zsh, the macOS default shell, as in bash. The install step can take several minutes the first time, while macOS checks the app.

bash
sudo hdiutil attach Docker.dmg
bash
sudo /Volumes/Docker/Docker.app/Contents/MacOS/install
bash
sudo hdiutil detach /Volumes/Docker

Open Docker from Applications and accept the agreement. With the default settings the docker command line goes in $HOME/.docker/bin, which is added to your PATH; open a new terminal for it to apply. On Apple silicon, Docker recommends Rosetta 2 for the few command-line tools that still need it:

bash (Apple silicon Mac)
softwareupdate --install-rosetta

Either way, this confirms the command line can reach the engine. The Server section of the output names Docker Desktop and the Engine version under it.

PowerShell
docker version
bash
docker version

The dashboard: containers, images and volumes

The dashboard is what opens with the app. Three views do most of the work, and each has a command-line equivalent that shows the same thing.

  • Containers lists running and stopped containers. From a row you can start, stop, pause, restart or delete one, open a terminal in it, or copy the docker run command that created it. Opening one shows its Logs, Inspect, Bind mounts, Files and Stats tabs.
  • Images lists the images on disk, marked in use or unused, and lets you run one, pull a newer copy, inspect it, and delete the ones you no longer need. An image running under emulation carries an architecture chip such as amd64, which is worth knowing on Apple silicon (see below).
  • Volumes lists named volumes, whether a container is using each, and their size. You can create, clone, empty, export and import them, and browse the files inside.
PowerShell
docker ps -a; docker image ls; docker volume ls
bash
docker ps -a; docker image ls; docker volume ls

Images build up quickly, and this shows how much space images, containers, volumes and the build cache take:

PowerShell
docker system df
bash
docker system df

The settings that matter for the labs

The WSL 2 backend (Windows). On a machine that supports it, Docker Desktop uses the WSL 2 based engine by default, and the switch under Settings, General may not even be shown. The engine runs in its own WSL distribution, called docker-desktop, kept apart from any Linux distributions you have installed, and its data lives under %LOCALAPPDATA%\Docker\wsl unless you move it under Settings, Resources, Advanced. If you want docker inside your own Ubuntu as well, turn it on for that distribution under Settings, Resources, WSL Integration.

Resource limits. On a Mac, Settings, Resources, Advanced sets the CPU limit, the memory limit (half the machine’s memory by default), swap (1 GB by default) and a disk usage limit. With the WSL 2 backend those settings are not in Docker Desktop: WSL 2 decides, and by default it lets its VM use up to half of Windows’ memory and every logical processor. To cap it, set memory and processors under [wsl2] in .wslconfig in your user profile. The values below are the example in Microsoft’s WSL configuration guide (opens in a new tab), which also offers the WSL Settings app in the Start menu as another way to set them.

PowerShell
notepad "$HOME\.wslconfig"
bash (Git Bash)
notepad "$USERPROFILE/.wslconfig"
.wslconfig
[wsl2]
memory=4GB
processors=2

Save the file, quit Docker Desktop, and stop WSL so the new limits apply when it starts again. This stops every running WSL distribution, not only Docker’s.

PowerShell
wsl --shutdown
bash
wsl --shutdown

For comparison, a browser lab workspace is limited to one CPU and 2 GB of memory. Resource Saver, on by default and set under the same Resources settings, steps in after five minutes with no containers running. On macOS it stops Docker’s Linux VM, freeing its memory, and starts it again for the next container, which takes about 3 to 10 seconds. On Windows with WSL 2 it only pauses Docker Engine inside the docker-desktop distribution: CPU use drops and the next container starts straight away, but the memory WSL holds is not given back unless WSL’s autoMemoryReclaim setting is on. With WSL integration turned on for a distribution, Docker Desktop counts that as activity and does not enter it.

Run the lab image

Every lab on this site has a “Run it locally” line, and it is the same line for all of them: it starts the lab image with the folder you are in mounted at /workspace, and drops you into a bash prompt there. -it makes it interactive and --rm removes the container when you type exit; your files stay in your folder. Pick the line for your shell: the quoting differs, and each one pasted at the other prompt mounts the wrong folder. On Windows, use the PowerShell line.

PowerShell
docker run --rm -it -v ${PWD}:/workspace hybridcloudworks/hcw-lab:latest
bash
docker run --rm -it -v "$PWD":/workspace hybridcloudworks/hcw-lab:latest

The first run downloads the image: 497 MB compressed and 2.73 GB on disk when it was last measured, on 27 September 2026. To fetch it ahead of time, pull it. You can then see it in the Images view and the running container in Containers.

PowerShell
docker pull hybridcloudworks/hcw-lab:latest
bash
docker pull hybridcloudworks/hcw-lab:latest

A good start is a nobody@ prompt ending in /workspace$, where terraform version answers. The image is built for linux/amd64 only, so on Apple silicon it runs under emulation and Docker prints a platform warning first; it works, more slowly. If your Docker Desktop runs on the Apple Virtualization framework, the setting “Use Rosetta for x86_64/amd64 emulation on Apple Silicon” speeds that up. The same image is published as ghcr.io/hybridcloudworks/hcw-lab too, with the same digest.

Desktop and Docker Engine on the lab host

Docker Desktop is not the engine; it carries one. On Windows and macOS it runs Docker Engine inside a small Linux VM it manages for you, the docker-desktop WSL distribution on Windows, and adds the docker command line, Docker Build, Docker Compose, the dashboard and the settings above. The docker commands you type talk to that engine.

The Hybrid Lab host behind the browser labs is a Linux server, so it needs none of that. It runs Docker Engine directly, from Docker’s own packages, with no app, no dashboard and no VM in between, and Docker Desktop’s subscription terms do not apply to it. Each lab workspace is a container started from the same lab image you just ran. That is the point of the image: the engine underneath is the same open-source Docker Engine, so a lab that works in a container on your laptop works the same way in a browser workspace, and the other way round.

Docker Desktop changes often, so the release, the subscription terms and the system requirements on this page come from Docker’s documentation. They were last checked on .