Skip to content

Instantly share code, notes, and snippets.

@pdrok
Last active June 12, 2025 22:44
Show Gist options
  • Select an option

  • Save pdrok/f8acd2fc71c83a7528c96773e25e305a to your computer and use it in GitHub Desktop.

Select an option

Save pdrok/f8acd2fc71c83a7528c96773e25e305a to your computer and use it in GitHub Desktop.

FLISoL2025

Estos son los materiales que he utilizado para la preparacion de la charla:

Presentación:

https://docs.google.com/presentation/d/1Ozfobpi2DiTgzFEXBjBwoiIeoqDSHloUNOgcT_DBqnE/edit?usp=sharing

PDF

Podman en pocas palabras

  • Administrador de Pods
  • Soporte rootless desde el primer día
  • Sin daemon, pero con un modelo fork-exec
  • El modelo fork-exec se adapta al subsistema de auditoría
  • Enfoque en la seguridad
  • Excelente integración con los sistemas Linux modernos
  • Perfecto para sysadmins y desarrolladores

Podman sin privilegios (Rootless Podman)

  • Podman admite contenedores rootless desde el primer día
  • Implementado a través de espacios de nombres de usuario (User Namespaces)
  • Corre como root dentro del contenedor, sin ser root fuera de él
  • Puede ejecutarse como cualquier usuario dentro de los contenedores
  • Incluso funciona en entornos HPC muy restringidos (con un solo mapeo posible)

Crear container

podman build -t pd-nginx .

Ejecutar container

podman run -it -d  -p 8081:80 pd-nginx

Correr Pods en Podman

Crear el pod

podman pod create --name wordpress_full -p 8080:80

Agregar contenedores al pod

podman run -d --pod wordpress_full \
  -e MYSQL_DATABASE=wordpress \
  -e MYSQL_ROOT_PASSWORD=root \
  mysql:9.3.0
podman run -d --pod wordpress_full \
  -e WORDPRESS_DB_USER=root \
  -e WORDPRESS_DB_PASSWORD=root \
  -e WORDPRESS_DB_NAME=wordpress \
  -e WORDPRESS_DB_HOST=127.0.0.1 \
  wordpress:php8.3-apache

Ver procesos en el pod

podman pod top wordpress_full

Generar manifiestos Kubernetes

podman generate kube wordpress_full > wordpress_full.yaml

Desplegar el pod desde el manifiesto

podman play kube wordpress_full.yaml

Ulitizado un compose

Instalar podman-compose

creen un venv de python puden usar el venv de python en mi caso usar uv

uv init
uv venv
source .venv/bin/activate
uv add podman-compose

Caso no quieran crear el venv tendran que pasarle un argumento a mas

pip install podman-compose --break-system-packages

Creamos un archivo compose.yaml con el siguiente contenido

services:
  db:
    image: mysql:9.3.0
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_ROOT_PASSWORD: root
      MYSQL_ROOT_HOST: '%'
    restart: always
    ports:
      - "3306:3306"
  
  wordpress:
    image: wordpress:php8.3-apache
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: root
      WORDPRESS_DB_NAME: wordpress
    ports:
      - "8080:80"
    depends_on:
      - db
    restart: always
podman-compose up -d

Buscar imagenes:

podman search busybox
podman pull busybox
? Please select an image: 
  ▸ docker.io/library/busybox:latest
    ghrc.io/busybox:latest
    quay.io/busybox:latest
podman-compose up
3abe7c83716cd6efc0a622f46b833f0f28beba6451219fe85e27c96d75a2e8f9
? Please select an image: 
  ▸ docker.io/library/mysql:9.3.0
    ghrc.io/mysql:9.3.0
    quay.io/mysql:9.3.0

Configurar registros:

mkdir -p ~/.config/containers/
echo "unqualified-search-registries= ['docker.io', 'ghrc.io','quay.io']" > ~/.config/containers/registries.conf

Algunos Servicios de registros:

Servicio de registro de contenedores de Red Hat.

quay.io/my-repository/nginx

Servicio de registro de contenedores de GitHub

ghcr.io/my-repository/nginx

Servicio de registro de contenedores de Docker

docker.io/my-repository/nginx

Servicio de registro de contenedores de AWS

public.ecr.aws/docker/library/nginx

Systemd

Crear pod

podman pod create --name=al-pod
7418c6b91e942a9a6a591acd4c24b7c0c926137a3f7555075cad6d75b87b44c5

Agregar contenedores al pod

podman create --pod=al-pod --name=container-a -t alpine top
c9ebacd988c0e8ed3ef87dcd7d135dcf2b8e85a6d569ec57a922603f72eb3078
podman create --pod=al-pod --name=container-b -t alpine top
11408199d2bb4230ff8855415d8bc272b1f09052dad9faf84bd2f8d3e0d1c0f2

Crear carpeta para los archivos del systemd del usuario

mkdir -p $HOME/.config/systemd/user
cd $HOME/.config/systemd/user

$ podman generate systemd --new --files --name al-pod
/home/pdrok/.config/systemd/user/pod-al-pod.service
/home/pdrok/.config/systemd/user/container-container-b.service
/home/pdrok/.config/systemd/user/container-container-a.service

Recargar el daemon

systemctl --user daemon-reload

Iniciar el servicio del pod y asegurar que este funcionado

systemctl --user start pod-al-pod.service

systemctl --user is-active pod-al-pod.service
active
podman pod ps
POD ID        NAME        STATUS      CREATED         INFRA ID      # OF CONTAINERS
89ecef529fb1  al-pod      Running     33 seconds ago  2071bea27142  3
podman container ps
CONTAINER ID  IMAGE                            COMMAND     CREATED         STATUS             PORTS       NAMES
2071bea27142  localhost/podman-pause:4.3.1-0               44 seconds ago  Up 45 seconds ago              89ecef529fb1-infra
c5c9605c2f42  docker.io/library/alpine:latest  top         44 seconds ago  Up 44 seconds ago              container-a
8eb130545303  docker.io/library/alpine:latest  top         44 seconds ago  Up 44 seconds ago              container-b

Referencias:

https://podman.io/docs/installation

https://www.redhat.com/en/blog/podman-run-pods-systemd-services

https://mkdev.me/posts/dockerless-part-1-which-tools-to-replace-docker-with-and-why

https://www.youtube.com/watch?v=ZgXpWKgQclc

https://www.youtube.com/watch?v=AGkM2jGT61Y

https://www.youtube.com/watch?v=jeTKgAEyhsA

https://danishpraka.sh/posts/build-a-container-image-from-scratch/

https://www.ibm.com/es-es/topics/hpc

https://kubernetes.io/docs/concepts/workloads/pods/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment