This guide walks you from zero → running containers on Windows 11. No prior Docker knowledge needed.
We’ll cover:
- What Docker is (in plain English)
- Setting up WSL (required)
- Installing Docker Desktop using
winget - Running your first container
- Using Portainer as a visual UI
- Core concepts you actually need
Docker lets you run applications in containers — lightweight, isolated environments that include everything the app needs to run.
Instead of:
“It works on my machine”
You get:
“It works anywhere Docker runs”
flowchart LR
A[Your App] --> B[Docker Container]
B --> C[Docker Engine]
C --> D[WSL2 Linux Kernel]
D --> E[Windows 11]
Key idea:
- Docker uses Linux under the hood
- On Windows → this is handled by WSL2
Docker Desktop depends on WSL.
wsl --installThis will:
- Enable WSL
- Install a Linux distro (usually Ubuntu)
- Set WSL2 as default
wsl --statusYou should see:
- Default Version: 2
winget install -e --id Docker.DockerDesktop- Launch Docker Desktop
- Accept the license
- Let it finish setup (it may restart WSL)
docker --versionLet’s run the classic test:
docker run hello-worldsequenceDiagram
participant You
participant Docker
participant DockerHub
participant Container
You->>Docker: run hello-world
Docker->>DockerHub: download image
DockerHub-->>Docker: image returned
Docker->>Container: start container
Container-->>You: success message
If everything worked, you’ll see:
“Hello from Docker!”
A template for a container
Example: nginx, postgres, hello-world
Think:
Blueprint
A running instance of an image
Think:
A live app created from the blueprint
Public registry where images live
Persistent storage for containers
Without volumes:
Data disappears when container stops
Portainer gives you:
- Web UI
- Container management
- Logs, stats, configs
- Open Docker Desktop
- Go to Extensions Marketplace
- Search for Portainer
- Click Install
docker volume create portainer_data
docker run -d `
-p 9000:9000 `
--name portainer `
--restart=always `
-v /var/run/docker.sock:/var/run/docker.sock `
-v portainer_data:/data `
portainer/portainer-ceOpen: http://localhost:9000
flowchart LR
A[You] --> B[Portainer UI]
B --> C[Docker Engine]
C --> D[Containers]
docker run -d -p 8080:80 nginxThen open: http://localhost:8080
- Docker = runtime
- Image = blueprint
- Container = running app
- WSL = Linux layer on Windows
You now have:
- Docker running on Windows 11
- Your first container executed
- A UI (Portainer) to manage everything
That’s Docker.