Guida per installare e configurare Docker su Windows - WSL - Linux

Contesto

Docker è la piattaforma standard per creare, distribuire e eseguire applicazioni in container. Permette di isolare ambienti in modo riproducibile, eliminando il classico problema “funziona sul mio PC”. Questa guida copre tre scenari distinti: installazione nativa su Windows tramite Docker Desktop, integrazione con WSL 2 (Windows Subsystem for Linux), e installazione diretta su distribuzioni Linux (Ubuntu/Debian e Arch/Fedora).


Windows — Docker Desktop

Prerequisiti

  • Windows 10 (build 19044+) o Windows 11
  • Virtualizzazione abilitata nel BIOS (VT-x / AMD-V)
  • WSL 2 installato e abilitato (raccomandato come backend)

Installazione

  1. Scarica Docker Desktop da https://www.docker.com/products/docker-desktop
  2. Esegui il file .exe e segui la procedura guidata
  3. Seleziona “Use WSL 2 instead of Hyper-V” durante il setup
  4. Al termine, riavvia il sistema
  5. Avvia Docker Desktop dalla barra delle applicazioni

Configurazione post-installazione

Apri Docker Desktop → Settings:

  • General: abilita “Start Docker Desktop when you log in”
  • Resources > WSL Integration: abilita l’integrazione per le distro WSL che vuoi usare (es. Ubuntu)
  • Docker Engine: puoi modificare il daemon JSON da qui

Verifica

Apri PowerShell o CMD:

docker --version
docker run hello-world

WSL 2 — Docker senza Docker Desktop

Se vuoi usare Docker direttamente da WSL senza dipendere da Docker Desktop (utile per ambienti headless o per evitare la licenza commerciale), puoi installare il Docker Engine direttamente nella distro WSL.

Prerequisiti

  • WSL 2 attivo con una distro Ubuntu/Debian installata
  • systemd abilitato nella distro WSL

Abilitare systemd in WSL

Crea o modifica /etc/wsl.conf nella distro:

[boot]
systemd=true

Poi riavvia WSL da PowerShell:

wsl --shutdown

Installazione Docker Engine in WSL

Entra nella distro WSL e installa Docker:

# Rimuovi eventuali versioni vecchie
sudo apt remove docker docker-engine docker.io containerd runc
 
# Installa dipendenze
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
 
# Aggiungi la chiave GPG ufficiale Docker
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
 
# Aggiungi il repository
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
 
# Installa Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

Configurazione post-installazione

# Avvia il servizio
sudo systemctl enable docker
sudo systemctl start docker
 
# Aggiungi il tuo utente al gruppo docker (evita sudo)
sudo usermod -aG docker $USER
newgrp docker

Verifica

docker --version
docker run hello-world

Linux — Docker Engine (Ubuntu/Debian)

Prerequisiti

  • Ubuntu 20.04+ o Debian 11+
  • Accesso sudo

Installazione

# Rimuovi versioni vecchie
sudo apt remove docker docker-engine docker.io containerd runc
 
# Installa dipendenze
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
 
# Chiave GPG e repository
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
 
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
 
# Installa
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

Configurazione post-installazione

sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER
newgrp docker

Linux — Docker Engine (Arch / Fedora)

Arch Linux

sudo pacman -S docker docker-compose
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER

Fedora

sudo dnf install -y dnf-plugins-core
sudo dnf config-manager \
  --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER

Configurazione comune — daemon.json

Il file /etc/docker/daemon.json (Linux/WSL) o ~/.docker/daemon.json (Docker Desktop) permette di personalizzare il comportamento del daemon:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "default-address-pools": [
    { "base": "172.20.0.0/16", "size": 24 }
  ]
}

Dopo ogni modifica:

sudo systemctl restart docker

Docker Compose

Docker Compose è incluso come plugin in tutte le installazioni moderne (docker compose con spazio). Il file compose.yaml (o docker-compose.yml) descrive i servizi:

services:
  app:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html

Avvio:

docker compose up -d
docker compose logs -f
docker compose down

Considerazioni finali

ScenarioSoluzione consigliata
Windows + sviluppo quotidianoDocker Desktop + WSL 2 backend
WSL senza licenza DesktopDocker Engine in WSL + systemd
Server LinuxDocker Engine (apt/dnf/pacman)
CI/CD headlessDocker Engine, nessun Desktop

Docker Desktop è la scelta più comoda su Windows perché gestisce automaticamente la comunicazione tra Windows e WSL, espone Docker agli strumenti Windows nativi e include una GUI. Per ambienti server o pipeline CI, Docker Engine direttamente su Linux è leggero e sufficiente.

Ricorda sempre di non eseguire container come root in produzione, usare .dockerignore, e limitare i permessi dei bind mount.

Riferimenti

Containers e Virtualizzazione WSL 2 Setup DevOps Tools