Quick Links

Docker Desktop is a popular containerization solution which bundles everything you need to build images and run containers. One download gives you Docker, Docker Compose, Kubernetes, a comprehensive GUI, and support for a large selection of third-party extensions.

Docker Desktop has historically been limited to Windows and Mac systems. Linux users have had to install Docker Engine manually and interact with it from the terminal or a separate user interface. Docker announced a version of Desktop for Linux at DockerCon 2022, finally offering feature parity across all three major platforms. This guide will show you how to set it up and get started.

Preparing to Run Docker Desktop

The steps in this article have been tested in a clean Ubuntu 22.04 environment. Desktop's also supported on Ubuntu 21.10, Debian 11, and Fedora 35/36. Distro-specific documentation is available on Docker's website.

Desktop requires a 64-bit system with 4 GB of RAM and KVM hardware virtualization enabled. The KVM kernel module is usually enabled automatically when your host supports virtualization. You can check by running the kvm-ok command:

$ kvm-ok
    

INFO: /dev/kvm exists

KVM acceleration can be used

Enable virtualization in your system's BIOS or UEFI if kvm-ok reports an error. You can also try manually loading the KVM kernel module using modprobe:

# 1/2
    

$ sudo modprobe kvm

# 2/2 INTEL ONLY

$ sudo modprobe kvm_intel

# 2/2 AMD ONLY

$ sudo modprobe kvm_amd

Docker Desktop isn't designed to run alongside Docker Engine. You should stop the Docker service if you've already been using Docker Engine on your machine. This will reduce resource consumption and minimize the risk of conflicts between Engine and Desktop.

$ sudo service docker stop

Installing Docker Desktop

The Docker Desktop package isn't yet available in repositories so it must be manually acquired. Download the right package for your operating system using the links in the documentation.

$ wget https://desktop.docker.com/linux/main/amd64/docker-desktop-4.12.0-amd64.deb

The Docker Desktop package depends on other packages from the Docker repository. Although Desktop itself isn't installed from the repository, you still need it in your sources list so the dependencies can be resolved. Run the following sequence of commands to add Docker's Apt repository to your machine:

$ sudo apt update
    

$ sudo apt-get install -y \

ca-certificates \

curl \

gnupg \

lsb-release

# Download the GPG key used to sign the packages in the repository

$ sudo mkdir -p /etc/apt/keyrings

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Add the repository to your package sources list

$ echo \

"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \

$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

$ sudo apt update

Now you can install the Desktop package with Apt's install command:

$ sudo apt install -y ./docker-desktop-4.12.0-amd64.deb

Docker Desktop should now appear in your applications list.

Using Docker Desktop

Start Docker Desktop from your operating system's app launcher. You should see the Docker whale icon appear in your system tray. Clicking the icon displays Docker's tray menu.

Screenshot of the Docker Desktop system tray menu on Ubuntu

The first run initialization process could take a couple of minutes to complete. The icon's animation will stop and the status line at the top of the menu will change to "Docker Desktop is running" when Docker's ready to use. Click the "Dashboard" item at the top of the menu to open the UI if it doesn't appear automatically.

You'll be prompted to accept the terms of service and will then be taken to the Containers screen. You can optionally login to Docker Hub by clicking the Login button in the title bar and following the prompts.

Screenshot of the Docker Desktop welcome screen

Try running docker and docker compose in your terminal to check the CLIs are available:

$ docker version
    

Client: Docker Engine - Community

Cloud integration: v1.0.29

Version: 20.10.18

...

$ docker compose version

Docker Compose version v2.10.2

Next start a container to verify your installation's working:

$ docker run -d -p 80:80 docker/getting-started

Your new container should show up in the Docker Desktop UI. Clicking the three dots icon to the right of the table reveals a list of actions you can take within Docker Desktop, such as opening a terminal inside the container or visiting published ports in your browser.

Screenshot of the Docker Desktop containers interface

The Images tab on the left side of the screen provides a table of all the container images present on your host. Controls are available to clean up unused images, quickly start a new container from an image, and push and pull images between different registries.

Screenshot of images in the Docker Desktop interface

You can get more information on using Docker Desktop within the documentation. The functionality covers many of the docker CLI commands while layering in additional higher-level concepts such as Developer Environments for work-in-progress code sharing.

Enabling Kubernetes

Docker Desktop has integrated Kubernetes support but it's not enabled by default. Turn it on by clicking the settings cog icon in the app's title bar and then selecting "Kubernetes" from the menu on the left.

Screenshot of Kubernetes settings in Docker Desktop

Check the "Enable Kubernetes" checkbox and press the "Apply & Restart" button in the bottom-right. It could take several minutes for Docker to acquire the Kubernetes components and create your cluster. A Kubernetes status icon will appear in the bottom-left of the app, next to the Docker icon. It will turn green when Kubernetes is ready to use. The Kubernetes status is also shown at the top of Docker Desktop's tray menu.

Next install Kubectl. This is the CLI used to interact with your Kubernetes cluster. The official Snap package is the easiest way to add it to Ubuntu:

$ sudo snap install kubectl

Now try using Kubectl to access your cluster:

$ kubectl get nodes
    

NAME STATUS ROLES AGE VERSION

docker-desktop Ready control-plane 22m v1.25.0

The docker-desktop node shows as Ready so you can start creating Pods:

$ kubectl run nginx --image nginx:latest
    

pod/nginx created

Expose your Pod with a service:

$ kubectl expose pod/nginx --port 80 --type NodePort
    

service/nginx exposed

Now find the host port that was allocated to the service:

$ kubectl get services
    

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m

nginx NodePort 10.96.132.212 <none> 80:30107/TCP 75s

The port number is 30107. Use this port to access your service and retrieve the default NGINX landing page:

$ curl http://localhost:30107
    

<!DOCTYPE html>

<html>

<head>

<title>Welcome to nginx!</title>

Your Kubernetes cluster is fully operational. It'll start automatically whenever Docker Desktop is running.

Docker Desktop vs Docker Engine

Docker Engine is completely separate to Docker Desktop. Docker Engine launches containers as processes directly on your host. It uses a system service to run the Docker daemon. The docker CLI targets this daemon instance when you issue commands.

Docker Desktop runs your containers inside a QEMU virtual machine. You don't have to directly interact with QEMU as the VM's creation and management is handled for you. Launching Docker Desktop automatically starts the VM; quitting the app will shut it down.

The VM architecture was a necessity for running Docker on Windows and Mac systems. It provides a predictable environment for hosting Linux containers. The Docker team decided to continue using VMs for Desktop on Linux to prevent inconsistencies arising between platforms.

Although the VM doesn't affect day-to-day Docker usage, it's a heavier solution that demands more resources than Docker Engine. You can expect the VM to consume around 2 GB of RAM while idle, even when no containers are running. Docker Engine's memory consumption would be negligible in the same situation.

This means Docker Engine remains the best way to run containers on Linux in production environments or wherever performance is critical. Desktop is a great option for developers who want to use the same fully integrated workflow as peers on Windows and Mac. Desktop's also the best choice when you want to use Kubernetes without adding any extra tools. You'll need a dedicated Kubernetes environment such as Minikube or MicroK8s if you're using Docker Engine.

Configuring Desktop's Docker Daemon

You can customize the Docker daemon configuration used by Desktop by clicking the settings cog icon in the title bar and heading to the "Docker Engine" tab on the left of the screen.

Screenshot of managing Docker Engine settings in Docker Desktop

Type or paste your changes into the input provided, then press "Apply & Restart" in the bottom-right corner.

Customizing Resource Limits

Docker Desktop automatically limits the resources that its virtual machine can consume. The defaults are half of the total number of processor cores available, 25% of your system memory, and a 1 GB swap file.

Screenshot of resource consumption settings in Docker Desktop

These limits can be changed by heading to Docker Desktop's settings screen and clicking the "Resources" tab in the menu on the left. Use the sliders to customize the cap for each resource. You can resize the virtual disc used to store the VM's data by scrolling down the screen. Click the "Apply & Restart" button in the bottom-right when you're done.

Summary

Docker Desktop is a developer-oriented containerization solution that combines the docker CLI with a versatile GUI and integrated Kubernetes support. Desktop's arrival on Linux means development teams can standardize on a consistent toolchain, irrespective of the platform preferences of individual engineers.

Docker Desktop is best seen as an alternative to Docker Engine. It provides its own container environment, including a virtualized Docker Engine and a full suite of Docker CLIs. You can't use the Desktop GUI with an existing Docker Engine installation. Desktop is most applicable to developer workstations while Docker Engine should be used on production servers where you don't need a graphical interface and want to avoid the overheads of running a VM.