Containers

Il Container è una nuova soluzione per l'esecuzione di un'applicazione.
Mentre la classica applicazione va installata su un server insieme a tutti i pacchetti relativi alle dipendenze con il sistema operativo sottostante, un container è un pacchetto che contiene tutto come una smarthpone application scaricabile dall'App Store di un cellulare.
Per lanciare un container occorre eseguirlo dal contianer image che si trova in un container registry che può essere paragonata all'App Store di un cellulare che ospita le App. Quindi un container è l'istanza eseguibile di una container image.
Un container gira su un container engine installato sul sistema operativo. 
Con Rhel8 è stato sostituito Docker (container stack di default fino a Rhel7) con CRI-o che contiene tre tool per gestire i container:
- podman: stop, start e gestione dei containers  (è il tool principale)
- buildah: usato per creare custon image container
- skopeo: usato per gestire e testare container image

I Containers utilizzano le funzionalità offerte dal kernel Linux come:
- Namespace per isolare i processi. Si distinguono in 
                                                            - user namaspace
                                                            - mount 
                                                            - process
                                                            - network
                                                            - interprocess comunication
- Control groups per la gestione delle risorse
- SELinux per la sicurezza

I CRI-o container che girano su Rhel8 hanno le seguenti caratteristiche:
- i container girano di default come utenti non root 
- si utilizza il tool podman 
- gli user eseguono i propri container e mentre fannio ciò, i contaner girano in user namespace e sono strettamente isolati e non accessibili da altri user
- i container non necessitano di demoni e girano su Cri-o container runtime.
Il benificio di usare podman è che il container può essere avviato da un utente non root e quindi il container è più sicuro ma il container non può accedere a componenti del sistema operativo che richiedono le grant di root. Ad esempio non può avere un indirizzo IP, perchè occorrono i privilegi di root per assegnare in indirizzo Ip, e può collegarsi solo a porte non privilegiate.
Inoltre se il container deve accedere ad uno storage presente sull'host può usare solo la direcotry di cui l'user (che esegue il container) è proprietario.

In questo post vedremo container standalone che girano su un solo host quindi se l'host è down non gira più nessun container.
Quando si vuole garantire invece:
- Disponibilità, assicurando che l'interruzione di un host non comporti l'indisponibilità del container. 
- Connessione a un'ampia gamma di tipi di memoria esterna.
 - Accesso sicuro ai dati sensibili.
 - Disaccoppiamento tra i dati specifici dell'app e i dati del codice all'interno dell'ambiente del contenitore.
 - Scalabilità, ossia quando il carico di lavoro aumenta, aggiungere facilmente ulteriori istanze.
 In tutti questi casi si consiglia di utilizzare un orchestratore come Kubernates e OpenShift.

# yum module install container-tools
# podman run ngnix
Il container è running in foreign e per stopparlo editare "Crtl-c"

Se si vuole eseguire un container in "detached mode" cioè in background (come un deamon in background) eseguire il comando:
# podman run -d nginx

Esiste anche la modalità TTY 
# podman run -ti nginx
Successivamente accedere a TTY e tutti i comandi saranno svolti direttamente nel container invece che nel sistema operativo dell'host.
Usare exit per uscire dalla modalità TTY ma potrebbe anche stoppare il container.
Ctrl-p, Ctrl-q per uscire dalla modalità TTY e il container gira ancora in background.

# podman ps                      Visaulizza i container runnig
podman ps -a                 Visualizza i container che erano attivi
# podman stop <name>   Stoppare un container: dove <name> è il nome preso dal comando precedente.

I file del container sono copiati all'interno della home directory dell'user che esegue il container e precisamente nella cartella
~/.local/share/containers/storage

Le immagini dei contanier sono prese da container registry che sono specificati nel file di configurazione /etc/containers/registries.conf
Quando un utente avvia un container viene creato un file cd......

# podman info
server per visualizzare quali registri stiamo usando, più altre informazioni sull'ambiente che si sta usando.

# podman image
fornisce la lista di tutte le immagini che sono disponibili in locale.
# podman inspect <name image> 
per visualizzare il contenuto dell'immagine scaricata in locale.
La riga più importate è relativa a "Cmd" che dice il comando eseguito di default quando è avviato il container. Il container è solo un'altro modo per avviare una applicazione e la linea Cmd dice qual'è il tipo di applicazione.
# skopeo inspect <name image>  
visaulizza il contenuto della immagine direttamente dal registro senza dover scaricare prima l'immagine.

Ogni volta che si avvia un container, una immagine è scaricata e salvata in locale.  Pertanto occorre fare attenzione allo spazio occupato.
Per rimuovere un container image eseguire il comando
# podman rmi


Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database