Использование контейнеров (Docker/Podman)

Поскольку пакеты NeuroFedora доступны в репозиториях Fedora, их также можно использовать в настроенных контейнерах на основе базовых контейнеров Fedora. Сообщество Fedora выпускает образы контейнеров для всех выпусков Fedora, которые можно получить из стандартных публичных реестров образов контейнеров, таких как Docker Hub.

Эти контейнеры можно использовать с Docker или Podman.

Podman — это замена Docker, не требующая административного доступа. В большинстве случаев его можно использовать как прямую замену Docker. В системе Fedora Podman можно установить с помощью dnf.

sudo dnf install podman

Чтобы использовать Docker, обратитесь к документации Docker. Fedora также включает программное обеспечение Toolbox, которое позволяет использовать контейнеризованные среды командной строки. Toolbox можно установить с помощью dnf:

sudo dnf install toolbox

Вы можете узнать больше о нём на странице документации Fedora Silverblue.

Интерактивное использование контейнеров выпусков Fedora

Хотя образ контейнера CompNeuro включает множество инструментов для вычислительной нейробиологии, любой пакет из репозиториев Fedora можно использовать в контейнере, используя базовые контейнеры выпусков Fedora. Простой пример использования контейнера Fedora для работы с пакетом NeuroFedora показан ниже. Здесь мы используем базовый образ контейнера Fedora, устанавливаем требуемый пакет и проверяем, что он работает.

Сначала мы загружаем базовый образ контейнера 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

Затем мы запускаем образ в интерактивном режиме.

podman run -it fedora:latest /bin/bash


# терминал в контейнере
[root@95b9db71272f /]#

Это даёт нам контейнер, с которым мы можем работать в интерактивном режиме. Здесь мы можем установить пакет так же, как и в установке Fedora, например:

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

Затем мы можем выполнять команды как обычно:

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

Создание образов контейнеров

Хотя интерактивная работа довольно полезна, ещё полезнее создавать образы контейнеров с определёнными наборами пакетов, которые затем можно регулярно использовать и переиспользовать. Для воспроизводимых исследований, например, наиболее полезен образ контейнера, включающий всё необходимое программное обеспечение и исходные данные для модели, её симуляции и анализа сгенерированных данных.

Образ контейнера можно создать с помощью стандартного Containerfile (Dockerfile для Docker). Полный справочник по Containerfile/Dockerfile можно найти здесь.

Давайте создадим пример контейнера, который запускает этот короткий фрагмент кода.

#!/usr/bin/env python3
# пример исходного файла Python
# сохранён в текущем каталоге как nest-test.py
import nest

nest.version()

Наш простой Containerfile выглядит так:

FROM fedora:33 as fedora-33

# Установить требуемые пакеты, в данном случае: NEST
RUN sudo dnf install python3-nest -y

COPY nest-test.py .

# Команда по умолчанию для запуска
CMD ["python", "nest-test.py"]

Затем мы можем собрать наш образ контейнера:

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

Наш образ теперь готов к использованию:

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

При запуске он выполняет наш простой скрипт:

$ 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.

Аналогичным образом любой пакет из репозиториев Fedora можно использовать в контейнерах с помощью dnf (не только пакеты NeuroFedora). Кроме того, мы также можем включать программное обеспечение с помощью pip и других менеджеров пакетов, точно так же, как на обычной системе.