User Tools

Site Tools


doc:appunti:linux:sa:docker

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

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 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.

FIXME

Trovare le immagini ufficiali di un progetto

FIXME

Aggiornamento di un container

FIXME

Risorse web

doc/appunti/linux/sa/docker.txt · Last modified: by niccolo