Docker

Escludendo tutte le basi nozionistiche su docker (entrypoint, cmd, Dockerfile, etc.), riporto alcune fonti che tenere presente non fa mai male!

GESTIONE PERMESSI

Questo e’ molto importante perche’ a discapito di quello che avviene per Docker Desktop, in cui la Virtual Machine provvede automaticamente ad aggiustare i permessi in base all’utente che sta eseguendo la shell, sui classici server linux questo non avviene, e quindi ci si ritrova a dover scegliere varie strategie per gestire questa problematica.

Un articolo mooolto buono da leggere e’ il seguente:

Sempre relativamente a questo punto, vedere users map (nota anche come users nampespaces):

Logging

In Docker risulta utile capire come avviene il log in stdout o stderr del main process del container, per eventualmente aggiungere dei logs che possono tornare comodi.

Il container in genere looga in /proc/1/fd/1 e /proc/1/fd/2, mente ad esempio /dev/stdout punta a /proc/self/fd/1 e quindi potrebbe non andar bene per loggare nel processo principale.

Per dettagli leggere questo bellissimo articolo che analizza in dettaglio i file descriptors e le pipe di PHP-FPM:

https://rtfm.co.ua/en/linux-php-fpm-docker-stdout-and-stderr-no-an-applications-error-logs/.

Permissions/Users

Per la gestione dei comandi del processo principale di docker con specifici utenti possono tornare utili su-exec (alpine) e gosu (linux).

Qui un esempio con su-exec per php-fpm:

https://medium.com/@callback.insanity/forwarding-nginx-logs-to-docker-3bb6283a207.

e qui un esempio concreto su come creare un link allo stdout e stderr del main process:

https://github.com/webdevops/Dockerfile/blob/c4a5b7f22cdce0e33ac87a6e146d56549f528d43/docker/base/ubuntu-18.04/conf/bin/config.sh#L21

Generic Build

Build con overrides + kubernetes:

Named Volume

Come avere un volume comune su piu’ container nello stesso docker-compose senza bisogno di scrivere esplicitamente il path di mount in ciascun service:

Processo Principale PID 1

I container vengono eseguiti con un processo principale con ID 1.

Questo e’ importante sopratutto per quando riguarda la procedura di shut down del container.

Un punto di notevole importanza in cui questo entra in gioco e’ nella modalita’ di entrypoint che viene utilizzata (exec vs shell).

Per dettagli:

Suggerisco inoltre di guardare i vari link suggeriti in queste immagini:

Non direttamente correlato, ma molto utile:

Execute Remote SOCKET

There’s two methods:

Create/Push Docker images to private registry

See this to implement simple flow:

TOOLS

  • dive, per “navigare” dentro alle immagini

BUILD IMAGES

Per la build/gestione dell’immagine sono interessanti i seguenti strumenti:

Inoltre a titolo culturale, sapere anche come docker risolve le build con Build Kit

Code Samples:

/topics/docker/