Docker su RHL non è piu supportato. Esiste Podman
- Installiamo
- Controllare i container
- Stoppare un container
- Controlliamo il log per vedere gli errori
- Modifichiamo un file su un container.
- Aprima una porta dal container all’host
- Creiamo un commit
Podman, sempre di Red Hat, è considerato il diretto successore e, facendo a meno di un demone centrale e dei privilegi di root, è in grado di allontanare molte preoccupazioni sulla sicurezza del suo predecessore. Per il resto, i due strumenti sono simili, anche se Podman deve ancora fare i conti con alcuni bug.
Con questa linea guida provo a configurare docker per essere utilizzato su una macchina virtuale. Una risorsa interessante con buona documentazione è Rootless Container

Installiamo
Prima installazioze quella di Docker. Installando docker viene installao Podman. Possiamo seguire la guida di oracle per l’installazione
Con o senza: cgroups V2 vs tmpfs
Per capire cosa sono iniziamo a leggere l’articolo Introduzione ai cgroups, perchè è importante capire quale metodo viene utilizzato sulla macchina scelta. Infatti una nota di RH dice che “Rootless podman user cannot run…” e quindi a differenza di come si gestisce in caso di non utilizzo dei Cgroup, se questi sono abilitati ed il container lo richiede perchè ha dei processi amministrativi, dobbiamo eseguire l’installazione come root. L’articolo rootless Podman di Matthew Heon lo spiega in maniera esaustiva.
L’errore
Lanciando una pull da utente normale si ottiene il seguente errore
Error: copying system image from manifest list: writing blob: adding layer with blob "sha256:faef57eae888cbe4a5613eca6741b5e48d768b83f6088858aee9a5a2834f8151": processing tar file(potentially insufficient UIDs or GIDs available in user namespace (requested 0:42 for /etc/gshadow): Check /etc/subuid and /etc/subgid if configured locally and run podman-system-migrate: lchown /etc/gshadow: invalid argument): exit status 1
e la soluzione
Alla fine ho eseguito due passaggi ed il risultato è andato a buon fine. Non so, se sarebbe bastato il secondo passaggio.
- Ho inserito all’interno dei file
subuidesubgiduna linea relativa al mio utente, con i valori come i seguenti in base all’id. Apro quindi il file e con VI inserisco i valori.
solo con questo passaggio il pull dava comunque errore.vi /etc/subuid ##Sono in VI sysdatadmin:100000:65536 sysdat:165536:65536 casalegno:122720:65536 - Ho quindi ho lanciato il comando di migrazione ed ho testato il pull con Alpine
a questo punto il pull ha fatto il suo lavoro.podman system migrate podman pull alpine
I Croups semplicemente servono a gestire le risorse della macchina (CPU, memoria, network I/O, disk I/O, ecc) e a profilare la loro allocazione ai processi in esecuzione. Per visionare quale tipologia di Cgroups è attivo posso scoprirlo lanciando il comando
stat -c %T -f /sys/fs/cgroup
Controllare i container

Per controllare quali container sono in esecuzione, possiamo utilizzare il seguente comando
docker container list
docker ps
Stoppare un container
Per fermare un container usiamo il comando stop per eliminarlo il comando rm
podman container stop <name/id>
podman rm <name/id>
Controlliamo il log per vedere gli errori
Per controllare gli errori, Podman contiene un comando interno che permette di vedere i singoli errori direttamente da ogni container:
podman logs <container>
Modifichiamo un file su un container.
All’interno di un docker, difficilmente troviamo un editor di testo per poter modificare dei file di configurazione. Se dobbiamo farlo, abbiamo due strade da seguire: diventare root ed installare l’editor, esportare il file modificarlo e reimportalo.
Accediamo alla bash come root
Se il container è in esecuzione, possiamo accedere alla bash del container come utente di applicazione. Possiamo pero farlo anche come utente amministratore. Nel secondo caso abbiamo tutti i diritti per fare qualsiasi operazione.
podman exec -it <containerID> bash
podman exec -u 0 -it <containerID> bash ##con l'opzione -u 0 accediamo come root
Import/export del file
Per non alterare il peso e le caratteristiche del container, possiamo scaricare, modificare e ricaricare il file cui siamo interessati. Per copiare il file dal container alla posizione in cui siamo
podman container cp <containerId>:/etc/mysql/my.cnf container-my.cnf
Una volta modificato il file, possiamo ricopiarlo nella cartella del container
podman container cp container-my.cnf <containerId>ysl:/etc/mysql/my.cnf
Aprima una porta dal container all’host
Quando creo un container, se sulla stessa macchina girano piu container, devo cambiare la porta di connessione cosi da poter accedere esattamente a quel container. Per farlo devo dichiarare la porta alla quale il client fa riferimento (ex 10000) e la porta che il server si aspetta (ex 3306):
podman create .... -p 10000:3306
Se SELinux è disabilitato non ci sono blocchi per arrivare alla macchina
Creiamo un commit
Creare un commit significa creare una immagine del contenitore che indichiamo, da poterla cosi utilizzare come base, per creare altri contenitori.
podman commit <containeresistente> <nuovaimage>
il riavvio di un container è identico all’avvio classico semplicemente c’è il cambio di immagine dalla quale partire.