Gestión básica de contenedores mediante Podman
- DESCRIPCIÓN
Los contenedores ofrecen un método de virtualización ligero para ejecutar varios entornos virtuales (contenedores) simultáneamente en un único host. Podman es la herramienta por defecto en SLE Micro para gestionar los contenedores.
- INTENCIÓN
Este artículo proporciona información básica sobre Podman y explica cómo se puede utilizar para gestionar contenedores.
- ESFUERZO
Se tardan unos 30 minutos en leer este artículo.
- OBJETIVO
Comprenderá que es Podman, las imágenes de contenedor y los contenedores.
- REQUISITOS
Podman debe estar instalado
1 Conceptos básicos sobre los contenedores #
Los contenedores ofrecen un método de virtualización ligero para ejecutar varios entornos virtuales (contenedores) simultáneamente en un único host. A diferencia de tecnologías como Xen o KVM, donde el procesador simula un entorno de hardware completo y un hipervisor controla las máquinas virtuales, los contenedores proporcionan virtualización en el nivel del sistema operativo, donde el kernel controla los contenedores aislados.
Los contenedores permiten aislar aplicaciones en unidades independientes.
Los contenedores proporcionan un rendimiento casi nativo. Dependiendo del tiempo de ejecución, un contenedor puede utilizar el kernel del host directamente, minimizando así la sobrecarga.
Es posible controlar las interfaces de red y aplicar recursos dentro de los contenedores a través de grupos de control del kernel.
Los contenedores se ejecutan en el kernel del sistema host, por lo que no pueden utilizar distintos kernels o versiones del kernel.
La seguridad de los contenedores depende del sistema host. Las aplicaciones en contenedores se pueden proteger mediante perfiles de AppArmor o SELinux. Proteger los contenedores es más difícil que proteger las máquinas virtuales debido a la mayor superficie de ataque.
2 Acerca de Podman #
Podman es la abreviatura de Pod Manager Tool (Herramienta de gestión de pods). Se trata de un motor de contenedor sin daemon que permite ejecutar y distribuir aplicaciones mediante contenedores e imágenes de contenedor. Podman proporciona una interfaz de línea de comandos para gestionar contenedores.
Como Podman no tiene un daemon, proporciona integración con systemd. Esto hace posible controlar los contenedores mediante unidades systemd. Puede crear estas unidades para contenedores existentes, así como generar unidades que puedan iniciar contenedores si no existen en el sistema. Podman puede ejecutar systemd dentro de contenedores.
Podman permite organizar los contenedores en pods. Los pods comparten la misma interfaz de red y los mismos recursos. Un caso de uso típico para organizar un grupo de contenedores en un pod es un contenedor que ejecuta una base de datos y un contenedor con un cliente que accede a la base de datos.
2.1 Instalación de Podman #
Podman se incluye en SLE Micro por defecto. Sin embargo, si falta Podman, puede instalarlo como se describe a continuación:
Ejecute el comando:
>
sudo
transactional-update pkg install podman*Reinicie el sistema para arrancar en la nueva instantánea.
3 Obtención de imágenes de contenedor #
Para ejecutar un contenedor, necesita una imagen. Una imagen incluye todas las dependencias necesarias para ejecutar una aplicación. Puede obtener imágenes de un registro de imágenes. Los registros disponibles se definen en el archivo de configuración /etc/containers/registries.conf
. Si dispone de un registro de imágenes local o desea utilizar otros registros, añádalos al archivo de configuración.
SLE Micro no proporciona herramientas para crear imágenes personalizadas. Por lo tanto, la única forma de obtener una imagen es extraerla de un registro de imágenes.
Ni el registro de openSUSE ni Docker Hub están configurados en la instalación por defecto. Para descargar imágenes de contenedor de esos registros, debe añadir los registros al archivo /etc/containers/registries.conf
de la siguiente manera:
unqualified-search-registries = ["registry.suse.com", "registry.opensuse.org", "docker.io"]
El comando podman pull
extrae una imagen de un registro de imágenes. La sintaxis es la siguiente:
#
podman pull[OPTIONS]SOURCE
source puede ser una imagen sin el nombre de registro. En ese caso, Podman intentará extraer la imagen de todos los registros configurados en el archivo /etc/containers/registries.conf
. La etiqueta de imagen por defecto es latest
. La ubicación por defecto de las imágenes extraídas es /var/lib/containers/storage/overlay-images/
.
Para ver todas las opciones posibles del comando podman pull
, ejecute:
#
podman pull --help
Si utiliza Cockpit, también puede extraer imágenes de un registro de imágenes con el menú
(Contenedores de Podman) haciendo clic en (Obtener nueva imagen).Podman permite buscar imágenes en un registro de imágenes o en una lista de registros mediante el comando:
#
podman searchIMAGE_NAME
Como alternativa, puede utilizar la herramienta skopeo para gestionar imágenes de contenedor y repositorios de imágenes. Para obtener más información, consulte la siguiente sección.
3.1 skopeo #
skopeo es una utilidad de línea de comandos para gestionar, inspeccionar y firmar imágenes de contenedores y repositorios de imágenes. skopeo permite inspeccionar contenedores y repositorios en registros de contenedores remotos y locales, y también facilita la copia de imágenes de contenedor entre diferentes sistemas de almacenamiento.
skopeo funciona con los siguientes tipos de registro:
- containers-storage:IMAGE_REFERENCE
Una imagen ubicada en un almacén de imágenes local.
- docker://IMAGE_REFERENCE
Una imagen en un registro.
skopeo proporciona varios comandos para gestionar imágenes y registros:
-
inspect
El comando obtiene el manifiesto del repositorio y puede mostrar información como etiquetas disponibles para el repositorio especificado, etiquetas de una imagen de contenedor, el sistema operativo de una imagen, etc.
El comando tiene la siguiente sintaxis:
>
skopeo inspect REGISTRY_TYPEIMAGE_NAME
A continuación se muestra un ejemplo de uso:
>
skopeo inspect docker://registry.suse.com/suse/pcp:latest
{ "Name": "registry.suse.com/suse/pcp", "Digest": "sha256:eee17c009fb8b05e5825a8c9658d972ab13a17541180bd7a1348fccc6e4fc77f", "RepoTags": [ "5", "5-12.54", "5-13.10", ... ], "Created": "2023-06-19T16:59:01.617731565Z", "DockerVersion": "20.10.23-ce", "Labels": { "com.suse.application.pcp.created": "2023-06-19T16:58:29.786850402Z", "com.suse.application.pcp.description": "Performance Co-Pilot (pcp) container image based on the SLE Base Container Image. This container image is not supported when using a container runtime other than podman.", ... ], "Architecture": "amd64", "Os": "linux", "Layers": [ "sha256:a05e4c4d1fc89c7f7aa60829b8631b64873df6041f627eb2b43524e9e010446e", "sha256:19793da49ce886a67aa62657dc24a105a26d63568ce27de241246bc6cc9bc008", "sha256:403f9ef6c98d4cf277caf3166ca4455817828e33c8b699237bb8eb24cb2b41bf" ], "LayersData": [ { "MIMEType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "Digest": "sha256:a05e4c4d1fc89c7f7aa60829b8631b64873df6041f627eb2b43524e9e010446e", "Size": 47291175, "Annotations": null }, ... ], "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"-
copy
El comando permite copiar imágenes de contenedor entre registros, sistemas secundarios de almacenamiento de contenedores y directorios locales.
A continuación se muestra un ejemplo de uso:
>
skopeo copy oci:busybox_ocilayout:latest dir:existingemptydirectory
-
delete
Para marcar una imagen para que el recopilador de basura del registro la elimine posteriormente.
>
skopeo delete docker://registry.example.com/example/pause:latest
-
sync
Para sincronizar imágenes entre repositorios de registro y directorios locales.
4 Uso de contenedores #
4.1 Ejecución de contenedores #
Después de extraer la imagen del contenedor, puede crear contenedores basados en ella. Puede ejecutar una instancia de la imagen mediante el comando podman run
. La sintaxis del comando es la siguiente:
#
podman run [OPTIONS] IMAGE [CONTAINER_NAME]
IMAGE se especifica con el formato transport:path. Si se omite el transporte, se utiliza el valor por defecto docker
. La vía puede hacer referencia a un registro de imagen específico. Si se omite, Podman busca la imagen en los registros definidos en el archivo /etc/containers/registries.conf
. A continuación se muestra un ejemplo que ejecuta un contenedor llamado sles15
basado en la imagen sle15
:
#
podman run registry.opensuse.org/suse/templates/images/sle-15-sp4/base/images/suse/sle15 sles15
A continuación se muestra una lista de las opciones más utilizadas. Para obtener una lista completa de las opciones disponibles, ejecute el comando podman run
--help
:
-
--detach, -d
El contenedor se ejecutará en segundo plano.
-
--env, -e=env
Esta opción permite que las variables de entorno arbitrarias que están disponibles para el proceso se lancen dentro del contenedor. Si se especifica una variable de entorno sin un valor, Podman comprobará el entorno del host en busca de un valor y establecerá la variable solo si está definida en el host.
-
--help
Imprime la ayuda para el comando
podman run
.--hostname=
nombre,-h
Define el nombre de host del contenedor que está disponible dentro del contenedor.
-
--pod=
nombre Ejecuta el contenedor en un pod existente. Para crear un pod, añada el prefijo
new:
al nombre del pod.-
--read-only
Monta el sistema de archivos raíz del contenedor como de solo lectura.
-
--systemd=true|false|always
Ejecuta el contenedor en modo systemd. El valor por defecto es verdadero.
4.2 Listado de contenedores #
Podman permite mostrar todos los contenedores en ejecución usando el comando podman ps
. La sintaxis genérica del comando es la siguiente:
#
podman ps[OPTIONS]
Las opciones del comando pueden cambiar la información mostrada. Por ejemplo, si se usa la opción --all
, se mostrarán todos los contenedores creados por Podman (no solo los contenedores en ejecución).
Para obtener una lista completa de opciones de podman ps
, ejecute:
#
podman ps --help
4.3 Detención de contenedores #
Si el comando podman run
finaliza correctamente, se ha iniciado un nuevo contenedor. Puede detener el contenedor ejecutando:
#
podman stop[OPTIONS]CONTAINER
Puede especificar un único nombre o ID de contenedor o una lista de contenedores separados por espacios. El comando acepta las siguientes opciones:
-
--all, -a
Detiene todos los contenedores en ejecución.
-
--latest, -l
En lugar de proporcionar un nombre de contenedor, se detendrá el último contenedor creado.
-
--time, -t=
segundos Segundos de espera antes de detener el contenedor a la fuerza.
Para ver todas las opciones posibles del comando podman stop
, ejecute lo siguiente:
#
podman stop --help
4.4 Inicio de contenedores #
Para iniciar contenedores ya creados pero detenidos, utilice el comando podman start
. La sintaxis del comando es la siguiente:
#
podman start[OPTIONS]CONTAINER
CONTAINER puede ser un nombre de contenedor o un ID de contenedor.
Para obtener una lista completa de las opciones posibles de podman
start
, ejecute el comando:
#
podman start --help
4.4.1 Confirmación de contenedores modificados #
Puede ejecutar un contenedor nuevo con atributos específicos que no formen parte de la imagen original. Para guardar el contenedor con estos atributos como una imagen nueva, puede utilizar el comando podman commit
:
#
podman commit[OPTIONS]CONTAINERIMAGE
CONTAINER es un nombre de contenedor o un ID de contenedor. IMAGE es el nuevo nombre de la imagen. Si el nombre de la imagen no comienza con un nombre de registro, se utiliza el valor localhost
.
4.5 Eliminación de contenedores #
Para eliminar uno o varios contenedores no utilizados del host, utilice el comando podman rm
de la siguiente manera:
#
podman rm[OPTIONS]CONTAINER
CONTAINER puede ser un nombre de contenedor o un ID de contenedor.
El comando no elimina el contenedor especificado si el contenedor se está ejecutando. Para eliminar un contenedor en ejecución, utilice la opción -f
.
Para obtener una lista completa de opciones de podman rm
, ejecute:
#
podman rm --help
Puede suprimir todos los contenedores detenidos del host con un solo comando:
#
podman container prune
Asegúrese de que esté previsto que todos los contenedores detenidos se eliminarán antes de ejecutar el comando; de lo contrario, podrían eliminarse contenedores que todavía están en uso y se han detenido solo temporalmente.
5 Uso de pods #
Los contenedores se pueden agrupar en un pod. Los contenedores del pod comparten la red, el pid y el espacio de nombres IPC. Los pods se pueden gestionar mediante comandos podman pod
. Esta sección proporciona una descripción general de los comandos para gestionar los pods.
5.1 Creación de pods #
El comando podman pod create
se utiliza para crear un pod. La sintaxis del comando es la siguiente:
#
podman pod create[OPTIONS]
El comando genera el ID del pod. Por defecto, los pods se crean sin iniciar. Puede iniciar un pod ejecutando un contenedor del pod o iniciando el pod como se describe en la Sección 5.3, “Iniciar, detener o reiniciar pods”.
Si no especifica un nombre de pod con la opción --name
, Podman asignará un nombre por defecto al pod.
Para obtener una lista completa de las opciones posibles, ejecute el siguiente comando:
#
podman pod create --help
5.2 Listado de pods #
Puede mostrar todos los pods ejecutando el comando:
#
podman pod list
El resultado es el siguiente:
POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 30fba506fecb upbeat_mcclintock Created 19 hours ago 1 4324f40c9651 976a83b4d88b nervous_feynman Running 19 hours ago 2 daa5732ecd02
Dado que cada pod incluye el contenedor INFRA
, el número de contenedores de un pod es siempre mayor que cero.
5.3 Iniciar, detener o reiniciar pods #
Después de crear un pod, debe iniciarlo, ya que por defecto no se encuentra en el estado running
. En los comandos siguientes, POD puede ser un nombre de pod o un ID de pod.
Para iniciar un pod, ejecute el comando:
#
podman pod start[OPTIONS]POD
Para obtener una lista completa de las opciones posibles, ejecute:
#
podman pod start --help
Para detener un pod, utilice el comando podman pod stop
así:
#
podman pod stopPOD
Para reiniciar un pod, utilice el comando podman pod restart
de la siguiente manera:
#
podman pod restartPOD
5.4 Gestión de contenedores de un pod #
Para añadir un contenedor nuevo a un pod, utilice el comando podman run
con la opción --pod
. A continuación se muestra una sintaxis general del comando:
#
podman run[OPTIONS] --pod POD_NAME IMAGE
Para obtener más información sobre el comando podman run
, consulte la Sección 4.1, “Ejecución de contenedores”.
El comando podman start
no permite iniciar un contenedor en un pod si el contenedor no se ha añadido al pod durante la ejecución inicial del contenedor.
No es posible eliminar un contenedor de un pod y mantener el contenedor en ejecución, ya que el contenedor en sí se elimina del host.
Otras acciones como iniciar, reiniciar y detener se pueden realizar en contenedores específicos sin que ello afecte al estado del pod.
5.5 Monitorización de procesos en pods #
Para ver todos los contenedores de todos los pods, utilice el siguiente comando:
#
podman ps -a --pod
El resultado del comando será similar a lo siguiente:
CONTAINER ID IMAGE COMMAND CREATED STATUS [...] 4324f40c9651 k8s.gcr.io/pause:3.2 21 hours ago Created daa5732ecd02 k8s.gcr.io/pause:3.2 22 hours ago Up 3 hours ago e5c8e360c54b localhost/test:latest /bin/bash 3 days ago Exited (137) 3 days ago 82dad15828f7 localhost/opensuse/toolbox /bin/bash 3 days ago Exited (137) 3 days ago 1a23da456b6f docker.io/i386/ubuntu /bin/bash 4 days ago Exited (0) 6 hours ago df890193f651 localhost/opensuse/toolbox /bin/bash 4 days ago Created
Los dos primeros registros son los contenedores INFRA
de cada pod, según la imagen k8s.gcr.io/pause:3.2
. Otros contenedores del resultado son contenedores independientes que no pertenecen a ningún pod.
5.6 Eliminación de pods #
Hay dos formas de eliminar pods. Puede utilizar el comando podman pod
rm
para eliminar uno o varios pods. Como alternativa, puede eliminar todos los pods detenidos mediante el comando podman pod prune
.
Para eliminar un pod o varios pods, ejecute el comando podman pod
rm
de la siguiente manera:
#
podman pod rmPOD
POD puede ser un nombre de pod o un ID de pod.
Para eliminar todos los pods actualmente detenidos, utilice el comando podman pod
prune
. Asegúrese de que todos los pods detenidos deben eliminarse antes de ejecutar el comando podman pod prune
; de lo contrario, podría eliminar pods que aún estén en uso.
6 Información legal #
Copyright © 2006 –2024 SUSE LLC y colaboradores. Reservados todos los derechos.
Está permitido copiar, distribuir y modificar este documento según los términos de la licencia de documentación gratuita GNU, versión 1.2 o (según su criterio) versión 1.3. Este aviso de copyright y licencia deberán permanecer inalterados. En la sección titulada “GNU Free Documentation License” (Licencia de documentación gratuita GNU) se incluye una copia de la versión 1.2 de la licencia.
Para obtener información sobre las marcas comerciales de SUSE, consulte https://www.suse.com/company/legal/. Todas las marcas comerciales de otros fabricantes son propiedad de sus respectivas empresas. Los símbolos de marcas comerciales (®, ™, etc.) indican marcas comerciales de SUSE y sus filiales. Los asteriscos (*) indican marcas comerciales de otros fabricantes.
Toda la información recogida en esta publicación se ha compilado prestando toda la atención posible al más mínimo detalle. Sin embargo, esto no garantiza una precisión total. Ni SUSE LLC, ni sus filiales, ni los autores o traductores serán responsables de los posibles errores o las consecuencias que de ellos pudieran derivarse.