LinuxParty
Uno de los desafíos a los que se enfrentaron los desarrolladores en el pasado es lograr que las aplicaciones se ejecuten de manera confiable en múltiples entornos informáticos. A menudo, las aplicaciones no se ejecutaban como se esperaba o encontraban errores y fallaban por completo. Y ahí nació el concepto de contenedores.
¿Qué son las imágenes de contenedores?
Las imágenes de contenedor son archivos estáticos que se envían con un código ejecutable que se ejecuta en un entorno aislado. Una imagen de contenedor comprende bibliotecas del sistema, dependencias y otras configuraciones de plataforma que necesita la aplicación para ejecutarse en diversos entornos.
Red Hat Linux proporciona un conjunto de útiles herramientas de contenedor que puede aprovechar para trabajar directamente con contenedores de Linux utilizando los comandos de docker requeridos. Éstos incluyen:
- Podman : este es un motor de contenedor sin daemon para ejecutar y administrar contenedores OCI en modo raíz o sin raíz. Podman es similar a Docker y tiene las mismas opciones de comando, excepto que Docker es un demonio. Puede extraer, ejecutar y administrar imágenes de contenedores con podman de la misma manera que lo haría con Docker. Podman viene con muchas funciones avanzadas, se integra completamente con los sistemas y ofrece soporte de espacio de nombres de usuario que incluye la ejecución de contenedores sin la necesidad de un usuario raíz.
- Skopeo : esta es una herramienta de línea de comandos utilizada para copiar imágenes de contenedores de un registro a otro. Puede usar Skopeo para copiar imágenes hacia y desde un host en particular, así como copiar imágenes a otro registro o entorno de contenedor. Además de copiar imágenes, puede usarlo para inspeccionar imágenes de varios registros y usar firmas para crear y verificar imágenes.
- Buildah : este es un conjunto de herramientas de línea de comandos que se utilizan para crear y administrar imágenes OCI de contenedores utilizando archivos Docker.
En este artículo, nos centraremos en la gestión de contenedores mediante podman y Skopeo.
Búsqueda de imágenes de contenedor desde un registro remoto
El comando de búsqueda podman le permite buscar imágenes de contenedores en registros remotos seleccionados. La lista predeterminada de registros se define en el archivo registries.conf ubicado en el directorio /etc/containers/.
Los registros están definidos por 3 secciones.
- [registries.search] : esta sección especifica los registros predeterminados en los que podman puede buscar imágenes de contenedores. Busca la imagen solicitada en los registros registration.access.redhat.com, registration.redhat.io y docker.io.
Registros predeterminados
- [registries.insecure] : esta sección especifica los registros que no implementan el cifrado TLS, es decir, los registros inseguros. De forma predeterminada, no se especifican entradas.
Registros inseguros
- [registries.block]: esto bloquea o deniega el acceso a los registros especificados desde su sistema local. De forma predeterminada, no se especifican entradas.
Registros de bloques
Como usuario normal ( no root ) que ejecuta el comando podman, puede definir su propio archivo registries.conf en su directorio de inicio ( $HOME/.config/containers/registries.conf ) para anular la configuración de todo el sistema.
Reglas al especificar registros
Al especificar los registros, tenga en cuenta lo siguiente:
- Cada registro debe estar entre comillas simples.
- Los registros se pueden especificar utilizando un nombre de host o una dirección IP.
- Si se especifican varios registros, deben estar separados por comas.
- Si un registro utiliza un puerto no estándar, ya sea puerto TCP 443 para seguro y 80 para inseguro, el número de puerto debe especificarse junto con el nombre del registro, por ejemplo, registration.example.com:5566.
Para buscar en un registro una imagen de contenedor usando la sintaxis:
# podman search registry/container_image
Por ejemplo, para buscar una imagen de Redis en el registro registration.redhat.io, invoque el comando:
# podman search registry.redhat.io/redis
Registro de búsqueda de imagen de contenedor
Para buscar una imagen de contenedor de MariaDB, ejecute.
# podman search registry.redhat.io/mariadb
Buscar imagen de contenedor de MariaDB
Para obtener una descripción detallada de la imagen de un contenedor, utilice la opción --no-trunc
antes del nombre de la imagen del contenedor a partir de los resultados que obtenga. Por ejemplo, intentaremos obtener una descripción detallada de la imagen del contenedor MariaDB como se muestra:
# podman search --no-trunc registry.redhat.io/rhel8/mariadb-103
Descripción de la lista de la imagen del contenedor MariaDB
Imágenes de Contenedor Tirando
Extraer o recuperar imágenes de contenedores de un registro remoto requiere que primero se autentique antes que nada. Por ejemplo, para recuperar la imagen del contenedor de MariaDB, primero inicie sesión en el registro de Redhat:
# podman login
Proporcione su nombre de usuario y contraseña y presione ' ENTRAR ' en su teclado. Si todo va bien, debería recibir un mensaje de confirmación de que el inicio de sesión en el registro fue exitoso.
¡Inicio de sesión exitoso!
Ahora, puede extraer la imagen usando la sintaxis que se muestra:
# podman pull <registro>[:<puerto>]/[<espacio-de-nombres>/]<nombre>:<etiqueta>
hace referencia al <registry>
host o registro remoto que proporciona un depósito de imágenes de contenedor en el TCP <port>
. El <namespace>
y el <name>
especifican colectivamente una imagen de contenedor basada en el registro <namespace>
. Finalmente, la opción <tag>
especifica la versión de la imagen del contenedor. Si no se especifica ninguno, se utiliza la etiqueta predeterminada, la más reciente.
Siempre se recomienda agregar registros confiables, es decir, aquellos que brindan cifrado y no permiten que los usuarios anónimos generen cuentas con nombres aleatorios.
Para extraer la imagen de MariaDB, ejecute el comando:
# podman pull registry.redhat.io/rhel8/mariadb-103
- El
<registry>
registry.redhat.io - El
<namespace>
– rhel8 - El
<name>
– MariaDB - El
<tag>
– 103
Extraer imagen de MariaDB
Para la extracción posterior de imágenes de contenedores, no es necesario iniciar sesión ya que ya está autenticado. Para extraer una imagen de contenedor de Redis, simplemente ejecute:
# podman pull registry.redhat.io/rhscl/redis-5-rhel7
Extraer imagen de contenedor de Redis
Listado de imágenes de contenedores
Una vez que haya terminado de extraer las imágenes, puede ver las imágenes existentes actualmente en su host ejecutando el comando podman images.
# podman images
Mostrar imágenes de contenedores
Inspección de imágenes de contenedores
Antes de ejecutar un contenedor, siempre es una buena idea probar la imagen y comprender lo que hace. El comando de inspección podman imprime un mar de metadatos sobre el contenedor, como el sistema operativo y la arquitectura.
Para inspeccionar una imagen, ejecute el comando podman inspect seguido del ID de la imagen o el repositorio.
# podman inspect IMAGE ID O # podman inspect REPOSITORY
En el siguiente ejemplo, estamos inspeccionando el contenedor de MariaDB.
# podman inspect registry.redhat.io/rhel8/mariadb-103
Inspección de imágenes de contenedores de MariaDB
Para extraer metadatos específicos para un contenedor, pase la opción --format
seguida de los metadatos y la identidad del contenedor (ID de imagen o nombre).
En el siguiente ejemplo, estamos recuperando información sobre la arquitectura y la descripción del contenedor base RHEL 8 que se encuentra en la sección " Etiquetas ".
# podman inspect --format='{{.Labels.architecture}}' ID-de-la-imagen # podman inspect --format='{{.Labels.description}}' ID-de-la-imagen
Obtenga información sobre la arquitectura de contenedores
Para inspeccionar una imagen remota de otro registro, use el comando skopeo inspect. En el siguiente ejemplo, estamos inspeccionando una imagen de inicio de RHEL 8 alojada en Docker.
# skopeo inspect docker://registry.redhat.io/rhel8-beta/rhel-init
Inspeccionar imagen remota desde Docker Registry
Etiquetado de imágenes de contenedores
Como habrás notado, los nombres de las imágenes suelen ser de naturaleza genérica. Por ejemplo, la imagen redis está etiquetada:
# skopeo inspect docker://registry.redhat.io/rhel8-beta/rhel-init
Etiquetar imágenes les da un nombre más intuitivo para comprender mejor lo que contienen. Usando el comando de etiqueta podman, puede crear una etiqueta de imagen que es esencialmente un alias para un nombre de imagen que consta de diferentes partes.
Estos son:
registry/username/NAME:tag
Por ejemplo, para cambiar el nombre genérico de la imagen de Redis que tiene un ID de 646f2730318c, ejecutaremos el comando:
# podman tag 646f2730318c myredis
Para agregar una etiqueta al final, agregue dos puntos seguidos del número de etiqueta:
# podman tag 646f2730318c myredis:5.0
Sin agregar el número de etiqueta, solo se le asignará el atributo más reciente.
Establecer nombre para la imagen del contenedor de Redis
Ejecución de imágenes de contenedores
Para ejecutar un contenedor, use el comando podman run. Por ejemplo:
# podman run image_id
Para ejecutar un contenedor de forma silenciosa en segundo plano como un servicio daemon, utilice la opción -d
que se muestra.
# podman run -d image_id
Por ejemplo, para ejecutar la imagen redis con ID 646f2730318c, invocaremos el comando:
# podman run -d 646f2730318c
Ejecutar imágenes de contenedores de Redis
Si está ejecutando un contenedor basado en un sistema operativo como la imagen base de RHEL 8, puede obtener acceso al shell mediante -it
. La opción -i
crea una sesión interactiva mientras -t
genera una sesión de terminal. La directiva --name
opción establece el nombre del contenedor en mybash mientras que es el ID de imagen ecbc6f53bba0 de la imagen base.
# podman run -it --name=mybash ecbc6f53bba0
A partir de entonces, puede ejecutar cualquier comando de shell. En el siguiente ejemplo, estamos verificando la versión del sistema operativo de la imagen del contenedor.
# cat /etc/os-release
Verificar la versión del sistema operativo de la imagen del contenedor
Para salir del contenedor, simplemente invoque el comando de salida.
# exit
Una vez que se sale del contenedor, se detiene automáticamente. Para volver a iniciar el contenedor, use el comando podman start con el interruptor -ai
como se muestra.
# podman start -ai mybash
Una vez más, esto le da acceso al shell.
Iniciar imágenes de contenedor
Listado de imágenes de contenedores en ejecución
Para enumerar los contenedores que se están ejecutando actualmente, use el comando podman ps como se muestra.
# podman ps
Lista de imágenes de contenedores en ejecución
Para ver todos los contenedores, incluidos los que han salido después de ejecutarse, use el comando:
# podman ps -a
Ver todas las imágenes de contenedores
Configurar imágenes de contenedores para que se inicien automáticamente en el servicio Systemd
En esta sección, nos centramos en cómo se puede configurar un contenedor para que se ejecute directamente en un sistema RHEL como un servicio systemd.
Primero, obtenga su imagen preferida. En este caso, extrajimos la imagen de Redis de Docker Hub:
# podman pull docker.io/redis
Si tiene SELinux ejecutándose en su sistema, debe activar el booleano container_manage_cgroup para ejecutar contenedores con systemd.
# setsebool -p container_manage_cgroup on
A partir de entonces, ejecute la imagen del contenedor en segundo plano y asígnela a su nombre de imagen preferido. En este ejemplo, nombramos nuestra imagen redis_server y asignamos el puerto 6379 desde el contenedor a nuestro host RHEL 8
# podman run -d --name redis_server -p 6379:6379 redis
Ejecutar imagen de contenedor en segundo plano
A continuación, vamos a crear un archivo de configuración de unidad systemd para redis en el directorio /etc/systemd/system/.
# vim /etc/systemd/system/redis-container.service
Pegue el contenido a continuación en el archivo.
[Unit] Description=Redis container [Service] Restart=always ExecStart=/usr/bin/podman start -a redis_server ExecStop=/usr/bin/podman stop -t 2 redis_server [Install] WantedBy=local.target
Guardar y salir del archivo.
A continuación, configure el contenedor para que se inicie automáticamente al arrancar.
# systemctl enable redis-container.service
A continuación, inicie el contenedor y verifique su estado de ejecución.
# systemctl start redis-container.service # systemctl status redis-container.service
Verificar el estado de la imagen del contenedor
Configurar almacenamiento persistente para imágenes de contenedores
Al ejecutar contenedores, es prudente configurar el almacenamiento externo persistente en el host. Esto proporciona una copia de seguridad en caso de que el contenedor se bloquee o se elimine accidentalmente.
Para conservar los datos, vamos a asignar un directorio ubicado en el host a un directorio dentro del contenedor.
$ podman run --privileged -it -v /var/lib/containers/backup_storage:/mnt registry.redhat.io/ubi8/ubi /bin/bash
La opción --privileged
se pasa cuando SELinux está configurado para hacer cumplir. La opción -v
especifica el volumen externo que se encuentra en el host. El volumen contenedor aquí es el directorio /mnt.
Una vez que hayamos accedido al shell, vamos a crear un archivo de muestra testing.txt en el directorio /mnt como se muestra.
$ echo "This tests persistent external storage" > /mnt/testing.txt
Luego saldremos del contenedor y verificaremos si el archivo existe en el almacenamiento externo que reside en el host.
# exit # cat /var/lib/containers/backup_storage/testing.txt
Salida ⇒ Esto prueba el almacenamiento externo persistente.
Configurar almacenamiento persistente para contenedores
Detención y extracción de contenedores
Una vez que haya terminado de ejecutar su contenedor, puede detenerlo usando el comando podman stop seguido del ID del contenedor que puede obtener del comando podman ps.
# podman stop container-id
Detener imagen de contenedor
Para eliminar los contenedores que ya no necesita, primero asegúrese de detenerlo y luego invoque el comando podman rm seguido de la identificación o el nombre del contenedor como una opción.
# podman rm container-id
Para eliminar varios contenedores a la vez en un solo comando, especifique los ID de contenedor separados por un espacio.
# podman rm container-id-1 container-id-2 container-id-3
Eliminar imagen de contenedor
Para borrar todos sus contenedores, ejecute el comando:
# podman rm -a
Borrar todos los contenedores
Eliminación de una imagen
Para eliminar una imagen, primero asegúrese de que todos los contenedores generados a partir de las imágenes se detengan y eliminen como se explicó en el subtema anterior.
A continuación, proceda y ejecute el comando podman -rmi
seguido del ID de la imagen como se muestra:
# podman -rmi image-id
Quita la imagen
Conclusión
Esto concluye este capítulo sobre la administración y el trabajo con contenedores en RHEL 8. Esperamos que esta guía le haya brindado una comprensión adecuada de los contenedores y cómo puede interactuar y administrarlos en su sistema RHEL usando podman y Skopeo.
-
Docker
- 11 herramientas Docker imprescindibles para simplificar tu flujo de trabajo
- DistroBox: ejecute cualquier distribución de Linux dentro de la terminal de Linux
- Instalar Docker y aprender a manipular contenedores básicos en CentOS y RHEL
- Cómo administrar contenedores usando Podman y Skopeo en RHEL 8
- Docker: la plataforma para la virtualización de nueva generación
- Cómo monitorear contenedores Docker con la herramienta de monitoreo Zabbix
- Instalar Docker en Windows 10 y 11
- Linux y Kubernetes: Al servicio de los objetivos comunes de las empresas
- Mirantis adquiere Docker Enterprise
- Configurar Jenkins en Docker
- Cómo configurar un servidor web Apache simple en un contenedor Docker
- Chuleta de Docker para Administradores de Sistemas
- Cómo conectar los contenedores Docker y mostrarlos en la red
- Cómo gestionar contenedores Docker
- Cómo buscar imágenes docker y lanzar un contenedor