Docker publishes its own apt repository to ensure you get the latest version rather than Ubuntu’s older packaged version.

Step 1 — Remove any conflicting packages:

sudo apt remove docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc

Ubuntu’s default repos ship older, unofficial Docker packages — this clears them out first.

Step 2 — Add Docker’s apt repository:

# Install prerequisites
sudo apt update
sudo apt install ca-certificates curl
 
# Add Docker's official GPG key (verifies package authenticity)
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
 
# Add the repository
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update

Step 3 — Install Docker packages:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

The five packages installed:

PackageRole
docker-ceThe Docker engine
docker-ce-cliThe docker CLI
containerd.ioThe low-level container runtime
docker-buildx-pluginExtended build capabilities
docker-compose-plugindocker compose support