Podman es una plataforma de contenedores gratuita y de código abierto creada para desarrollar, administrar e implementar contenedores y pods en un entorno Linux. Redhat desarrolló Podman en 2018. Es un motor de contenedores que funciona de manera diferente a Docker. Podman no depende de un daemon para funcionar, a diferencia de Docker, que usa Docker CLI y Docker daemon. Ser dependiente de daemon conduce a un único punto de falla.
Podman está diseñado de acuerdo con los estándares OCI (Open Container Initiative) que permiten que Podman interactúe directamente con el kernel, los contenedores y las imágenes. También es más seguro que Docker ya que no requiere acceso de root. Podman se puede usar como reemplazo directo de Docker, ya que ambos cumplen con OCI.
Este artículo le mostrará cómo instalar Podman y usarlo para crear y administrar imágenes y contenedores.
Requisitos
-
Un servidor basado en Rocky Linux
-
Un usuario que no sea sudo con privilegios de root.
-
Asegúrese de que el servidor esté actualizado.
$ sudo dnf update
Instalar Podman
Podman está incluido en container-tools
módulo, junto con Buildah y Skopeo. También está disponible en el repositorio de AppStream para Rocky Linux 8. Usaremos el método del módulo.
Instale Podman usando el dnf module
comando.
$ sudo dnf module install container-tools
Verifique la versión de Podman para ver si está instalada correctamente.
$ podman --version podman version 3.2.3
Buscar y descargar imágenes de contenedores
Para buscar la imagen de Nginx, use el siguiente comando.
$ podman search nginx
En el resultado, verá el nombre del registro del que proviene la imagen y una descripción de las imágenes.
Para descargar la imagen, utilice uno de los siguientes comandos.
$ podman pull docker.io/library/nginx OR $ podman pull nginx
Puede ver las imágenes descargadas mediante el siguiente comando.
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest f8f4ffc8092c 3 days ago 138 MB
Ejecutar contenedores
Use el siguiente comando para ejecutar un contenedor usando la imagen de Nginx. Hemos nombrado el contenedor como servidor web .
$ podman run -d --name webserver nginx
Podemos usar la misma imagen para lanzar otro contenedor con un nombre diferente.
$ podman run -d --name webserver2 nginx
Podemos lanzar un número ilimitado de contenedores usando la misma imagen.
Listar y detener contenedores
Para enumerar todos los contenedores en ejecución, use el siguiente comando.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 31 seconds ago Up 31 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 seconds ago Up 3 seconds ago webserver2
Detenga el contenedor en ejecución.
$ podman stop webserver webserver
Verifique si se ha detenido.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Para enumerar todos los contenedores, incluidos los detenidos, debe usar -a
bandera.
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Exited (0) 35 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Iniciar un Contenedor detenido
Utilice el siguiente comando para iniciar un contenedor detenido.
$ podman start webserver webserver
Verifique si ha comenzado.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 3 minutes ago Up 16 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Up 2 minutes ago webserver2
Eliminar contenedor
Debe detener un contenedor antes de eliminarlo.
$ podman stop webserver2
Eliminar el contenedor.
$ podman rm webserver2
Puede eliminar un contenedor en ejecución utilizando --force
bandera.
$ podman rm webserver2 --force 35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27
Contenedor de eliminación
Detener y Matar un Contenedor son dos cosas diferentes que eventualmente logran lo mismo. La diferencia es que Detener un contenedor lo cierra correctamente mientras que Matar un contenedor lo finaliza a la fuerza, lo que resulta en la pérdida de datos.
Use el siguiente comando para eliminar el contenedor.
$ podman kill -s 9 webserver2
El comando anterior usa SIGNAL 9 (SIGKILL)
opción para matar el contenedor.
Para eliminar todos los contenedores, use --all
o -a
marca y para eliminar solo el contenedor más reciente, use el --latest
o -l
bandera.
Borrar imagen
Puede eliminar las imágenes usando el rmi
comando.
$ podman rmi registry.redhat.io/rhel8/rsyslog
Puede eliminar varias imágenes separándolas con comas.
$ podman rmi registry.redhat.io/rhel8/rsyslog registry.redhat.io/ubi8/ubi
Para eliminar todas las imágenes de su sistema, utilice -a
bandera.
$ podman rmi -a
Ver registros de contenedores
Para ver los registros del contenedor, use el siguiente comando.
$ podman logs webserver /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up ......
Puede restringir los registros a las últimas 5 líneas usando --tail
opción.
$ podman logs --tail=5 webserver 2021/10/05 10:13:52 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/10/05 10:13:52 [notice] 1#1: OS: Linux 4.18.0-305.19.1.el8_4.x86_64 2021/10/05 10:13:52 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 262144:262144 2021/10/05 10:13:52 [notice] 1#1: start worker processes 2021/10/05 10:13:52 [notice] 1#1: start worker process 23
De forma predeterminada, no obtendrá ninguna marca de tiempo en los registros. Usa el -t
marcar para agregar marcas de tiempo a sus registros.
$ podman logs -t webserver 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ 2021-10-05T09:25:02.033956297Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 2021-10-05T09:25:02.043751152Z 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 2021-10-05T09:25:02.064561317Z 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf .....
Inspección de contenedores
Inspeccionar un contenedor imprimirá la información sobre un contenedor.
$ podman inspect webserver [ { "Id": "19b6668bc6278a66b3ffc98ae1515af25f5bebcd20bf26de803cae41c4485f59", "Created": "2021-10-05T09:25:01.784949744Z", "Path": "/docker-entrypoint.sh", "Args": [ "nginx", "-g", "daemon off;" ], "State": { "OciVersion": "1.0.2-dev", "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 4423, ....
El comando predeterminado imprimirá una salida larga en formato JSON. Para filtrar la salida, debe usar el --format
opción. Para saber cuándo se inició el contenedor, ejecute el siguiente comando.
$ podman inspect webserver --format '{{.State.StartedAt}}' 2021-10-05 10:13:52.794806322 +0000 UTC
Accediendo a Container Shell
Puede acceder al indicador de Shell de cualquier contenedor usando el exec
opción.
$ podman exec -it webserver2 /bin/bash
vainas
Podman tiene una característica única de la que carece Docker. Podman puede crear Pods a partir de contenedores que funcionan juntos. Esto le permite administrar múltiples contenedores en conjunto.
Para crear un Pod, use el siguiente comando.
$ podman pod create --name mypod
Agregue los Contenedores al pod recién creado.
$ podman run --pod mypod --name myimage1 image:latest $ podman run --pod mypod --name myimage2 diff-image:latest
Ahora puede administrar contenedores usando simples comandos de una línea.
$ podman kill mypod # Kill all containers $ podman restart mypod # Restart all containers $ podman stop mypod # Stop all containers $ podman pod ps # List all pods $ podman pod top mypod # Display running processes in a pod $ podman pod inspect mypod # Inspect a Pod $ podman pod rm mypod # Remove the pod
Conclusión
Esto concluye nuestro tutorial sobre la instalación y el uso de Podman para ejecutar contenedores. Hay muchas cosas que puede hacer con Podman que no hemos cubierto. Si tiene alguna pregunta, publíquela en los comentarios a continuación.