Top Tags

Install Docker Desktop on Ubuntu

Install Docker Desktop on Ubuntu

Overview

Docker Desktop for Linux provides a complete Docker development environment with a graphical user interface, Kubernetes integration, and advanced features like Docker Scout and Docker Extensions. This guide covers both Docker Engine installation using the convenience script and Docker Desktop setup on Ubuntu.

Prerequisites

Before installing Docker, ensure your system meets the following requirements:

RequirementMinimumRecommended
Ubuntu Version22.04 LTS (Jammy)24.04 LTS (Noble)
CPU Architecturex86_64 (64-bit)x86_64 or ARM64
RAM4 GB8 GB or more
Disk Space20 GB50 GB+ for images
Kernel5.4+Latest stable
VirtualizationKVM supportKVM enabled in BIOS

Remove Conflicting Packages

Before installing Docker, remove any unofficial or conflicting packages that might interfere with the installation:

bash
1sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc 2>/dev/null || true

Install Docker Engine

Update and install required packages

bash
1sudo apt update && \
2sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

These packages provide essential functionality for secure package management:

  • apt-transport-https — Enables APT to download packages over HTTPS
  • ca-certificates — Provides root certificates for SSL/TLS verification
  • curl — Command-line tool for transferring data with URLs
  • software-properties-common — Provides scripts for managing software repositories

Install Using Convenience Script

From official Docker guide

bash
1curl -fsSL https://get.docker.com -o get-docker.sh
2
3sudo sh ./get-docker.sh

What the convenience script installs:

  • docker-ce — Docker Engine daemon
  • docker-ce-cli — Docker command-line interface
  • containerd.io — Container runtime
  • docker-buildx-plugin — Docker Build with BuildKit features
  • docker-compose-plugin — Docker Compose v2

Preview Script Actions (Dry Run)

Before running the installation script, you can preview what it will do:

bash
1sudo sh ./get-docker.sh --dry-run

Verify Docker Installation

After installation, verify Docker is running correctly:

bash
1sudo docker version
2sudo docker run hello-world

Post-Installation: Non-Root User Access

By default, Docker commands require sudo privileges. To run Docker as a non-root user, add your user to the docker group:

bash
1sudo usermod -aG docker $USER
2newgrp docker

Verify non-root access works:

bash
1docker run hello-world

Rootless Mode Installation

Rootless mode runs the Docker daemon and containers without root privileges, providing enhanced security. This is ideal for multi-user environments or when root access is restricted.

bash
1dockerd-rootless-setuptool.sh install
2
3export PATH=/usr/bin:$PATH
4export DOCKER_HOST=unix:///run/user/1000/docker.sock

Understanding Rootless Mode

FeatureRootful DockerRootless Docker
Daemon runs asrootNon-root user
Container UID mappingDirect (0 = root)User namespace remapped
Socket location/var/run/docker.sock$XDG_RUNTIME_DIR/docker.sock
Network capabilitiesFull (iptables, bridge)Limited (slirp4netns/vpnkit)
Port bindingAny portPorts > 1024 by default

Make Rootless Mode Persistent

Add these environment variables to your shell profile (~/.bashrc or ~/.zshrc):

bash
1echo 'export PATH=/usr/bin:$PATH' >> ~/.bashrc
2echo 'export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock' >> ~/.bashrc
3source ~/.bashrc

Enable Rootless Docker as Systemd User Service

bash
1systemctl --user enable docker
2systemctl --user start docker

To ensure the service starts at boot (even without user login):

bash
1sudo loginctl enable-linger $USER

Install Docker Desktop

From Official Docker Desktop Download

Install Prerequisites for Docker Desktop

Before installing Docker Desktop, install the required dependencies:

bash
1sudo apt install -y gnome-terminal pass uidmap dbus-user-session

Install the .deb Package

After downloading the .deb file:

bash
1sudo apt install ./docker-desktop-<version>-amd64.deb

Launch Docker Desktop

bash
1systemctl --user start docker-desktop

Or launch from the applications menu.


Sign in to Docker Desktop

Docker Desktop uses GPG and pass for secure credential storage on Linux.

Generate GPG Key

bash
1gpg --generate-key
2
3### init pub key
4
5pass init #your pub key

Now you can sign in Docker Desktop

GPG Key Generation Details

When running gpg --generate-key, you'll be prompted for:

  1. Real name — Your full name for the key identity
  2. Email address — Associated email for the key
  3. Passphrase — Secure passphrase to protect the private key

After generation, note the public key ID (a 40-character hex string or the last 16 characters). Use this ID to initialize the password store.

Verify Credential Store

bash
1pass ls

This should show an empty password store, ready for Docker Desktop to store your credentials securely.


Managing Docker Service

Check Docker Service Status

bash
1sudo systemctl status docker

Start, Stop, and Restart Docker

bash
1# Start Docker
2sudo systemctl start docker
3
4# Stop Docker
5sudo systemctl stop docker
6
7# Restart Docker
8sudo systemctl restart docker
9
10# Enable Docker to start on boot
11sudo systemctl enable docker

Docker Configuration

Configure Docker Daemon

Docker daemon configuration is stored in /etc/docker/daemon.json. Common configurations include:

json
1{
2 "storage-driver": "overlay2",
3 "log-driver": "json-file",
4 "log-opts": {
5 "max-size": "10m",
6 "max-file": "3"
7 },
8 "default-address-pools": [{ "base": "172.17.0.0/16", "size": 24 }],
9 "live-restore": true
10}

After modifying the configuration, restart Docker:

bash
1sudo systemctl restart docker

Rootless Mode Configuration

For rootless mode, the configuration file is located at:

  • ~/.config/docker/daemon.json

Switching Docker Contexts

When both Docker Engine and Docker Desktop are installed, use contexts to switch between them:

bash
1# List available contexts
2docker context ls
3
4# Switch to Docker Desktop
5docker context use desktop-linux
6
7# Switch to Docker Engine
8docker context use default

Troubleshooting

Common Issues and Solutions

IssueSolution
Permission denied on socketAdd user to docker group: sudo usermod -aG docker $USER
Docker daemon not runningStart service: sudo systemctl start docker
Cannot connect to Docker DesktopEnsure VM is running: systemctl --user status docker-desktop
Slow file sharing (Linux)Check subuid/subgid configuration
GPG key errors on sign-inRe-initialize pass: pass init <gpg-key-id>

Check Docker Logs

bash
1# Docker Engine logs
2sudo journalctl -u docker.service
3
4# Docker Desktop logs (user service)
5journalctl --user -u docker-desktop

Verify KVM Support (for Docker Desktop)

Docker Desktop requires KVM for virtualization. Verify KVM is available:

bash
1kvm-ok
2# Or
3ls -la /dev/kvm

If KVM is not accessible, add your user to the kvm group:

bash
1sudo usermod -aG kvm $USER

Uninstall Docker

Uninstall Docker Engine

bash
1sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
2sudo rm -rf /var/lib/docker
3sudo rm -rf /var/lib/containerd

Uninstall Docker Desktop

bash
1sudo apt remove docker-desktop
2rm -rf ~/.docker/desktop
3sudo rm /usr/local/bin/com.docker.cli

Quick Reference

CommandDescription
docker versionShow Docker version info
docker infoDisplay system-wide information
docker psList running containers
docker ps -aList all containers
docker imagesList images
docker pull <image>Download an image
docker run <image>Run a container
docker stop <container>Stop a running container
docker rm <container>Remove a container
docker rmi <image>Remove an image
docker system pruneRemove unused data