01 · THE BASELINE

Know what you are replacing before you replace it.

Docker Desktop is not just the engine. It is a bundle, and the parts you never think about are the ones you have to reproduce.

  • A managed Linux VM — on Windows, a WSL2 distribution that hosts the daemon and is kept updated for you.
  • The engine and CLI, plus Docker Compose and BuildKit.
  • Filesystem and port integration — bind mounts from Windows paths, and published ports reachable on localhost.
  • A graphical interface for containers, images, volumes and logs.
  • Credential helpers for registry authentication, wired into the Windows credential store.
  • Optional Kubernetes, one checkbox away.
  • Automatic updates of all of the above.

Licensing, in one line: Docker Desktop requires a paid subscription for commercial use in organisations above a published size and revenue threshold, and is free for personal use, education and small businesses. The thresholds have changed more than once — check the current terms rather than a summary in any guide.

02 · THE FIELD

Four replacements, sorted by how much you want to configure.

OptionWhat it isBest forTrade-off
Podman Desktop Daemonless, rootless container engine with a graphical interface The closest drop-in replacement, with a real GUI and a Docker-compatible CLI Rootless has genuine differences: low ports, some volume behaviour, a few compose edge cases
Rancher Desktop Open-source desktop app over containerd or the Docker engine, with Kubernetes built in Anyone who wants local Kubernetes without extra setup Heavier than the alternatives; Kubernetes is the point rather than an extra
Docker engine in WSL2 The engine installed directly inside a Linux distribution Developers already living in WSL2 who want the lightest possible setup No GUI, and you wire up startup, port access and Windows path mounts yourself
containerd with nerdctl The underlying runtime plus a Docker-compatible CLI Matching a production Kubernetes runtime exactly The least hand-holding of the four

For most people the choice is between the first and the third: Podman Desktop if you want something that feels like what you had, or the plain engine in WSL2 if you want the smallest number of moving parts and already work in a Linux shell all day.

03 · THE LEAN ROUTE

Install the Docker engine directly in a WSL2 distribution.

No desktop application, no background service on Windows, and the engine runs where your code already lives. Around ten minutes to set up.

BASH · INSIDE A WSL2 UBUNTU DISTRIBUTION
# Install the engine and the compose plugin from Docker's repository
curl -fsSL https://get.docker.com | sh

# Run docker without sudo
sudo usermod -aG docker $USER

# Start it, and have it start with the distribution
sudo service docker start
echo 'sudo service docker start' >> ~/.bashrc

# Verify
docker run --rm hello-world
docker compose version

Details that matter afterwards

  • Enable systemd in /etc/wsl.conf if you want the daemon managed properly rather than started from your shell profile. Restart with wsl --shutdown afterwards.
  • Keep project files in the Linux filesystem. Bind-mounting from /mnt/c is slow for the same reason every other cross-boundary operation is slow.
  • Published ports are reachable from Windows on localhost with mirrored networking enabled, which the WSL2 guide covers.
  • Your editor still works. VS Code connected to WSL sees the daemon exactly as a Linux machine would.

04 · THE DROP-IN

Podman, if you want the graphical experience back.

Podman is daemonless and rootless by default, which is a security improvement and the source of every difference you will notice.

POWERSHELL · PODMAN
winget install RedHat.Podman
# Or install Podman Desktop for the graphical interface

# Create and start the backing Linux machine
podman machine init
podman machine start

podman run --rm hello-world

# The Docker-compatible alias, if you want muscle memory to keep working
Set-Alias docker podman

The four differences that catch people

  • Ports below 1024. Rootless containers cannot bind them directly. Publish to a high port and map it, or use the documented privileged-port configuration.
  • File ownership in volumes. User namespace mapping means a file written in a container may not have the UID you expect on the host. The :U and :Z volume options exist for exactly this.
  • Compose. Podman supports Compose files through podman compose or a socket-compatible mode, but a few edge cases in networking and dependency ordering behave differently. Test the whole stack before switching a team.
  • Pods are first class. Podman can group containers into a pod that shares a network namespace, which is closer to Kubernetes semantics and genuinely useful once you know it exists.

A Docker socket compatibility layer exists for tools that talk to the Docker API directly, such as Testcontainers or some IDE integrations. Enable it before concluding that a tool is incompatible.

05 · MIGRATION

Seven things to check before you uninstall.

CHECK—01 Save your volumes

Named volumes do not migrate between engines. Export any database data you care about before removing anything.

CHECK—02 Registry credentials

Private registry logins live in the Desktop credential helper. Have the credentials to hand before you lose access to it.

CHECK—03 Compose files

Run the whole stack on the new engine before committing. Networking and dependency ordering are where differences show.

CHECK—04 Tools that call the socket

Testcontainers, IDE integrations and some CI runners talk to the Docker API directly. Point them at the compatibility socket.

CHECK—05 Multi-architecture builds

If you build ARM images on x86, verify the emulation setup exists on the new engine before you need it.

CHECK—06 Kubernetes

If you used the Desktop checkbox, decide on a replacement: Rancher Desktop, kind, k3d or minikube.

CHECK—07 Uninstall properly

Remove Desktop through Windows Apps, then clean up its WSL distributions so they stop consuming disk.

POWERSHELL · REMOVE THE LEFTOVER DISTRIBUTIONS
wsl -l -v
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data

Unregistering deletes everything in that distribution. Any volume you have not exported is gone. Do the export first, and confirm you can read it back.

06 · THE HONEST CASE

Three situations where Docker Desktop is still the right answer.

  • A team where not everyone is a container specialist. The graphical interface, the automatic updates and the single supported path are worth real money in support time. Replacing it means someone owns the setup documentation.
  • Personal use, where it is free. If you are under the licensing threshold, the licence argument does not apply to you at all, and the alternatives are a preference rather than a requirement.
  • A workflow that depends on the ecosystem. Extensions, Docker Scout, and tight integration with tooling that expects Desktop specifically.

The resource argument is weaker than it used to be. Modern Desktop releases idle far more cheaply than the versions that gave it a reputation, and a properly configured .wslconfig caps its memory the same way it caps everything else in WSL. Measure your own machine before switching on that basis alone.

07 · QUICK ANSWERS

Containers without Docker Desktop, briefly.

Do I need a licence for Docker Desktop?

Docker Desktop is free for personal use, education and small businesses, and requires a paid subscription for commercial use in organisations above a published size and revenue threshold. Those thresholds have changed more than once, so check the current terms directly rather than relying on any summary.

What is the closest alternative to Docker Desktop?

Podman Desktop. It provides a graphical interface, a Docker-compatible command line and a socket compatibility layer for tools that call the Docker API. The main differences come from being rootless: binding ports below 1024, volume file ownership, and a few Compose edge cases.

Can I just install Docker inside WSL2?

Yes, and it is the lightest option. Install the engine and the Compose plugin inside a WSL2 distribution, add your user to the docker group, and start the service. You lose the graphical interface and automatic updates, and you configure startup and port access yourself.

Will my docker-compose files work with Podman?

Mostly. Podman supports Compose files through podman compose or a Docker-compatible socket, but networking behaviour and dependency ordering have edge cases that differ. Run your full stack on the new engine before switching a team, rather than testing a single container.

How do I move my volumes to a new container engine?

You export and re-import the data rather than moving the volume. Run a temporary container that mounts the volume, write its contents to an archive on the host, then restore it into a new volume on the new engine. Named volumes are not portable between engines directly.