Using containers (Docker/Podman)

Since the NeuroFedora packages are available in the Fedora repositories, they can also be used in customised containers using the Fedora base containers. The Fedora community release container images for all Fedora releases which can be obtained from standard public container image registries like Docker Hub.

These containers can be used with Docker, or Podman.

Podman is a replacement for Docker that does not require administrative access. It can be used as a drop-in replacement for Docker in a majority of cases. On a Fedora system, Podman can be installed using dnf.

sudo dnf install podman

To use Docker, please refer to the Docker documentation. Fedora also includes the Toolbox software, which allows the use of containerised command line environments. Toolbox can be installed using dnf:

sudo dnf install toolbox

You can learn more about it on the Fedora Silverblue documentation page.

Using the CompNeuro container image

In parallel with the CompNeuro lab instalation media, a container image that includes the same set of software is also provided. Where the lab image is a full operating system image that can either be used "live" or installed in a virtual machine or a computer, the container image allows us to use the same software with container technologies like Podman and Docker.

The container image can be obtained from the Fedora Container Registry.

podman pull registry.fedoraproject.org/compneuro

It can then be used interactively:

podman run -it compneuro:latest /bin/bash


# terminal in the container
[root@95b9db71272f /]#

Using the Fedora release containers interactively

Even though the CompNeuro container image includes a plethora of tools for computational neuroscience, any package from the Fedora repositories can be used in a container by using the base Fedora release containers. A simple example of using a Fedora container to use a NeuroFedora package is shown below. Here, we use the Fedora base container image, install the required package, and test that it works.

First, we pull the base Fedora container image:

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

We then run the image interactively.

podman run -it fedora:latest /bin/bash


# terminal in the container
[root@95b9db71272f /]#

This gives us a container that we can work with interactively. We can install a package here as we would on a Fedora installation, for example:

[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!

We can then run commands normally:

[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]:

Creating container images

While working interactively is quite useful, it is even more useful to create container images with specific sets of packages that can then be used and re-used regularly. For reproducible research, for example, a container image that includes all the necessary software and sources for the model, its simulation, and the analysis of the generated data is most useful.

A container image can be created using a standard Containerfile (Dockerfile for Docker). The complete reference for the Containerfile/Dockerfile can be found here.

Let us create an example container that runs this short code-snippet.

#!/usr/bin/env python3
# example Python source file
# saved in the current directory as nest-test.py
import nest

nest.version()

Our simple Containerfile looks like this:

FROM fedora:33 as fedora-33

# Install the required packages, in this case: NEST
RUN sudo dnf install python3-nest -y

COPY nest-test.py .

# Default command to run
CMD ["python", "nest-test.py"]

We can then build our container image:

ls
Containerfile  nest-test.py

podman build -f Containerfile  -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

Our image is now ready to use:

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

When run, it runs our simple 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

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 a similar way, any package from the Fedora repositories can be used in containers using dnf (not just NeuroFedora packages). Additionally, we can also include software using pip and other package managers, just as we would on a normal system.