====== 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]]**