Contenedores con podman
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)
Sin embargo, a pesar de que casi todos los comandos se pueden transcribir tal cuál de docker a podman, el segundo tiene diferencias en cuanto a su funcionamiento.
Diferencias de 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 las imágenes y contenedores que han sido descargadas por este mismo usuario. Por esto mismo,podemos hacer uso de podman sin ser necesariamente los administradores del sistema.
- 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.
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, para más información:
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...