# Capitolo 3 – Installazione e Configurazione Base di Docker

In questo capitolo vediamo come installare **Docker Engine** su Debian/Ubuntu usando lo script ufficiale, e come configurarlo in modalità **rootless**.  
Per altre distribuzioni Linux, consultare la documentazione ufficiale: [Docker Engine Install](https://docs.docker.com/engine/install/).

---

## 3.1 Prerequisiti

- Sistema operativo Debian o Ubuntu  
- Utente con privilegi `sudo` (non necessario per modalità rootless, ma utile per installazione standard)  
- Connessione Internet  

---

## 3.2 Installazione automatica con lo script ufficiale

Docker fornisce uno script ufficiale che configura automaticamente repository, chiavi GPG e installa i pacchetti necessari.

Esegui i seguenti comandi:

```bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh
```

- Lo script installerà Docker Engine, CLI, containerd e plugin di Docker Compose.  
- Il processo include anche l’attivazione del servizio Docker.

---

## 3.3 Avvio e verifica del servizio

Dopo l’installazione:

```bash
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker
```

Verifica che Docker funzioni correttamente eseguendo un container di test:

```bash
docker run hello-world
```

Se l’immagine viene scaricata e viene stampato un messaggio di conferma, Docker è correttamente installato.

---

## 3.4 Uso di Docker senza sudo

Per consentire a un utente di usare Docker senza `sudo` (modalità standard):

```bash
sudo usermod -aG docker $USER
```

Effettua il logout/login o esegui:

```bash
newgrp docker
```

Verifica:

```bash
docker info
```

---

## 3.5 Modalità Rootless (Docker senza privilegi root)

Docker può essere eseguito in modalità **rootless**, evitando completamente l’uso di privilegi root.  
Questa modalità aumenta la sicurezza riducendo l’esposizione del daemon.

### Installazione rootless

```bash
sudo apt update
sudo apt install -y uidmap dbus-user-session
dockerd-rootless-setuptool.sh install
```

- L’installazione crea un daemon Docker gestito dall’utente corrente.  
- Docker rootless esegue container con UID dell’utente, isolati dal sistema.

### Avvio e utilizzo

```bash
systemctl --user start docker
systemctl --user enable docker
```

Verifica:

```bash
docker info
```

> Per dettagli avanzati, limiti e configurazioni aggiuntive, consultare la documentazione ufficiale:  
> [Rootless Docker](https://docs.docker.com/engine/security/rootless/)

---

## 3.6 Altre distribuzioni Linux

Se si utilizza un sistema diverso da Debian/Ubuntu (RHEL, CentOS, Fedora, SLES, Raspberry Pi OS, ecc.), seguire la guida ufficiale:  

[Install Docker Engine – Docker Docs](https://docs.docker.com/engine/install/)

---

## 3.7 Buone pratiche post-installazione

- Tenere Docker aggiornato con il gestore pacchetti o lo script ufficiale  
- Limitare l’accesso al gruppo `docker` a utenti trusted  
- Verificare lo stato del daemon con `systemctl status docker`  
- Testare sempre con `docker run hello-world` dopo aggiornamenti  
- Considerare la modalità rootless per ambienti multi-utente o produzione più sicura

---

## Conclusione

Docker Engine è ora pronto all’uso, sia in modalità standard che rootless.  
Nel prossimo capitolo vedremo come **gestire immagini Docker**, costruirle e personalizzarle con Dockerfile.