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