Contenedores con podman

De Wiki de Sistemas Operativos
Revisión del 21:25 29 ene 2020 de Isaarrveg (discusión | contribuciones) (Algunas diferencias entre Podman y Docker)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

A primera vista, Podman es muy similar a Docker. Tan parecido es su uso que, para usar los comandos de podman, tan sólo tendremos que usar los de Docker y cambiar la palabra "docker" por "podman". Si queremos hacer esta sustitución automática, de forma que, aun poniendo docker, funcione podman, ejecutamos el siguiente comando:

alias docker=podman

(recomendado en la propia página de podman: https://podman.io/whatis.html)

Descarga de podman

En primer lugar, procuraremos tener la máquina virtual actualizada:

dnf search update
sudo dnf upgrade

A continuación, ejecutanos:

sudo dnf install podman

Una vez descargado, podemos consultar más información haciendo:

man podman

Construir una imagen a partir de un fichero Dockerfile

Seguimos los mismos pasos que si creáramos una imagen a partir de un fichero con docker. Para ello, podman hace uso de los mismos Dockerfiles, sin hacer modificaciones. Lo podemos comprobar con el Dockerfile de ejemplo de aplicaciones hug usado aquí. Con un editor de textos, como nano (que no viene por defecto instalado en la versión 31 de Fedora).

Para descargar nano:

sudo dnf install nano

Dockerfile:

                                
FROM python:alpine

ENV USERNAME="username"
RUN mkdir /app
RUN pip install hug
COPY endpoint.py /app
WORKDIR /app
CMD hug -f endpoint.py

endpoint.py:

                                
FROM python:alpine

ENV USERNAME="username"
RUN mkdir /app
RUN pip install hug
COPY endpoint.py /app
WORKDIR /app
CMD hug -f endpoint.py

Dentro de la carpeta que contiene estos 2 archivos, para construir la imagen, ejecutamos el siguiente comando:

podman build -t app:v1 -f Dockerfile .

Comprobamos que se ha creado la imagen correctamente:

podman images

Iniciamos un contenedor a partir de nuestra nueva imagen:

podman run -ti app:v1

Si todo funcionó bien, debería aparecer por pantalla:

/#######################################################################\
          `.----``..-------..``.----.
         :/:::::--:---------:--::::://.
        .+::::----##/-/oo+:-##----:::://
        `//::-------/oosoo-------::://.       ##    ##  ##    ##    #####
          .-:------./++o/o-.------::-`   ```  ##    ##  ##    ##  ##
             `----.-./+o+:..----.     `.:///. ########  ##    ## ##
   ```        `----.-::::::------  `.-:::://. ##    ##  ##    ## ##   ####
  ://::--.``` -:``...-----...` `:--::::::-.`  ##    ##  ##   ##   ##    ##
  :/:::::::::-:-     `````      .:::::-.`     ##    ##    ####     ######
   ``.--:::::::.                .:::.`
         ``..::.                .::         EMBRACE THE APIs OF THE FUTURE
             ::-                .:-
             -::`               ::-                   VERSION 2.6.0
             `::-              -::`
              -::-`           -::-
\########################################################################/

 Copyright (C) 2016 Timothy Edmund Crosley
 Under the MIT License


Serving on :8000...

Algunas diferencias entre Podman y Docker

  • La primera diferencia que nos encontramos, respecto a Docker, es que Podman no tiene servicio.
  • Podman no hace uso de un demonio.
  • En podman, un usuario sólo puede ver y utilizar los contenedores y las imágenes que hayan sido creadas o descargadas por este mismo usuario. Por esto mismo,podemos hacer uso de podman sin ser necesariamente los administradores del sistema. Por esto mismo, si se descarga una imagen con el usuario por defecto, "sudo podman images" no la mostrará.
  • Podman no posee todavía una herramienta de orquestación de contenedores oficial, ya que consideran que, por defecto, para esta tarea se emplea Kubernetes, para lo cuál Podman tiene comandos que facilitan su despligue con esta herramienta. Sin embargo, existe un proyecto third-party llamado podman-compose, que trata de ser la solución a la sustitución de docker-compose.