Utilizzo di contenitori (Docker/Podman)

Poiché i pacchetti NeuroFedora sono disponibili nei repository Fedora, possono essere utilizzati anche in container personalizzati utilizzando i container base di Fedora. La community Fedora rilascia immagini container per tutte le release di Fedora, che possono essere scaricate da registri di immagini container pubblici standard come il link: https://hub.docker.com/_/fedora [Docker Hub].

Questi contenitori possono essere utilizzati con il link: Docker o il link: Podman.

Podman è un sostituto di Docker che non richiede accesso amministrativo. Può essere utilizzato come sostituto di Docker nella maggior parte dei casi. Su un sistema Fedora, Podman può essere installato utilizzando dnf.

sudo dnf install podman

Per utilizzare Docker, fare riferimento al link: Docker documentation. Fedora include anche il link: Toolbox, che consente l’utilizzo di ambienti a riga di comando containerizzati. Toolbox può essere installato utilizzando dnf:

sudo dnf install toolbox

Per saperne di più clicca sul link: pagina di documentazione di Fedora Silverblue.

Utilizzo dell’immagine contenitore CompNeuro

Parallelamente al link: supporto di installazione del laboratorio CompNeuro, viene fornita anche un’immagine container che include lo stesso set di software. L’immagine del laboratorio è un’immagine completa del sistema operativo, utilizzabile sia in modalità "live" che installata su una macchina virtuale o un computer, e ci permette di utilizzare lo stesso software con tecnologie container come Podman e Docker.

L’immagine del contenitore può essere ottenuta dal link: Fedora Container Registry.

podman pull registry.fedoraproject.org/compneuro

Può quindi essere utilizzato in modo interattivo:

podman run -it compneuro:latest /bin/bash


# terminale nel contenitore
[root@95b9db71272f /]#

Utilizzo interattivo dei contenitori di rilascio di Fedora

Sebbene l’immagine del contenitore CompNeuro includa una vasta gamma di strumenti per le neuroscienze computazionali, qualsiasi pacchetto dei repository Fedora può essere utilizzato in un contenitore utilizzando i contenitori base della release Fedora. Di seguito è riportato un semplice esempio di utilizzo di un contenitore Fedora per un pacchetto NeuroFedora. In questo caso, utilizziamo l’immagine del contenitore base Fedora, installiamo il pacchetto richiesto e ne verifichiamo il funzionamento.

Per prima cosa, estraiamo l’immagine base del contenitore Fedora:

podman pull fedora:latest

Risolto il nome breve "fedora" con un alias registrato (origine: /etc/containers/registries.conf.d/shortnames.conf)
Tentativo di estrazione di registry.fedoraproject.org/fedora:latest...
Ottenimento delle firme sorgente dell'immagine
Copia del blob 8fde7942e775 [--------------------------------------] 0.0b / 0.0b
Copia della configurazione 79fd58dc76 completata
Scrittura del manifesto nella destinazione dell'immagine
Memorizzazione delle firme
79fd58dc76113dac76a120f22cadecc3b2d1794b414f90ea368cf66096700053

Quindi eseguiamo l’immagine in modo interattivo.

podman run -it fedora:latest /bin/bash


# terminale nel contenitore
[root@95b9db71272f /]#

Questo ci fornisce un contenitore con cui possiamo lavorare in modo interattivo. Possiamo installare un pacchetto qui come faremmo su un’installazione di Fedora, ad esempio:

[root@95b9db71272f /]# sudo dnf install python3-nest

Ultimo controllo di scadenza dei metadati: 0:06:14 fa, mercoledì 6 gennaio 2021 alle 10:41:28.
Dipendenze risolte.
====================================================================================
Pacchetto Arch Versione Repo Dimensione
===========================================================================================
Installazione:
python3-nest x86_64 2.20.1-5.fc33 aggiornamenti 518 k
Installazione dipendenze:
....
....
Completato!

Possiamo quindi eseguire i comandi normalmente:

[root@95b9db71272f /]# ipython
Python 3.9.0 (predefinito, 6 ott 2020, 00:00:00)
Digitare 'copyright', 'credits' o 'license' per maggiori informazioni
IPython 7.18.1 -- Un Python interattivo migliorato. Digitare '?' per assistenza.

In [1]: import nest
[INFO] [2021.1.6 11:10:43 /builddir/build/BUILD/nest-simulator-2.20.1/nest-simulator-2.20.1/nestkernel/rng_manager.cpp:217 @ Network::create_rngs_] : Creazione di RNG predefiniti
[INFO] [2021.1.6 11:10:43 /builddir/build/BUILD/nest-simulator-2.20.1/nest-simulator-2.20.1/nestkernel/rng_manager.cpp:260 @ Network::create_grng_] : Creazione di un nuovo RNG globale predefinito

06 gen 11:10:43 CopyFile [Errore]:
Impossibile aprire il file sorgente.
Errore nel file di risorse nest: /BadIO in CopyFile_

              -- N E S T --
  Copyright (C) 2004 The NEST Initiative

 Versione: nest-2.20.1
Built: 10 agosto 2020 00:00:00

 Questo programma viene fornito COSÌ COM'È e SENZA ALCUNA GARANZIA.
 Consultare il file LICENZA per i dettagli.

 Problemi o suggerimenti?
   Visita https://www.nest-simulator.org

 Digita 'nest.help()' per saperne di più su NEST.


In [2]: nest.version()
Out[2]: 'NEST nest-2.20.1'

In [3]:

Creazione di immagini del contenitore

Sebbene lavorare in modo interattivo sia piuttosto utile, è ancora più utile creare immagini contenitore con set specifici di pacchetti che possano essere utilizzati e riutilizzati regolarmente. Ad esempio, per la ricerca riproducibile, un’immagine contenitore che includa tutto il software e le fonti necessarie per il modello, la sua simulazione e l’analisi dei dati generati è estremamente utile.

Un’immagine container può essere creata utilizzando un Containerfile standard (Dockerfile per Docker). Il riferimento completo per Containerfile/Dockerfile è disponibile al link: https://docs.docker.com/engine/reference/builder/ [qui].

Creiamo un contenitore di esempio che esegue questo breve frammento di codice.

#!/usr/bin/env python3
# esempio di file sorgente Python
# salvato nella directory corrente come nest-test.py
import nest

nest.version()

Il nostro semplice Containerfile si presenta così:

DA fedora:33 come fedora-33

# Installa i pacchetti richiesti, in questo caso: NEST
RUN sudo dnf install python3-nest -y

COPY nest-test.py .

# Comando predefinito da eseguire
CMD ["python", "nest-test.py"]

Possiamo quindi creare la nostra immagine contenitore:

ls
File contenitore  nest-test.py

podman build -f Containerfile  -t neurofedora/nest-test

PASSAGGIO 1: DA fedora:33 COME fedora-33
PASSAGGIO 2: ESEGUI sudo dnf install python3-nest -y
Fedora 33 openh264 (From Cisco) - x86_64        1.9 kB/s | 2.5 kB     00:01
....
Completato!
--> 2efea29a8db
PASSAGGIO 3: COPIA nest-test.py .
--> b23a5c6f90d
PASSAGGIO 4: CMD ["python3", "nest-test.py"]
PASSAGGIO 5: COMMIT neurofedora/nest-test
--> da9240e572b
da9240e572b4c08ac010001cbc15cb81ae879c63dca70afa4b3e6f313254b218

La nostra immagine è ora pronta per essere utilizzata:

$ podman image list
REPOSITORY                         TAG              IMAGE ID      CREATED         SIZE
localhost/neurofedora/nest-test    latest           da9240e572b4  17 seconds ago  911 MB

Una volta eseguito, esegue il nostro semplice script:

$ podman run neurofedora/nest-test
[INFO] [2021.1.6 11:36:36 /builddir/build/BUILD/nest-simulator-2.20.1/nest-simulator-2.20.1/nestkernel/rng_manager.cpp:217 @ Network::create_rngs_] : Creating default RNGs
[INFO] [2021.1.6 11:36:36 /builddir/build/BUILD/nest-simulator-2.20.1/nest-simulator-2.20.1/nestkernel/rng_manager.cpp:260 @ Network::create_grng_] : Creating new default global RNG

06 gen 11:36:36 CopyFile [Errore]:
    Impossibile aprire il file sorgente.
Errore nel file di risorse nest: /BadIO in CopyFile_

              -- N E S T --
  Copyright (C) 2004 The NEST Initiative

 Versione: nest-2.20.1
Built: 10 agosto 2020 00:00:00

 Questo programma viene fornito COSÌ COM'È e SENZA ALCUNA GARANZIA.
 Consultare il file LICENZA per i dettagli.

 Problemi o suggerimenti?
   Visita https://www.nest-simulator.org

 Digita 'nest.help()' per saperne di più su NEST.

Allo stesso modo, qualsiasi pacchetto dai repository Fedora può essere utilizzato nei contenitori usando dnf (non solo i pacchetti NeuroFedora). Inoltre, possiamo includere software usando pip e altri gestori di pacchetti, proprio come faremmo su un sistema normale.