Este es uno de los capítulos del tutorial Tutorial de Podman. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.
Instalar Podman es algo relativamente sencillo, dependiendo del sistema operativo en el que lo quieras hacer. También, en el caso de Linux, depende, no solo, de la distribución sobre la que lo quieres hacer, sino también sobre la versión de la distribución. Pero, en general, es algo, que como verás es sencillo.
En particular, en este capítulo del tutorial de Podman, te acompañaré en la instalación de este gestor de contenedores, en dos plataformas distintas, primero Linux, y posteriormente en Windows.
En el caso de Linux, me centraré en las distribuciones Ubuntu, Debian y Raspberry Pi OS, mas que nada, porque estas son las que tengo a mano, y siempre quiero probar todo lo que aparece en los tutoriales.
Respecto a Windows, la instalación de Podman la realizaré con WSL2, Windows Subsystem for Linux versión 2, sobre el que hablé en el episodio 231 del podcast titulado Linux en Windows.
Como instalar Podman
Como te decía en la introducción, en este capítulo sobre como instalar Podman, te mostraré como hacerlo tanto en Linux como en Windows. Empezando por Linux.
En cualquiera de los casos, una vez hayas completado el como instalar Podman, no está de mas que realices una comprobación para que te asegures que todo funciona correctamente. Para ello, simplemente ejecuta la siguiente instrucción,
podman run hello-world
O en caso de que quieras recibir el saludo en español, también lo puedes probar con,
podman run atareao/hola-mundo
No te preocupes, que durante los siguientes capítulos del tutorial te mostraré como puedes hacer tu mismo esta imagen, subirla a los repositorios para poder utilizarla desde donde tu necesites.
Linux
En el caso de Linux, utilizaré tres distribuciones, Ubuntu, Debian y Raspberry Pi OS.
Ubuntu
En el caso de querer realizar la instalación de Podman en Ubuntu, te enfrentarás a dos situaciones, dependiendo de la versión de Ubuntu. Para el caso de versiones igual o superior a 20.10 la instalación es tan sencilla como ejecutar estas dos instrucciones en un terminal,
sudo apt update
sudo apt install podman
Para el caso de versiones anteriores a Ubuntu 20.10, tendrás que ejecutar estas cuatro instrucciones,
source /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install podman
Debian
En el caso de Debian, te encontrarás con la misma situación que la planteada en el apartado anterior. Depende básicamente de la versión de Debian que tengas. En el caso de Bullseye, la instalación es tan sencilla como ejecutar,
sudo apt update
sudo apt install podman
Para versiones anteriores,
echo 'deb https://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list
echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_10/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_10/Release.key | sudo apt-key add -
sudo apt-get update
sudo apt-get -y -t buster-backports install libseccomp2
sudo apt-get -y install podman
Raspberry Pi OS
En el caso de Rasbperry, depende de la arquitectura que hayas seleccionado. Si estás utilizando armhf
en este caso, si estás utilizando la versión 10, tienes que ejecutar las siguientes instrucciones,
# Raspbian 10
# First enable user namespaces as root user
echo 'kernel.unprivileged_userns_clone=1' | sudo tee -a /etc/sysctl.d/00-local-userns.conf
sudo systemctl restart procps
# Use buster-backports on Rasbian 10 for a newer libseccomp2
echo 'deb https://deb.debian.org/debian buster-backports main' | sudo tee -a /etc/apt/sources.list
echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Raspbian_10/ /' | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Raspbian_10/Release.key | sudo apt-key add -
# Add missing keys for buster-backports manually
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138
sudo apt-get update
sudo apt-get -y -t buster-backports install libseccomp2
sudo apt-get -y install podman
# Restart dbus for rootless podman. Do this for every user using containers.
# This command only works without root. One way to do this is to login as the
# user via SSH, so DBUS_SESSION_BUS_ADDRESS will be set correctly.
systemctl --user restart dbus
Si la arquitectura es arm64
en este caso, tienes que seguir exactamente los mismos pasos que he indicado anteriormente para Debian.
Windows
La instalación de Podman en Windows es casi tan sencilla como con Ubuntu, pero tienes que dar algún paso adicional. Aunque tampoco te tienes que preocupar, porque como verás a continuación es realmente sencillo. Lo mejor de todo, es que en unos pocos instantes, puedes estar levantando contenedores de forma sencilla.
Requisito básico para que esto funcione correctamente es que tengas instalado el WSL2. Si no sabes como instalarlo, te recomiendo que escuches el podcast 239 de Linux en Windows, y que revises las notas del podcast.
Una vez tengas instalado y funcionando el subsistema de de Windows para Linux tienes que instalar desde la tienda de aplicaciones Ubuntu. Una vez instalado Ubuntu, sigue los pasos que te indico a continuación,
El primer paso es añadir el repositorio e instalar Podman, para ello no tienes mas que seguir las instrucciones que detallo a continuación,
source /etc/os-release
sudo sh -c "echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x${NAME}_${VERSION_ID}/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/x${NAME}_${VERSION_ID}/Release.key -O Release.key
sudo apt-key add - < Release.key
sudo apt update
sudo apt install podman
Llegados a esto punto, si quieres levantar los contenedores sin necesidad de ganar derechos de administrador, es decir, sin privilegios de root, tienes que ejecutar la siguiente instrucción,
mkdir -p ~/.config/containers
cp /etc/containers/containers.conf ~/.config/containers/
sed -i 's/^\#\sevents_logger\s=\s\"journald\"/ events_logger = "file"/g' ~/.config/containers/containers.conf
Llegados a este punto ya pueds ejecutar la instrucción siguiente y comprobar que todo funciona como esperas,
podman run atareao/hola-mundo
Primeros pasos con Podman
Antes de profundizar en imágenes y contenedores, y ahora que has terminado la instalación de Podman en tu sistema operativo, estoy convencido de que no te vas a poder resistirte a ponerlo a prueba, a comenzar a utilizarlo. En este sentido, a continuación, te muestro algunas indicaciones para que comiences a dar tus primeros pasos con Podman.
Configuración adicional
Una de las características de Podman es la posibilidad de trabajar sin necesidad de ganar derechos de administrador, rootless mode. Sin embargo, para esto es necesario realizar algunas acciones.
- El primer paso es instalar
slirp4netns
. Si no me equivoco, al menos, en el caso de Ubuntu se instala con Podman, pero en cualquier caso, lo puedes instalar ejecutandosudo apt install slirp4netns
. - Tienes que instalar
fuse-overlayfs
y tenerlo habilitado. Si has instalado Podman antes que esta herramienta tienes que configurarlo de forma manual. Para ello, tienes que editar el archivo/etc/containers/storage.conf
y modificardriver
en la secciónstorage
aoverlay
, y por otro lado tienes que des comentarmount_program = "/usr/bin/fuse-overlayfs"
en la secciónstorage.options.overlay
. Es decir,
[storage]
driver = "overlay"
...
[storage.options.overlay]
mount_program = "/usr/bin/fuse-overlayfs"
...
De nuevo, indicarte que si instalaste Podman antes de instalar fuse-overlayfs
, tienes que borrar el siguiente directorio para que todo funcione perfectamente,
rm -rf ~/.local/share/containers/storage/
La ayuda
Podman, como no podía ser de otra forma, viene empaquetado con su propia ayuda, a la que puedes acceder fácilmente con tan solo ejecutar podman --help
. Esto te ofrece una ayuda básica para cada uno de sus comandos,
$ podman --help
Manage pods, containers and images
Usage:
podman [options] [command]
Available Commands:
attach Attach to a running container
auto-update Auto update containers according to their auto-update policy
build Build an image using instructions from Containerfiles
commit Create new image based on the changed container
...
Sin embargo puedes obtener mas ayuda para cada uno de los comandos ejecutando podman <comando> --help
, como puedes ver en el siguiente ejemplo que te muestro a continuación,
$ podman run --help
Run a command in a new container
Description:
Runs a command in a new container from the given image
Usage:
podman run [options] IMAGE [COMMAND [ARG...]]
Examples:
podman run imageID ls -alF /etc
podman run --network=host imageID dnf -y install java
podman run --volume /var/hostdir:/var/ctrdir -i -t fedora /bin/bash
Options:
--add-host strings Add a custom host-to-IP mapping (host:ip) (default [])
--annotation strings Add annotations to container (key:value
...
De la misma manera, puedes acceder a esta ayuda utilizando las páginas man
. Así para llegar a la ayuda de Podman simplemente tienes que ejecutar man podman
. Mientras que para tener la ayuda de cualquiera de los comandos, hay que hacerlo de forma ligeramente diferente man podman-<comando>
. Por ejemplo, para el mismo caso que has visto en el ejemplo anterior,
$ man podman-run
NAME
podman-run - Run a command in a new container
SYNOPSIS
podman run [options] image [command [arg ...]]
podman container run [options] image [command [arg ...]]
DESCRIPTION
Run a process in a new container. podman run starts a process with its own file
system, its own networking, and its own isolated process tree. The image which
starts the process may define defaults related to the process that will be run in
the container, the networking to expose, and more, but podman run gives final
control to the operator or administrator who starts the container from the image.
For that reason podman run has more options than any other Podman command.
Como tu mismo has podido observar, la ayuda que aparece en las manpages es mucho mas completa
Autocompletado
Aparte de la ayuda, otra herramienta que te puede ser de gran utilidad es el autocompletado. Al menos en el caso de Ubuntu y Bash este se instala por defecto, y funciona a la perfección, aunque por lo que puedo leer en GitHub, se hizo un merge donde se incluyó el autocompletado tanto para Zsh
como para Fish
.
El autocompletado te facilita el uso de podman, al igual que sucede con otras muchas herramientas directamente en el terminal. Simplemente tienes que introducir parte de una instrucción y pulsando la tecla tabulador
se producirá la magia.
Para que veas el funcionamiento en tiempo real, y si ya has probado a ejecutar hello-world
o hola-mundo
, ahora escribe podman run hol
y pulsa la tecla tab
. Si todo ha ido bien, tienes que ver como se completa y aparece podman run hola-mundo
.
Esto funciona tanto con los comandos y sub comandos de Podman, como con las imágenes y contenedores que tengas disponibles en tu equipo.
Conclusiones
Una vez instalado Podman, el siguiente paso, es comenzar a trabajar con imágenes, y posteriormente con los propios contenedores en si. Y luego ya todo lo que tu quieras. En el siguiente capítulo del tutorial, nos adentraremos en el uso de las imágenes con Podman.
Más información,
me salvaste el culo con el podman en raspbian 10
Muchas gracias por el comentario.
Saludo
Hola Atareao, lo primero muchas gracias!
seguí los pasos con WSL2, ubuntu 22.04 y no aparecía el archivo registries.conf en /etc/containers. Se ve que la instalación con el repositorio de opensuse ha cambiado. También he visto que hay un podman (version 3.4.4 a día de hoy) desde los repos oficiales de ubuntu así que desinstalando el ppa y el podman y volviendo a reinstallar podman simplemente desde los repos de ubuntu, ahora sí que me aparece el archivoregistires.conf.
Ya que te lo curras tanto con el blog, te pongo un par de erratas que puedes corregir de este post (igual en la útlima me he colado, pero creo que no. No me martirizaría con las erratas, creo que todo el mundo prefiere tus artículos que son de mucha de calidad en más cantidad, que menos cantidad pero con las tildes bien puestas 😉 a fin de cuentas lo sorprendente es que puedas producir taaanto contenido tan bueno, así que mis 10s! ) :
1. «está de mas» -> «está de más»
2. «te mostraré como puedes hacer tu mismo» -> «te mostraré cómo puedes hacer tú mismo»
3. «esta imagen, subirla a los repositorios para poder utilizarla desde donde tu necesites.» –> «esta imagen y subirla a los repositorios para poder utilizarla desde donde tú necesites.»
4. «ya pueds ejecutar» -> «ya puedes ejecutar»
5. «no te vas a poder resistirte» -> «no te vas a poder resistir»
6. «obtener mas ayuda» -> «obtener más ayuda»
7. «los propios contenedores en si» -> «los propios contenedores en sí»
de hecho, me he confundido y con esta instalación tampoco aparece ese archivo de registries.conf. Este es el contenido de la carpeta /etc/containers/:
libpod.conf policy.json registries.conf registries.conf.d
supongo que las instrucciones para correrlo sin sudo han cambiado bastante más.