Cómo construir un laboratorio de contenedores en cinco minutos

Los laboratorios caseros son una excelente manera de aprender y probar nuevas tecnologías. Enable Sysadmin ha publicado varios artículos sobre la implementación de laboratorios domésticos mediante el uso de máquinas virtuales mediante secuencias de comandos y Ansible, incluidos Construir un laboratorio en cinco minutos con tres comandos simples de Alex Callejas y Construir un laboratorio en 36 segundos con Ansible de Ricardo Girardi. Puedes hacer algo similar con los contenedores.

Los contenedores son una parte esencial de la informática actual, y es fácil comenzar a usar contenedores en un entorno de laboratorio doméstico. Es posible que tenga un proyecto pequeño que requiera algunos contenedores básicos para realizar algunas tareas simples.

En este proyecto de muestra, aprenderá cómo implementar rápidamente entornos Linux que los estudiantes pueden usar para realizar actividades de laboratorio breves y enfocadas. Específicamente, los participantes deben trabajar en archivos utilizando el Nano Editor. Una máquina virtual sería suficiente, pero los estudiantes pueden familiarizarse fácilmente con los contenedores.

Índice

Elija una plataforma de contenedores

Podman es un entorno de contenedor moderno y flexible, así que primero instale Podman en su ordenador host. Algunos pasos pueden variar ligeramente según la distribución de su host, pero en Fedora, CentOS Stream y Red Hat Enterprise Linux (RHEL), es tan fácil como:

$ sudo dnf install podman

Habilitar contenedores sin raíz

De forma predeterminada, necesita privilegios administrativos para ejecutar contenedores con Podman. Esto es parte del costo de un motor contenedor sin daemon, pero de ninguna manera es una limitación permanente.

Utilizar el usermod para agregar un conjunto de ID de usuario y grupo a su cuenta de usuario:

$ sudo usermod 
--add-subuids 200000-215000 
--add-subgids 200000-215000 
$USER

[ Get more insight on How to manage users and groups in Linux. ]

También debe verificar que los usuarios tengan acceso a algunos miles de espacios de nombres:

$ sysctl --all --pattern user_namespaces
user.max_user_namespaces = 28633

Si su distribución no tiene esta propiedad, o la establece baja, puede crearla ingresando este texto en el archivo /etc/sysctl.d/userns.conf:

user.max_user_namespaces=28633

Y luego carga este parámetro:

$ sudo sysctl -p /etc/sysctl.d/userns.conf

Prefiero reiniciar después de esta configuración para asegurarme de que se carguen los cambios en la configuración del kernel y del usuario.

Después de reiniciar, intente ejecutar RHEL Universal Base Image (UBI) con Podman:

$ podman run ubi8/ubi cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="8.5 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.5"
PLATFORM_ID="platform:el8"
[...]

Crear un archivo Docker

Ahora puede crear un Dockerfile que especifique cómo crear su nueva imagen de contenedor. Primero, cree un directorio para su Dockerfile:

$ mkdir ~/mycontainer
$ cd !$

Cree un archivo con el siguiente contenido para crear una imagen basada en UBI con el editor de texto Nano instalado:

FROM ubi8/ubi:latest
RUN dnf install -y nano

Construye la imagen:

$ podman build --tag rhel-with-nano .

Tenga cuidado de no perderse el punto de fuga que representa "aquí" en el proceso de construcción.

Confirme que la imagen ha sido creada:

$ podman images

Ahora puede ejecutar el contenedor. Primero, ejecute un comando en la imagen UBI original para establecer una línea de base:

$ podman run ubi8/ubi which nano
which: no nano in (/usr/local/sbin:...

El editor de texto Nano no está instalado de forma predeterminada en UBI. Ahora ejecute el mismo comando en su contenedor personalizado:

$ podman run rhel-with-nano which nano
/usr/bin/nano

Nano ahora está instalado en su contenedor personalizado.

También puede ejecutar el contenedor de forma interactiva:

$ podman run -it rhel-with-nano
[[email protected] /]# ls
bin   dev  home  lib64	     media  opt   root	sbin  sys  usr
boot  etc  lib	 lost+found  mnt    proc  run	srv   tmp  var

Puede cambiar a otra pestaña de terminal o abrir una nueva terminal para ver algunas estadísticas básicas sobre el contenedor en ejecución:

$ docker ps

Pegar exit para cerrar el recipiente.

Pruebe el mismo proceso para crear y ejecutar una imagen de contenedor de Fedora para consolidar su comprensión de los pasos. Ahora que ha instalado Podman, el proceso es tan fácil como extraer imágenes existentes o crear las suyas propias.

Almacenamiento

Una cosa que a menudo desconcierta a los nuevos usuarios de contenedores es su transitoriedad; están diseñados explícitamente como entornos desechables. Por ejemplo, inicie una instancia de su imagen personalizada y cree y guarde un archivo en el directorio de inicio. Haga esto de forma interactiva, para que pueda confirmar que se han seguido sus instrucciones:

$ podman run -it rhel-with-nano
[[email protected] /]# cd home/
[[email protected] home]# ls
[[email protected] home]# touch test.txt
[[email protected] home]# ls
test.txt
[[email protected] home]# exit

Ha creado un archivo llamado test.txty usted confirmó que fue creado. Pero dejaste el contenedor, lo que impidió que funcionara. Inicie uno nuevo y busque su archivo:

$ podman run -it rhel-with-nano
[[email protected] /]# ls home/
[[email protected] /]# exit

[ Get an overview of Kubernetes storage and how it’s implemented. Download the free eBook Storage patterns for Kubernetes for dummies. ]

Si necesita almacenamiento persistente, puede crear un directorio local y vincularlo como una opción de montaje para su contenedor. Primero, cree el directorio de almacenamiento:

$ mkdir data

Luego inicie su contenedor usando su directorio de almacenamiento como el punto de montaje relevante. Este ejemplo vincula el directorio local a una ubicación llamada /storage, pero puedes vincularlo a /opt Donde /home o cualquier directorio que desee.

Debe agregar la ubicación de su directorio con :Z (son dos puntos y una Z mayúscula) para que SELinux pueda traducir los contextos entre su host y Podman.

$ podman run -it --volume ./data:/storage:Z rhel-with-nano
[[email protected] /]# ls
bin   dev  home  lib64	     media  opt   root	sbin  storage sys
boot  etc  lib	 lost+found  mnt    proc  run	srv   tmp  usr var
[[email protected] /]# touch /storage/test.txt
[[email protected] /]# exit

Todos los datos que creas y guardas en el /storage directorio en el contenedor se guarda en su persistente data ubicación, y luego se puede acceder nuevamente desde cualquier contenedor que use ese volumen para su almacenamiento.

Usar una imagen existente

Hasta ahora ha implementado dos contenedores simples con aplicaciones locales. ¿Qué más pueden hacer los contenedores? La respuesta parece ser casi todo. Aumente un poco el nivel de intensidad.

Hace muchos años hubo un gran juego llamado nethack. Según los estándares actuales, Nethack no es exactamente lo último en tecnología de juegos, pero fue entretenido. Y resulta que hay un imagen predefinida de Nethack. ¡Ay, la vida es hermosa!

$ podman pull matsuu/nethack
$ podman run -it matsuu/nethack
Cuidado con Wintersfury the Wren ya sea que Nethack se esté ejecutando en un contenedor o no (Damon Garn, CC BY-SA 4.0)

No hay nada como usar tecnología moderna para jugar un juego de hace 30 años.

Considere la posibilidad de implementar un servidor web basado en contenedores, como Apache, para algo más relacionado con las tareas de administración del sistema actuales.

Concluir

Este proceso, que debería tardar unos cinco minutos en configurarse, proporciona una descripción general muy básica del uso de contenedores como entornos de laboratorio para herramientas como Vim, Nano y Apache (¡y Nethack!). Tome este conocimiento básico y explore Dockerhub para descubrir qué otras tecnologías útiles puede comenzar a aprender en su entorno de laboratorio basado en contenedores. Considere Podman, Python, MariaDB o cree algo propio.

Artículos de interés

Subir