Выбор среды выполнения контейнеров#
Runc и crun - среды выполнения контейнеров. Они могут использоваться взаимозаменяемо, поскольку осущетвляют спецификацию OCI. Среда crun имеет несколько преимуществ перед runc, поскольку она быстрее и требует меньше памяти. Именно она рекомендуется к использованию.
Среда выполнения контейнеров runc#
Runc - это облегченная переносимая реализация контейнерной среды выполнения Open Container Initiative (OCI). Она поддерживает пространства имен Linux, динамическую миграцию и содержит переносимые профили производительности.
Данная среда обеспечивает полную поддержку функций безопасности Linux, таких как, cgroups, seccomp и прочих. Также позволяет создавать и запускать образы и работать с OCI-совместимыми образами.
Среда выполнения контейнеров crun#
Crun - это быстрая, занимающая небольшой объем памяти, среда выполнения. Она поддерживает работу с OCI и написана на языке C. Двоичный файл crun примерно в 50 раз меньше и до двух раз быстрее чем runc. При использовании crun можно установить минимальное количество процессов при запуске контейнера. Среда выполнения crun также поддерживает OCI hooks.
Дополнительные возможности crun:
Совместное использование файлов группой контейнеров без полномочий администратора;
Управление
stdoutиstderrOCI hooks;Работа старых версий systemd с cgroup v2;
Библиотека языка С, используемая другими программами;
Расширяемость;
Переносимость.
Запуск контейнеров с помощью runc и crun#
В runc или crun контейнеры настраиваются с помощью комплектов (bundles). Bundle контейнера — это каталог, включающий файл спецификации с именем config.json и корневую файловую систему, в которую входит содержимое контейнера.
Примечание
Во всех примерах кода \<runtime> может принимать значение либо crun, либо runc.
Извлеките образ контейнера
registry.example.ru/ubi9/ubi:podman pull registry.example.ru/ubi9/ubiЭкспортируйте его в архив
slo.tar:podman export $(podman create registry.example.ru/ubi9/ubi) > slo.tarСоздайте каталог
bundle/rootfs:mkdir -p bundle/rootfs4.Извлеките архив
slo.tarв каталогbundle/rootfs:tar -C bundle/rootfs -xf rhel.tar4Создайте новый файл спецификации с именем
config.jsonдляbundle:<runtime> spec -b bundleОпция
-bуказывает каталогbundle. Значение по умолчанию - текущий каталог.Опционально: Измените настройки:
vi bundle/config.jsonСоздайте экземпляр контейнера с именем
myubiдляbundle:<runtime> create -b bundle/ myubi7Запустите контейнер
myubi:<runtime> start myubi
Примечание
Имя экземпляра контейнера должно быть уникальным на хосте. Чтобы запустить новый экземпляр контейнера, введите:
<runtime> start <container_name>
Проверка#
Выведите список контейнеров <runtime>:
<runtime> list
Пример вывода команды:
ID PID STATUS BUNDLE CREATED OWNER
myubi 0 stopped /root/bundle 2021-09-14T09:52:26.659714605Z root
Временное изменение среды выполнения контейнера#
Для изменения среды выполнения контейнера используйте команду podman run с опцией --runtime.
Извлеките образ контейнера
registry.example.ru/ubi9/ubi:podman pull registry.example.ru/ubi9/ubiИзмените среду выполнения, используя опцию
--runtime:podman run --name=myubi -dt --runtime=<runtime> ubi9 bashe4654eb4df12ac031f1d0f2657dc4ae6ff8eb0085bf114623b66cc664072e69bОпционально: Выведите список всех образов:
podman ps -aПример вывода команды:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e4654eb4df12 registry.example.com/ubi9:latest bash 4 seconds ago Up 4 seconds ago myubi
Проверка#
Убедитесь, что для среды выполнения OCI установлено значение <runtime> в контейнере myubi:
podman inspect myubi --format "{{.OCIRuntime}}"
<runtime>
Постоянное изменение среды выполнения контейнера#
Можно установить среду выполнения контейнера и ее параметры в файле конфигурации /etc/containers/containers.conf от имени пользователя с административными полномочиями или в файле конфигурации $HOME/.config/containers/containers.conf от имени пользователя без административных полномочий.
Измените среду выполнения в файле
/etc/containers/containers.conf:vim /etc/containers/containers.confПример вывода команды:
[engine] runtime = "<runtime>"Запустите контейнер с именем
myubi:podman run --name=myubi -dt ubi9 bashПример вывода команды:
Resolved "ubi9" as an alias (/etc/containers/registries.conf.d/001-rhel-shortnames.conf) Trying to pull registry.example.ru/ubi9:latest... ... Storing signatures
Проверка#
Убедитесь, что в контейнере myubi для среды выполнения OCI установлено значение <runtime>:
podman inspect myubi --format "{{.OCIRuntime}}"
Пример вывода значения:
<runtime>