Cómo instalar y usar Podman para ejecutar contenedores en Rocky Linux 8

Resultado de imagen de búsqueda de Podman

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 previos

  1. Un servidor basado en Rocky Linux
  2. Un usuario que no sea sudo con privilegios de raíz.
  3. Asegúrese de que el servidor esté actualizado.
    $ sudo dnf update
    

Instalar podman

Podman está incluido en el módulo de herramientas de contenedores, 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 comando del módulo dnf.

$ 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

Resultado de imagen de búsqueda de Podman

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 llamado al 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 utilizando 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 la marca -a.

$ 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 usando el indicador –force.

$ podman rm webserver2 --force
35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27

Contenedor de muerte

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 provoca la pérdida de datos.

Use el siguiente comando para eliminar el contenedor.

$ podman kill -s 9 webserver2

El comando anterior usa la opción SIGNAL 9 (SIGKILL) para eliminar el contenedor.

Para eliminar todos los contenedores, use la bandera –all o -a y para eliminar solo el contenedor más reciente, use la bandera –latest o -l.

Eliminar Imagen

Puede eliminar las imágenes con el comando rmi.

$ 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 la bandera -a.

$ 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 la opción –tail.

$ 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. Use el indicador -t 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 la opción –format. 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 la carcasa del contenedor

Puede acceder al indicador de Shell de cualquier contenedor utilizando la opción exec.

$ podman exec -it webserver2 /bin/bash

Pods

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 comandos simples 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *