Container verwenden (Docker/Podman)

Da die NeuroFedora-Pakete in den Fedora-Paketquellen verfügbar sind, können sie auch in benutzerdefinierten Containern verwendet werden, die auf den Fedora-Basiscontainern basieren. Die Fedora-Community veröffentlicht Container-Abbilder für alle Fedora-Versionen, die von gängigen öffentlichen Container-Abbild-Registries wie z.B. Docker Hub bezogen werden können.

Diese Container können mit Docker oder Podman verwendet werden.

Podman ist ein Docker-Ersatz, der keine Administratorrechte benötigt. In den meisten Fällen kann es als direkter Ersatz für Docker verwendet werden. Auf einem Fedora-System lässt sich Podman mit dnf installieren.

sudo dnf install podman

Informationen zur Verwendung von Docker finden Sie in der Docker-Dokumentation. Fedora enthält außerdem die Software Toolbox, die die Nutzung containerisierter Befehlszeilenumgebungen ermöglicht. Toolbox kann mit dnf installiert werden:

sudo dnf install toolbox

Auf der Dokumentationsseite zu Fedora Silverblue erfahren Sie mehr darüber.

Interaktive Nutzung der Fedora-Release-Container

Obwohl das CompNeuro-Container-Abbild eine Vielzahl von Werkzeugen für die Computerneurowissenschaften enthält, kann jedes Paket aus den Fedora-Paketquellen mithilfe der Fedora-Basis-Release-Container in einem Container verwendet werden. Ein einfaches Beispiel für die Verwendung eines NeuroFedora-Pakets in einem Fedora-Container ist unten dargestellt. Hier verwenden wir das Fedora-Basis-Container-Abbild, installieren das benötigte Paket und testen dessen Funktion.

Zuerst holen wir uns das Basis-Container-Abbild von Fedora:

podman pull fedora:latest

Resolved short name "fedora" to a recorded short-name alias (origin: /etc/containers/registries.conf.d/shortnames.conf)
Trying to pull registry.fedoraproject.org/fedora:latest...
Getting image source signatures
Copying blob 8fde7942e775 [--------------------------------------] 0.0b / 0.0b
Copying config 79fd58dc76 done
Writing manifest to image destination
Storing signatures
79fd58dc76113dac76a120f22cadecc3b2d1794b414f90ea368cf66096700053

Wir führen dann das Abbild interaktiv aus.

podman run -it fedora:latest /bin/bash


# Terminal im Container
[root@95b9db71272f /]#

Dadurch erhalten wir einen Container, mit dem wir interaktiv arbeiten können. Wir können hier beispielsweise ein Paket installieren, wie wir es auch auf einer Fedora-Installation tun würden:

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

Last metadata expiration check: 0:06:14 ago on Wed Jan  6 10:41:28 2021.
Dependencies resolved.
================================================================================
 Package                     Arch   Version                       Repo     Size
 ================================================================================
 Installing:
  python3-nest                x86_64 2.20.1-5.fc33                 updates 518 k
  Installing dependencies:
....
....
Complete!

Wir können dann normale Befehle ausführen:

[root@95b9db71272f /]# ipython
Python 3.9.0 (default, Oct  6 2020, 00:00:00)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.18.1 -- An enhanced Interactive Python. Type '?' for help.

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_] : Creating default RNGs
[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_] : Creating new default global RNG

Jan 06 11:10:43 CopyFile [Error]:
    Could not open source file.
Error in nest resource file: /BadIO in CopyFile_

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

 Version: nest-2.20.1
 Built: Aug 10 2020 00:00:00

 This program is provided AS IS and comes with
 NO WARRANTY. See the file LICENSE for details.

 Problems or suggestions?
   Visit https://www.nest-simulator.org

 Type 'nest.help()' to find out more about NEST.


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

In [3]:

Container-Abbilder erstellen

Interaktives Arbeiten ist zwar sehr nützlich, aber noch sinnvoller ist es, Container-Abbilder mit spezifischen Paketsätzen zu erstellen, die dann regelmäßig verwendet und wiederverwendet werden können. Für reproduzierbare Forschung ist beispielsweise ein Container-Abbild, das die gesamte notwendige Software und alle Quellcodes für das Modell, seine Simulation und die Analyse der generierten Daten enthält, am nützlichsten.

Ein Container-Abbild kann mithilfe einer Standard-Container-Datei (Docker-Datei für Docker) erstellt werden. Die vollständige Referenz für die Container-Datei/Docker-Datei finden Sie hier.

Wir erstellen einen Beispielcontainer, der diesen kurzen Codeschnipsel ausführt.

#!/usr/bin/env python3
# Beispielhafte Python-Quelldatei, gespeichert
# im aktuellen Verzeichnis als nest-test.py
import nest

nest.version()

Unsere einfache Container-Datei sieht folgendermaßen aus:

FROM fedora:33 as fedora-33

# Erforderliche Pakete installieren, in diesem Fall: NEST
RUN sudo dnf install python3-nest -y

COPY nest-test.py .

# Auszuführender Standardbefehl
CMD ["python", "nest-test.py"]

Dann können wir unser Container-Abbild bauen:

ls
Container-Datei  nest-test.py

podman build -f Container-Datei  -t neurofedora/nest-test

STEP 1: FROM fedora:33 AS fedora-33
STEP 2: RUN sudo dnf install python3-nest -y
Fedora 33 openh264 (From Cisco) - x86_64        1.9 kB/s | 2.5 kB     00:01
....
Complete!
--> 2efea29a8db
STEP 3: COPY nest-test.py .
--> b23a5c6f90d
STEP 4: CMD ["python3", "nest-test.py"]
STEP 5: COMMIT neurofedora/nest-test
--> da9240e572b
da9240e572b4c08ac010001cbc15cb81ae879c63dca70afa4b3e6f313254b218

Unser Abbild ist nun fertig zur Verwendung:

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

Bei der Ausführung wird unser einfaches Skript ausgeführt:

$ 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

Jan 06 11:36:36 CopyFile [Error]:
    Could not open source file.
Error in nest resource file: /BadIO in CopyFile_

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

 Version: nest-2.20.1
 Built: Aug 10 2020 00:00:00

 This program is provided AS IS and comes with
 NO WARRANTY. See the file LICENSE for details.

 Problems or suggestions?
   Visit https://www.nest-simulator.org

 Type 'nest.help()' to find out more about NEST.

In ähnlicher Weise können beliebige Pakete aus den Fedora-Paketquellen in Containern mit dnf verwendet werden (nicht nur NeuroFedora-Pakete). Darüber hinaus können wir Software auch mit pip und anderen Paketmanagern einbinden, genau wie auf einem normalen System.