Table of Contents
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 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
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 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 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. |
|---|
Trovare le immagini ufficiali di un progetto
Aggiornamento di un container
