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 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
# 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
$ 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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.