May 10, 2022·6 min read·engineeringdockerlinuxdesktopvirtualization

Docker Desktop for Linux adds a separate virtualized development environment

The Linux launch brings the Desktop dashboard and bundled tools to a host that can already run Docker Engine. A separate VM, context and image store explain the practical difference.

Linux already runs Docker Engine without a desktop application. Docker Desktop for Linux therefore needs a more specific explanation than making containers available on another operating system. Its May 10 general availability announcement offers the integrated Desktop environment to Linux developers, including its dashboard and bundled tools. The consequential architectural decision is that Desktop runs its engine in a virtual machine on Linux too.

That decision gives the product its own execution environment. It also means an existing local Engine installation and Desktop are different destinations for Docker commands. Their images and containers occupy separate stores. A developer who installs Desktop should expect a new environment, with its own state, rather than assume the application is a graphical view of the daemon already installed on the host.

I value Docker's repeatable build files and portable images. Those properties make it important to identify where an image was built and where a command will run it. The Linux release adds an integrated option, but it also adds another destination whose identity needs to be explicit.

Desktop supplies a coordinated package

The announcement describes a package containing Kubernetes, Compose and BuildKit alongside the container tools. The dashboard manages container resources, and Docker Extensions provide a way to integrate additional developer tools. At launch, Ubuntu, Debian and Fedora receive support through deb and rpm packages. An Arch package is experimental. Raspberry Pi OS support is described as planned work, not a capability available at this launch.

Docker explains that Linux users requested a consistent experience across operating systems and access to capabilities previously available through the Mac and Windows products. That request has a different scope from asking whether Linux can run containers. It concerns the combination of tools and the interface used to manage them.

The distinction leaves a straightforward choice for existing Engine users. Docker explicitly says they can continue using Engine. Desktop's availability does not require replacing a native installation. Its value depends on whether the integrated environment solves a development problem that the existing setup leaves to separate tools or manual configuration.

This is a useful way to assess the release without treating the dashboard as the entire product. The Linux application includes an execution environment and a distribution of development tools. Some engineers will value the coordinated package. Others already have a host configuration that meets their needs, in which case a second environment introduces state they do not need.

The VM gives Docker control over its guest system

Docker's launch-era architecture documentation explains the VM decision. A guest system lets Docker use a consistent kernel and operating system across host distributions. It can introduce guest kernel capabilities without waiting for the user to replace the host's long-term support distribution. The same decision helps align the Linux product with the Mac and Windows environments.

That is a product maintenance tradeoff. Controlling the guest reduces variation inside the environment Docker distributes. It introduces a virtual machine boundary between the Linux host and containers, even though both sides run Linux. Shared files and resource allocation consequently need explicit configuration.

The documentation also presents the VM as an additional security boundary. The relevant architectural fact is that container code executes against the guest kernel. That separates it from a native Engine arrangement in which the host supplies the execution environment directly. Host directories intentionally shared with the guest remain part of the trust decision. A VM is therefore meaningful isolation, but its presence does not make every file shared into a container inaccessible to that container.

The Linux implementation uses VirtioFS for host directory sharing. Docker's documentation claims near-native filesystem performance under appropriate resource allocation, but provides no general guarantee for every workload. The clearer result is the selected mechanism. Desktop exports directories across the VM boundary through a filesystem designed for host and guest sharing.

Context selection changes where commands operate

The architecture document names Desktop's dedicated context desktop-linux. The local Engine remains available through the default context in its example. Desktop selects its own context when starting and resets the current context to default when shutting down. That behavior can change the destination of subsequent commands without changing their spelling.

The documented diagnostic is simple.

docker context ls

The example shows the native Engine at unix:///var/run/docker.sock and Desktop at a socket beneath the user's .docker/desktop directory. The selected context identifies which environment receives the command. This gives an engineer an explanation for apparently missing images after moving between environments. An image in one store has not necessarily been deleted because a command against the other environment cannot see it.

The same distinction applies to container lifecycle operations. A command describing the containers in the selected environment cannot establish what exists in another environment. Context is therefore part of the operational meaning of a command, alongside the subcommand and its arguments.

My preference is to make this dependency visible in setup instructions. A reproducible image definition is useful only when the surrounding workflow identifies its intended engine. The new Linux context provides that identity, while automatic context changes make it particularly relevant during Desktop startup and shutdown.

Resource settings describe the guest

The Linux user manual at launch exposes CPU, memory and disk controls in the Resources panel. Its documented defaults allocate half the host's processors and 25 percent of its memory to Desktop, with a 1 GB swap file. These are settings for the environment Desktop runs, not measurements of a particular application.

This matters on a workstation that also runs an editor and other services. Increasing the guest allocation changes the resources available to its workloads, while leaving less capacity for the host's other work. The controls make that choice explicit. They also distinguish Desktop from a native Engine installation whose resource behavior follows a different host arrangement.

The same manual describes a configurable disk image size and location. Containers and images belong to Desktop's storage, so disk capacity planning needs to refer to that image. Looking only at the native Engine's storage directory gives an incomplete picture when both installations exist.

The manual also documents Pause and Resume. Pausing freezes the guest and retains container state in memory to reduce CPU use. A Docker CLI command automatically resumes Desktop. This makes pause a workstation convenience, with an observable interaction between graphical controls and subsequent terminal activity.

Shared source and persistent data have different needs

The launch manual shares the user's home directory by default and requires additional directories to be added through File sharing. Applying the setting makes them available for bind mounts. A source tree outside the allowed directories can therefore fail at runtime even when the same path worked with a native Engine.

Docker describes shared folders as a way to edit application code on the host while executing it in containers. It recommends named volumes inside the guest for non-code data such as databases and caches. The reason given is the overhead of notifying the guest about host changes. A live source directory and a database's working files impose different requirements on the host sharing mechanism.

This distinction fits the separation between the application artifact and the development environment. Source sharing supports an edit-and-run workflow. Guest-local persistent storage supports workloads that do not need direct host editing. Choosing between them expresses a data access requirement, with performance consequences that follow from the location of the data.

Linux prerequisites remain specific

The contemporary installation guide requires KVM virtualization support, QEMU 5.2 or later, systemd and a supported desktop environment. It specifies at least 4 GB of RAM. It also says Docker does not support running Desktop in nested virtualization scenarios. A supported Linux distribution alone is therefore insufficient to establish that the host meets the launch requirements.

Credential storage has a Linux-specific requirement as well. The user manual says Desktop relies on pass with GPG-encrypted files and requires initialization before signing into Docker Hub through the application. That account setup is separate from bringing up the VM or selecting a Docker context.

I see the release as a choice about who maintains the local development environment. Docker supplies the guest and bundled interface, while the host still needs to meet its virtualization and desktop requirements. For existing Engine users, the immediate practical difference is the second environment with its own context and stored data. Understanding that separation makes the new Linux package's behavior predictable when it coexists with the tools already installed.