User Tools

Site Tools


doc:appunti:linux:sa:docker

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:docker [2026/06/10 10:26] – [Gestione delle immagini e dei container] niccolodoc:appunti:linux:sa:docker [2026/07/29 12:40] (current) – [Comandi utili] niccolo
Line 96: Line 96:
 docker rm 144443902b95 docker rm 144443902b95
 docker rm agitated_darwin docker rm agitated_darwin
 +
 +# Avvia l'immagine automaticamente al boot:
 +docker update --restart unless-stopped 144443902b95
 </code> </code>
  
Line 143: Line 146:
  
 FIXME FIXME
 +
 +===== Aggiornamento di una immagine =====
 +
 +Le immagini sono le basi (copie statiche) da cui si creano i container (processi in esecuzione).
 +
 +Si verifica quale immagine è stata scaricata in precedenza:
 +
 +<code>
 +docker images
 +REPOSITORY          TAG       IMAGE ID       CREATED       SIZE
 +metabase/metabase   latest    9b711a0c3625   6 weeks ago   966MB
 +</code>
 +
 +Quindi si scarica la nuova immagine Docker; si esegue lo stesso comando **pull** chiedendo la stessa immagine //latest//:
 +
 +<code>
 +docker pull metabase/metabase:latest
 +</code>
 +
 +Se effettivamente esiste l'aggiornamento, questo viene scaricato e nell'host locale il tag //latest// verrà spostato sulla nuova immagine:
 +
 +<code>
 +docker images
 +REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
 +metabase/metabase   latest    d2986236b1e1   17 hours ago   1.03GB
 +metabase/metabase   <none>    9b711a0c3625   6 weeks ago    966MB
 +</code>
 +
 +È possibile assegnare un tag alla vecchia immagine, ad esempio il numero di versione del software contenuto:
 +
 +<code>
 +docker tag 9b711a0c3625 metabase/metabase:0.62.1.2
 +</code>
 +
 +<code>
 +docker images
 +REPOSITORY          TAG        IMAGE ID       CREATED       SIZE
 +metabase/metabase   latest     d2986236b1e1   17 hours ago  1.03GB
 +metabase/metabase   0.62.1.2   9b711a0c3625   6 weeks ago   966MB
 +</code>
 +
 +===== Creazione di un nuovo container =====
 +
 +È possibile creare un nuovo container da una stessa immagine, ma si deve provvedere a:
 +
 +  * Mappare eventuali porte TCP/IP su porte diverse
 +  * Assegnare un nome diverso
 +  * Eventualmente mappare volumi diversi
 +
 +In questo esempio l'immagine metabase non usa volumi, quindi è sufficiente specificare un mapping opportuno della porta 3000 e assegnare un nome diverso al container:
 +
 +<code>
 +docker run -d -p 3001:3000 \
 +  --name metabase_63 \
 +  metabase/metabase:latest
 +</code>
 +
 +Anche questo container può essere modificato per l'auto-restart (a meno che non sia stato fermato manualmente):
 +
 +<code>
 +docker update --restart unless-stopped metabase_63
 +</code>
 +
 +
 +===== Comandi utili =====
 +
 +Vede i container esistenti, anche quelli fermi:
 +
 +<code>
 +docker ps -a
 +</code>
 +
 +Rinomina un container:
 +
 +<code>
 +docker rename metabase metabase-old
 +</code>
 +
 +Vede i volumi creati:
 +
 +<code>
 +docker volume ls
 +DRIVER    VOLUME NAME
 +</code>
 +
 +Vede le reti Docker create per collegare container:
 +
 +<code>
 +docker network ls
 +NETWORK ID     NAME      DRIVER    SCOPE
 +6dec08ea444c   bridge    bridge    local
 +23c599ebc5b7   host      host      local
 +3d834c952653   none      null      local
 +</code>
 +
 +Verifica quali //mounts// usa un container:
 +
 +<code>
 +docker inspect metabase --format '{{.Mounts}}'
 +[]
 +</code>
 +
 +Nell'esempio sopra il container non monta niente dalla macchina ospite, quindi è possibile creare una nuova istanza senza il rischio di conflitti. Nei //mounts// si potrebbero eventualmente trovare volumi veri e propri oppure punti di montaggio di tipo //bind//:
 +
 +<code>
 + {
 +    "Type": "volume",
 +    "Name": "metabase-data",
 +    "Source": "/var/lib/docker/volumes/metabase-data/_data",
 +    "Destination": "/metabase-data1"
 +  }
 +</code>
 +
 +<code>
 +  {
 +    "Type": "bind",
 +    "Source": "/srv/metabase",
 +    "Destination": "/metabase-data2"
 +  }
 +</code>
 +
 +In tal caso va verificato che i due container in esecuzione contemporaneamente non creino problemi a scrivere sugli stessi volumi.
 +
 +Esegue un comando shell in un container, ad esempio il comando ''ls -l /metabase.db/'' nel container metabase:
 +
 +<code>
 +docker exec metabase ls -l /metabase.db/
 +</code>
 +
 +Copia una directory intera dal container al filesystem della macchina ospitante:
 +
 +<code>
 +docker cp metabase:/metabase.db/ ./metabase-backup.db
 +</code>
 +
 +Copia due file dal filesystem locale veso il container:
 +
 +<code>
 +docker cp ./metabase-backup.db/metabase.db.mv.db    metabase:/metabase.db/
 +docker cp ./metabase-backup.db/metabase.db.trace.db metabase:/metabase.db/
 +</code>
 +
 +Esegue una shell interattiva nel container:
 +
 +<code>
 +docker exec -it metabase sh
 +</code>
  
 ===== Risorse web ===== ===== Risorse web =====
  
   * **[[https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-debian-10|How To Install and Use Docker on Debian 10]]**   * **[[https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-debian-10|How To Install and Use Docker on Debian 10]]**
doc/appunti/linux/sa/docker.1781079964.txt.gz · Last modified: by niccolo