====== Ambienti isolati (container) con Docker ====== apt install docker.io Al termine dell'installazione troviamo il demone **/usr/sbin/dockerd** in esecuzione. È possibile controllarlo con il servizio systemd **docker.service** e tramite il socket (sempre gestito da systemd) **docker.socket**. Il demone gira con pieni permessi root, per comandare il demone si usa il socket di comunicazione **/run/docker.sock**, che nella installazione Debian appartiene al gruppo **docker**. Quindi un utente non privilegiato può comandare Docker semplicemente entrando a far parte del gruppo. ===== Hello World ===== Per provare il funzionamento nel repository ufficiale esiste l'//immagine// denominata **hello-world**; la si installa ed esegue da **utente root**: docker run hello-world Se l'immagine non esiste sull'host locale, questa viene cercata sul repository predefinito ed eventualmente scaricata. Per vedere lo stato del demone: docker info Il numero di **container** si incrementa ad ogni esecuzione di **docker run**, anche se si esegue la stessa immagine. Il numero delle **immagini** invece si incrementa solo quando si esegue il run (oppure il **pull**, vedi avanti) di una nuova immagine. Supponiamo di voler cercare nel ropository una implementazione del server [[https://github.com/element-hq/synapse| Element Synapse - Matrix]]: docker search synapse Avendo individuato l'immagine che interessa (**matrixdotorg/synapse**), è possibile scaricarla in locale con **docker pull**: docker pull matrixdotorg/synapse Using default tag: latest latest: Pulling from matrixdotorg/synapse 38513bd72563: Pull complete 89fe90952b6b: Pull complete 0ee66acd8266: Pull complete 303fe1bfb649: Pull complete 2e812a1f3647: Pull complete 5fde11fa162a: Pull complete 6a4278efc748: Pull complete d454d1179d11: Pull complete 8c8104b4f93d: Pull complete e3b5dc22794f: Pull complete Digest: sha256:0887ad7a662f08908ab03c2dc46c66ef2c796eff65fd39dbb0ec4f39f852a826 Status: Downloaded newer image for matrixdotorg/synapse:latest docker.io/matrixdotorg/synapse:latest FIXME Verificare se l'immagine viene da [[https://hub.docker.com]]. ===== Gestione delle immagini e dei container ===== docker images docker ps -a docker start b629dea65cc0 docker stop angry_archimedes docker rm 144443902b95 docker rm agitated_darwin Ogni container viene identificato da un ID numerico oppure da un codice mnemonico formato da due parole casuali. ===== Esempio di esecuzione di un container ===== Proviamo ad eseguire un'istanza di [[https://hub.docker.com/r/matrixdotorg/synapse|Matrix Synapse]], si tratta di un servizio abbastanza complesso che richiede le seguenti risorse: * Un **file di configurazione**. * Un **database** di backend, SQLite oppure PostgreSQL. * Una **porta TCP** su cui porsi in ascolto. docker run matrixdotorg/synapse Viene visualizzato il messaggio: Config file '/data/homeserver.yaml' does not exist. You should either create a new config file by running with the `generate` argument (and then edit the resulting file before restarting) or specify the path to an existing config file with the SYNAPSE_CONFIG_PATH variable. Leggendo la [[https://hub.docker.com/r/matrixdotorg/synapse|documentazione]] si scopre che il container va creato con il parametro **generate**. È necessario inoltre definire alcune variabili d'ambiente con l'opzione **%%-e%%**, collegare un mount del filesystem al container con l'opzione **%%--mount%%**. Le opzioni **%%-it%%** servono a tenere lo STDIN collegato allocando uno pseudo-TTY. L'opzione **%%--rm%%** rimuove automaticamente il container al momento dell'uscita. docker run -it --rm \ --mount type=volume,src=synapse-data,dst=/data \ -e SYNAPSE_SERVER_NAME=my.matrix.host \ -e SYNAPSE_REPORT_STATS=yes \ matrixdotorg/synapse:latest generate ===== Risorse impegnate sull'host locale ===== ^ /var/lib/docker/containers/ | Viene crata una sottodirectory per ogni container creato. | FIXME ===== Trovare le immagini ufficiali di un progetto ===== FIXME ===== Aggiornamento di un container ===== FIXME ===== 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]]**