Red Hat Training

A Red Hat training course is available for RHEL 8

11.2. runc

El tiempo de ejecución de contenedores "runC" es una implementación ligera y portátil de la especificación de tiempo de ejecución de contenedores de la Iniciativa de Contenedores Abiertos (OCI). El runC reúne muchas de las características de bajo nivel que hacen posible la ejecución de contenedores. Comparte mucho código de bajo nivel con Docker, pero no depende de ninguno de los componentes de la plataforma Docker.

runc es compatible con los espacios de nombres de Linux, la migración en vivo, y tiene perfiles de rendimiento portátiles. También proporciona soporte completo para las características de seguridad de Linux como SELinux, grupos de control (cgroups), seccomp, y otros. Puedes construir y ejecutar imágenes con runc, o puedes ejecutar imágenes compatibles con OCI con runc.

11.2.1. Ejecución de contenedores con runc

Con runc, los contenedores se configuran utilizando paquetes. Un paquete para un contenedor es un directorio que incluye un archivo de especificación llamado config.json y un sistema de archivos raíz. El sistema de archivos raíz contiene el contenido del contenedor.

Para crear un paquete, ejecute:

$ runc spec

Este comando crea un archivo config.json que sólo contiene una estructura básica que tendrá que editar. Lo más importante es que tendrás que cambiar el parámetro args para identificar el ejecutable a ejecutar. Por defecto, args está configurado como sh.

    "args": [
      "sh"
    ],

Como ejemplo, puede descargar la imagen base de Red Hat Enterprise Linux (ubi8/ubi) usando podman y luego exportarla, crear un nuevo paquete para ella con runc, y editar el archivo config.json para que apunte a esa imagen. Luego puede crear la imagen del contenedor y ejecutar una instancia de esa imagen con runc. Utilice los siguientes comandos:

# podman pull registry.redhat.io/ubi8/ubi
# podman export $(podman create registry.redhat.io/ubi8/ubi) > rhel.tar
# mkdir -p rhel-runc/rootfs
# tar -C rhel-runc/rootfs -xf rhel.tar
# runc spec -b rhel-runc
# vi rhel-runc/config.json   Change any setting you like
# runc create -b rhel-runc/ rhel-container
# runc start rhel-container
sh-4.2#

En este ejemplo, el nombre de la instancia del contenedor es rhel-container. Ejecutar ese contenedor, por defecto, inicia un shell, por lo que puedes empezar a mirar y ejecutar comandos desde dentro de ese contenedor. Escriba exit cuando haya terminado.

El nombre de una instancia de contenedor debe ser único en el host. Para iniciar una nueva instancia de un contenedor:

# runc start <nombre_del_contenedor>

Puede proporcionar el directorio del paquete utilizando la opción -b. Por defecto, el valor del bundle es el directorio actual.

Necesitarás privilegios de root para iniciar contenedores con runc. Para ver todos los comandos disponibles para runc y su uso, ejecute runc --help.