MeshWorld India LogoMeshWorld.

How to Install Docker on Ubuntu, macOS and Windows

(Updated: Mar 11, 2026)
Listen to ArticleAI Speech
~4 min read narration
100%
How to Install Docker on Ubuntu, macOS and Windows

Docker on Linux means Docker Engine — a lightweight, command-line native installation. Docker on macOS and Windows means Docker Desktop — a GUI application that runs a Linux VM under the hood.

Here’s how to install both correctly.


Install Docker on Ubuntu / Debian Linux

The cleanest method is through Docker’s official apt repository.

Step 1: Remove old versions

sudo apt-get remove docker docker-engine docker.io containerd runc

Step 2: Set up the repository

# Install dependencies
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

# Add Docker's official GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the Docker repository
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Step 3: Install Docker Engine

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

Step 4: Run Docker without sudo

By default, Docker requires sudo. Add yourself to the docker group to avoid this:

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

Log out and back in for the change to take full effect.

Step 5: Verify

docker run hello-world

You should see: Hello from Docker!


Install Docker on macOS

Docker Desktop (official)

Download from docs.docker.com/desktop/install/mac-install.

Choose the right download for your chip:

  • Apple Silicon (M1/M2/M3/M4) → Apple Silicon installer
  • Intel → Intel chip installer

Double-click the .dmg, drag Docker to Applications, and open it.

Docker Desktop will ask for privileged access on first launch — allow it.

With Homebrew Cask

brew install --cask docker

Then open Docker Desktop from Applications to start the daemon.

Verify

docker --version
docker run hello-world

Install Docker on Windows

Docker Desktop (official)

Requires Windows 10 64-bit (version 1903 or later) or Windows 11.

Download from docs.docker.com/desktop/install/windows-install.

Run the installer. It will:

  • Enable WSL 2 (Windows Subsystem for Linux) if not already enabled
  • Install the WSL 2 Linux kernel update
  • Configure Docker to use WSL 2 backend

After install, restart your machine.

With winget

winget install Docker.DockerDesktop

Restart after installation, then open Docker Desktop from the Start menu.

Verify

Open PowerShell or Command Prompt:

docker --version
docker run hello-world

Docker Compose

Docker Compose is included in modern Docker installations as a plugin:

docker compose version

If you’re on an older install that uses the standalone docker-compose command, update to Docker Engine 20.10+ to get the plugin version.


Common first commands

# Pull an image
docker pull nginx

# Run a container
docker run -d -p 8080:80 nginx

# List running containers
docker ps

# List all containers (including stopped)
docker ps -a

# Stop a container
docker stop <container_id>

# Remove a container
docker rm <container_id>

# List images
docker images

# Remove an image
docker rmi <image_name>

# Open a shell inside a running container
docker exec -it <container_id> bash

Run a quick web server to test

docker run -d -p 8080:80 --name test-nginx nginx

Open http://localhost

in your browser. You should see the Nginx welcome page.

Clean up when done:

docker stop test-nginx
docker rm test-nginx

Updating Docker

Ubuntu:

sudo apt update && sudo apt upgrade docker-ce

macOS / Windows: Docker Desktop updates itself. Check for updates in the Docker Desktop menu → Check for Updates.

Once Docker is running, see the Docker Cheat Sheet for the commands you’ll use every day, or learn How to Write a Production Dockerfile for Node.js.

Reader Quality Feedback

Did this technical guide help solve your problem?

Suggest Errata ($0)
Vishnu
Primary Author

Vishnu

Founder & Principal Architect at MeshWorld. Senior engineer and instructor specializing in AI agent systems, scalable web architecture, and modern development workflows.

Explore Author Archive
Compute Fuel & Open Testbed
100% Independent & Verified

Fuel High-Density, Zero-Fluff Engineering Deep-Dives

Every guide on MeshWorld is validated on physical Linux nodes and reproducible testbeds. If this article saved you hours of debugging or unblocked production, consider funding our next cluster run.

Weekly Dispatch

Join MeshWorld Dispatch

Get practical tutorials, system blueprints, and curated AI engineering notes straight to your inbox. No fluff, zero spam.

Zero spam. 1-click unsubscribe anytime.Prefer RSS?
Curated Continuations

Up Next in This Domain.

Browse Full Archive