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 [2025/11/06 10:56] – [Esempio di esecuzione di un container] niccolodoc:appunti:linux:sa:docker [2026/07/29 12:40] (current) – [Comandi utili] niccolo
Line 58: Line 58:
  
 FIXME Verificare se l'immagine viene da [[https://hub.docker.com]]. FIXME Verificare se l'immagine viene da [[https://hub.docker.com]].
 +
 +===== Backup di una immagine =====
 +
 +Dopo aver fatto il pull può essere desiderabile fare un archivio di tutto il software, per eventuali restore futuri. Si verifica quali immagini sono state scaricate:
 +
 +<code>
 +docker images
 +REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
 +metabase/metabase   latest    9b711a0c3625   10 hours ago   966MB
 +</code>
 +
 +Quindi si esegue il backup in un file tar:
 +
 +<code>
 +docker save -o backup_applicazione_<IMAGE_ID>.tar <IMAGE_ID_o_NOME_IMMAGINE>
 +</code>
 +
 +Conviene includere l'IMAGE_ID perché quello identifica l'immagine stessa piuttosto che il nome. Infatti durante il restore una eventuale immagine con lo stesso ID viene sovrascritta. Il restore del file archivio si fa con:
 +
 +<code>
 +docker load -i backup_applicazione_<IMAGE_ID>.tar
 +</code>
 +
 +Se in Docker abbiamo una immagine con lo stesso nome (ma ID diverso, ad esempio a seguito di un aggiornamento che poi si è corrotto) è possibile cambiarle di nome prima di fare il restore della vecchia immagine:
 +
 +<code>
 +docker tag <ID_IMMAGINE_CORROTTA> nome_applicazione:corrotta
 +</code>
  
 ===== Gestione delle immagini e dei container ===== ===== Gestione delle immagini e dei container =====
Line 68: 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 115: 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.1762422980.txt.gz · Last modified: by niccolo