Installazione
Ubuntu Debian
Per prima cosa rimuovere i seguenti pacchetti che possono dare conflitto
# comando ubuntu
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)
# comando debian
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-doc podman-docker containerd runc | cut -f1)
Impostiamo il repository apt (ubuntu)
# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
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 to Apt sources:
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
Impostiamo il repository apt (Debian)
# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
Infine installiamo docker
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Veirfichiamo che il servizio sia avviato
sudo systemctl status docker
E nel caso avviamolo
sudo systemctl start docker
Fedora / RHEL Linux
Rimuoviamo i pacchetti che posono dare conflitto
sudo dnf remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine podman runc
Impostiamo il repository con i seguenti comandi
# rhel linux
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
# fedora
sudo dnf config-manager addrepo --from-repofile https://download.docker.com/linux/fedora/docker-ce.repo
Infine installiamo docker
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Per avviare docker
sudo systemctl enable --now docker
Avvio e confiurazione post installazione
Per testare docker usare il comando
sudo docker run hello-world
Per eseguire docker senza specificare sudo seguire la seguente procedura
# aggiungere il gruppo docker
sudo groupadd docker
# aggiungere l'utente corrente al gruppo appena creato
sudo usermod -aG docker $USER
Fare il logout e poi login. Dopo si può eseguire docker senza specificare sudo
docker run hello-world
Comandi
# Versione installata
docker version
# Informazioni sul sistema
docker info
# Aiuto per un comando
docker <comando> --help
Gestione delle immagini
# Scaricare un'immagine
docker pull ubuntu:22.04
# Elencare le immagini locali
docker images
# Cercare immagini su Docker Hub
docker search nginx
# Rimuovere un'immagine
docker rmi ubuntu:22.04
# Rimuovere tutte le immagini non utilizzate
docker image prune -a
Gestione dei container
# Avviare un container
docker run ubuntu:22.04
# Avviare in modalità interattiva
docker run -it ubuntu:22.04 bash
# Avviare in background (detached)
docker run -d nginx
# Avviare con nome personalizzato
docker run -d --name mio-nginx nginx
# Avviare con mapping delle porte (host:container)
docker run -d -p 8080:80 nginx
# Avviare con variabili d'ambiente
docker run -d -e MYSQL_ROOT_PASSWORD=secret mysql:8
# Elencare i container in esecuzione
docker ps
# Elencare tutti i container (anche fermi)
docker ps -a
# Fermare un container
docker stop mio-nginx
# Avviare un container fermo
docker start mio-nginx
# Riavviare un container
docker restart mio-nginx
# Rimuovere un container
docker rm mio-nginx
# Rimuovere un container in esecuzione (forzato)
docker rm -f mio-nginx
# Eseguire un comando in un container in esecuzione
docker exec -it mio-nginx bash
# Visualizzare i log
docker logs mio-nginx
# Seguire i log in tempo reale
docker logs -f mio-nginx
Volumi e bind mount
I volumi permettono la persistenza dei dati al di fuori del ciclo di vita del container.
# Creare un volume
docker volume create mio-volume
# Elencare i volumi
docker volume ls
# Usare un volume in un container
docker run -d -v mio-volume:/var/lib/mysql mysql:8
# Bind mount (cartella locale → container)
docker run -d -v /percorso/locale:/percorso/container nginx
# Bind mount con sintassi --mount (più esplicita)
docker run -d \
--mount type=bind,source=/percorso/locale,target=/percorso/container \
nginx
# Rimuovere un volume
docker volume rm mio-volume
# Rimuovere i volumi non utilizzati
docker volume prune
Networking
# Elencare le reti
docker network ls
# Creare una rete personalizzata
docker network create mia-rete
# Connettere un container a una rete
docker run -d --network mia-rete --name app mia-app
# Connettere un container in esecuzione a una rete
docker network connect mia-rete mio-nginx
# Disconnettere un container da una rete
docker network disconnect mia-rete mio-nginx
# Ispezionare una rete
docker network inspect mia-rete
# Rimuovere le reti non utilizzate
docker network prune
Docker Compose
Docker Compose permette di gestire applicazioni multi-container tramite un file docker-compose.yml.
Esempio base: app web + database
# docker-compose.yml
services:
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
POSTGRES_DB: myapp
volumes:
- db-data:/var/lib/postgresql/data
web:
image: nginx
ports:
- "8080:80"
depends_on:
- db
volumes:
db-data:
I comandi per la gestione docker compose sono
# Avviare tutti i servizi in background
docker compose up -d
# Avviare e ricostruire le immagini
docker compose up -d --build
# Fermare i servizi
docker compose down
# Fermare e rimuovere i volumi
docker compose down -v
# Vedere i log di tutti i servizi
docker compose logs -f
# Vedere i log di un servizio specifico
docker compose logs -f web
# Elencare i container del compose
docker compose ps
# Eseguire un comando in un servizio
docker compose exec web bash
# Scalare un servizio
docker compose up -d --scale web=3
Pulizia del sistema
# Rimuovere container fermi, immagini non taggate, reti e cache build
docker system prune
# Rimuovere anche i volumi non utilizzati
docker system prune --volumes
# Rimuovere tutto (immagini, container, volumi, reti)
docker system prune -a --volumes
# Visualizzare l'utilizzo disco di Docker
docker system df