Vista previa: la nueva API REST de Podman

Este es solo entre tú y yo, ¡no se lo digas a nadie más! ¿Promesa? Muy bien, tengo tu palabra, así que ahí tienes: hay un nuevo REST-API que se incluye con la versión 2.0 de Podman! Esta versión acaba de ser lanzada ensayo sobre Proyecto Fedora y puede haber alcanzado la estabilidad en el momento de la publicación de este artículo. Con esta nueva API REST, puede llamar a Podman desde plataformas como cURL, Postman, el cliente REST avanzado de Google y muchas más. Describiré cómo comenzar a usar esta nueva API.

El servicio Podman solo funciona en Linux. Necesita hacer alguna configuración en Linux para hacer las cosas.

Índice

    Instalar Podman v2.0

    Primero, instale Podman v2.0 o posterior. Actualmente puedes hacer esto en Fedora con una llamada como dnf -y install --enablerepo updates-Pruebas podman, o puede clonar Podman desde GitHub luego siga las instrucciones hacia el final de este página.

    Configurar API REST

    Una vez que Podman v2.0 está instalado en su máquina, es el momento de verificar el Documentación de la API REST a docs.podman.io. En la parte superior de este documento REST, encontrará instrucciones para configurar el servicio API REST en su servidor Linux con fines de prueba. Aquí hay una descripción general del comando:

    # podman system service -t 5000 &

    Wow, eso fue un montón de trabajo pesado!

    En serio, es tan simple como eso. Con este comando, el servicio permanece activo durante 5000 segundos y comienza a aceptar solicitudes. Tenga en cuenta que el tiempo de actividad de 5000 segundos se actualiza después de cada comando recibido. Si desea que el servicio permanezca activo hasta que la máquina se apague o el proceso finalice, use 0 (cero) en lugar de 5000. Puede hacerlo con este comando:

    # podman system service -t 0 &

    Recopilar información sobre Podman

    Echemos un vistazo a algunos comandos para usar contra el servidor ahora que se está ejecutando. Primero, consultemos a Podman para obtener su información, luego pasemos los resultados a través de jq, un procesador JSON de línea de comandos disponible en la mayoría de las distribuciones de Linux. Una pequeña advertencia: jq formatea el archivo JSON en un formato muy digerible, pero puede ocultar errores si aparecen. aprovechemos d en la parte de abajo curl Comando para consultar el socket de dominio Unix configurado al inicio del servicio:

    # curl -s --unix-socket /run/podman/podman.sock http://d/v1.0.0/libpod/info | jq
    {
     
    "host": {
               "arch": "amd64",
               "buildahVersion": "1.15.0",
               "cgroupVersion": "v1",
               "conmon": {
               "package": "Unknown",
               "path": "/usr/local/libexec/podman/conmon",
               "version": "conmon version 2.0.3-dev, commit: 002da2522941fde456f5213c8a5a96c9836c2592"
               },
               "cpus": 1,
               "distribution": {
               "distribution": "fedora",
               "version": "30"
               },
    … (removed a number of lines for brevity)
     
    "version": {
               "APIVersion": 1,
               "Version": "2.1.0-dev",
               "GoVersion": "go1.13.12",
               "GitCommit": "0e4b73456d4c545136a5cfd664b6d9d819ffc498",
               "BuiltTime": "Sun Jun 21 14:07:25 2020",
               "Built": 1592762845,
               "OsArch": "linux/amd64"
      }
    }

    Este resultado muestra información sobre la instalación de Podman en el servidor Linux donde se ejecuta el servicio API REST.

    A continuación, probemos algunas tareas pequeñas con un poco más de fuerza. Dibujemos una imagen, luego listémosla.

    Primero, extraeremos la imagen de Podman de quay.io. Este paso puede tardar unos segundos en procesarse. Para estos nuevos argumentos codificados en URL, el %2f a continuación hay una barra inclinada escapada /:

    # curl -XPOST --unix-socket /run/podman/podman.sock -v 'http://d/v1.0.0/images/create?fromImage=quay.io%2Fcontainers%2Fpodman'
    *  
    Trying /run/podman/podman.sock:0...
    * Connected to d (/run/podman/podman.sock) port 80 (#0)
    > POST /v1.0.0/images/create?fromImage=quay.io%2Fcontainers%2Fpodman HTTP/1.1
    > Host: d
    > User-Agent: curl/7.65.3
    > Accept: */*
    > 
    * Mark bundle as not supporting multiuse
    < HTTP/1.1 200 OK
    < Content-Type: application/json
    < Date: Sun, 21 Jun 2020 19:13:19 GMT
    < Content-Length: 185
    < 
    {"status":"pulling image () from quay.io/Contenedores/podman:latest","error":"","progress":"","progressDetail":{},"id":"5a9a0e9623e33dec906d8d38908d0681cee1e09fbdf282fa65fe8dfb878ab943"}
    * Connection #0 to host d left intact

    Ahora que tenemos una imagen extraída, examinémosla:

    # curl --unix-socket /run/podman/podman.sock -v 'http://d/v1.0.0/libpod/images/json' | jq
    *  
    Trying /run/podman/podman.sock:0...
      % Total         % Received % Xferd  Average Speed   Time           Time   Time 
    Current
                                       Dload 
    Upload   Total   Spent Left 
    Speed
      0       0         0         0         0         0 
           0         0 --:--:-- --:--:-- --:--:--  0* Connected to d (/run/podman/podman.sock) port 80 (#0)
    > GET /v1.0.0/libpod/images/json HTTP/1.1
    > Host: d
    > User-Agent: curl/7.65.3
    > Accept: */*
    > 
    * Mark bundle as not supporting multiuse
    < HTTP/1.1 200 OK
    < Content-Type: application/json
    < Date: Sun, 21 Jun 2020 19:16:51 GMT
    < Transfer-Encoding: chunked
    < 
    { [3980 bytes data]
    100  5871       0 
    5871           0         0 
    38625         0 --:--:-- --:--:-- --:--:-- 39668
    * Connection #0 to host d left intact
    [
      {
               "Id": "eb7134a03cd6bd8a3de99c16cf174d66ad2d93724bac3307795efcd8aaf914c5",
               "RepoTags": [
               "registry.fedoraproject.org/fedora:32",
               "registry.fedoraproject.org/fedora:latest"
               ],
               "Created": "2020-05-15T06:48:40Z",
               "Size": 207772777,
               "Labels": {
               "license": "MIT",
               "name": "fedora",
               "vendor": "Fedora Project",
               "version": "32"
               },
               "Contenedores": 1,
               "Names": [
               "registry.fedoraproject.org/fedora:32",
               "registry.fedoraproject.org/fedora:latest"
               ],
    … (removed a number of lines for brevity)
               "Names": [
               "quay.io/containers/podman:latest"
               ],
               "Digest": "sha256:1af265e9e85af5d7a4f626c65b136d4eb610b5c7f84873a05e103e91352d6387",
               "Digests": [
               "sha256:1af265e9e85af5d7a4f626c65b136d4eb610b5c7f84873a05e103e91352d6387"
               ],
               "History": [
               "5a9a0e9623e33dec906d8d38908d0681cee1e09fbdf282fa65fe8dfb878ab943",
               "<missing>",
               "<missing>",
               "<missing>",
               "<missing>",
               "eb7134a03cd6bd8a3de99c16cf174d66ad2d93724bac3307795efcd8aaf914c5"
               ]
      }
    ]

    ¡Eso es!

    Es así de fácil hacer funcionar el servicio REST API. Está listo para extraer imágenes, crear contenedores y realizar cualquier otra operación necesaria de Podman. También puede llamar al servicio directamente a través del podman --remote opción, o incluir llamadas de Podman en su Vamos programas que usan enlaces Go. Los detalles sobre todo esto estarán disponibles pronto.

    Conclusión

    Es cierto que en esta introducción solo he mostrado una parte muy pequeña de los comandos disponibles y las formas de llamar a la API REST. Se está trabajando para crear un blog más detallado. Mientras tanto, los comandos disponibles están documentados en el Podman Documentación API para su uso La principal conclusión de hoy es que, si puede hacerlo desde la línea de comandos de Podman, también debería poder hacerlo con esta nueva API REST.

    Ahora recuerda, ¡es nuestro pequeño secreto!

    Artículos de interés

    Subir