Este tutorial explica cómo comenzar con Podman en los sistemas operativos Linux. Al final de este tutorial de Podman, aprenderá los conceptos básicos de Podman, como buscar y descargar imágenes, crear un nuevo contenedor a partir de la imagen, ejecutar un contenedor, eliminar un contenedor y crear su propia imagen a partir del contenedor y más.
Antes de comenzar con Podman, asegúrese de haber instalado Podman en su máquina Linux.
- Qué es Podman y cómo instalar Podman en Linux
Empezar con Podman
Podman proporciona una interfaz de línea de comandos (CLI) similar a Docker motor de contenedor De hecho, Podman pretende ser un reemplazo directo para el cliente docker proporcionado por Docker.
Los comandos de Podman y Docker son casi iguales. Simplemente puede reemplazar docker
con podman
en la mayoría de los comandos docker. Por ejemplo, docker run
el comando se convierte en podman run
y docker build
se convierte en podman build
y así sucesivamente.
Incluso puedes crear un docker
alias para podman
como a continuación:
$ alias docker=podman
A partir de ahora, puede usar tanto docker
y podman
comandos al mismo tiempo. Por ejemplo, si ejecuta docker
ps, ejecutará automáticamente podman
comando ps. ¡La transición de Docker a Podman se ha vuelto mucho más fácil!
1. Obtener ayuda de Podman
Lo primero que probablemente querrá hacer después de instalar cualquier aplicación es consultar su sección de ayuda.
Para ver el manual de ayuda de Podman junto con la lista de subcomandos disponibles y opciones generales, ejecute:
$ podman --help
Para aprender el uso de cualquier subcomando, por ejemplo attach
, simplemente haz:
$ podman attach --help
2. Buscar imágenes
Afortunadamente, las imágenes creadas por Docker y Podman son compatibles con el estándar OCI. De modo que Podman puede enviar y extraer imágenes de registros de contenedores como Docker Hub y Quay.io .
Busquemos imágenes de Alpine Linux usando el comando:
$ podman search alpine
Como puede ver, Podman enumera las imágenes de Alpine tanto de Docker hub como de Quay.
Cuando descargas imágenes, puedes elegir desde dónde quieres obtenerlas.
Del mismo modo, puede buscar imágenes basadas en Arch Linux como se muestra a continuación:
$ podman search archlinux
Docker hub and Quay tiene muchas imágenes de diferentes tipos. Ya sea una aplicación o un sistema operativo, encontrará las imágenes de contenedor preconstruidas de estos registros.
3. Descargar imágenes
A los efectos de esta guía, descargaré la imagen base universal (UBI) de Redhat 8.
Para descargar la imagen de Redhat con Podman, ejecute:
$ podman pull redhat/ubi8
Se le pedirá que elija un registro de contenedor desde el que descargar. Elegí el concentrador Docker. Verá una pequeña flecha delante del registro seleccionado.
? Please select an image: registry.fedoraproject.org/redhat/ubi8:latest registry.access.redhat.com/redhat/ubi8:latest ▸ docker.io/redhat/ubi8:latest quay.io/redhat/ubi8:latest
La imagen del contenedor se descargará del registro elegido.
✔ docker.io/redhat/ubi8:latest Trying to pull docker.io/redhat/ubi8:latest... Getting image source signatures Copying blob a50df8fd88fe done Copying blob 1cadda38f72d done Copying config 0ced1c7c9b done Writing manifest to image destination Storing signatures 0ced1c7c9b23d0e107c7b15d5a0017abbbcf7e64e49a4c9f9efa1b9589ca8b68
Puede descargar y ejecutar diferentes tipos de imágenes independientemente del tipo de distribución que utilice. Por ejemplo, puede descargar y utilizar imágenes de Alpine en un host de Fedora y viceversa.
$ podman tirar alpino
Incluso puede descargar una versión específica de una imagen. El siguiente comando descarga la imagen de la versión 20.04 de Ubuntu:
$ podman pull ubuntu:20.04
Dado que usamos Podman como usuario no root, todas las imágenes de contenedores se almacenan en el directorio de inicio del usuario, es decir, $HOME/.local/share/containers/storage
, en lugar de /var/lib/containers
.
$ ls ~/.local/share/containers/storage/ cache libpod mounts overlay overlay-containers overlay-images overlay-layers storage.lock tmp userns.lock
4. Ver imágenes
Para ver la lista de imágenes descargadas localmente, ejecute:
$ imágenes podman
Salida de muestra:
REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/ubuntu 20.04 1318b700e415 7 days ago 75.2 MB docker.io/redhat/ubi8 latest 0ced1c7c9b23 13 days ago 234 MB docker.io/library/alpine latest d4ff818577bc 6 weeks ago 5.87 MB
Como puede ver, el resultado anterior enumera el nombre del repositorio donde descargamos las imágenes, la etiqueta de la imagen, la identificación de la imagen, cuándo se crea la imagen y el tamaño de la imagen.
Para aquellos que se preguntan, el TAG se refiere a una instantánea particular de la imagen de Ubuntu (por ejemplo, 20.04 y más reciente). TAG es solo un nombre adicional a una imagen local. El ID DE LA IMAGEN (Por ejemplo, 1318b700e415) es el identificador único de la imagen de Ubuntu.
5. Ejecutar contenedores
Se puede iniciar un contenedor usando la etiqueta de imagen o la identificación de imagen.
Comencemos un nuevo contenedor con la imagen UBI de Redhat usando su etiqueta:
$ podman run -it ubi8:latest
Este comando crea un contenedor Redhat 8 usando ubi8:latest
imagen y conecta el contenedor a la terminal para que pueda interactuar con él.
Aquí,
-i
: nos permite hacer una conexión interactiva tomando el estándar en (STDIN) del contenedor.-t
:Asigna una nueva Pseudo Terminal dentro del contenedor de Redhat 8.ubi8:latest
:Contenedor Redhat 8 con la ETIQUETA "más reciente".
Después de iniciar el contenedor, aterrizará automáticamente en el caparazón del contenedor (símbolo del sistema):
¿Notaste el número 607a288c810d
en la salida anterior? Es la identificación del contenedor.
Aviso: Tenga en cuenta que el ID de contenedor y el ID de imagen de Docker son diferentes .
Puedes empezar a jugar con tu Contenedor ahora.
Para volver a la Terminal de su anfitrión sin salir del Contenedor, presione CTRL+p
seguido de CTRL+q
.
Ahora se lo desconectará del contenedor y lo regresará a la consola de la máquina host. El contenedor seguirá ejecutándose en segundo plano.
Para salir del contenedor, simplemente escriba exit
desde la consola del Contenedor y presione la tecla ENTER:
# exit
Este comando cerrará el Contenedor en ejecución.
Si desea ejecutar un contenedor con la IDENTIFICACIÓN DE LA IMAGEN, simplemente reemplace la ETIQUETA de la imagen (ubi8:más reciente) con la Id. de la imagen (0ced1c7c9b23) en el comando anterior:
$ podman run -it 0ced1c7c9b23
Esto iniciará el contenedor Redhat 8.
6. Ejecutar contenedores en segundo plano
También puede ejecutar Contenedores en segundo plano separados.
Para ejecutar un Contenedor en modo separado, usamos -d
bandera:
$ podman run -it -d ubi8:latest
Cuando ejecutamos el Contenedor en modo separado, Podman mostrará la ID del Contenedor en la salida estándar.
a4846b2454b1eb63e6d532b0f7ef4a05ca19f965caf9cd0d4a2ce17131a05e29
Verifiquemos los contenedores en ejecución usando el comando:
$ podman ps
Ahora el contenedor se ejecuta en segundo plano.
Puede adjuntarlo como se describe en la siguiente sección.
7. Adjuntar y separar de contenedores
Como se indicó en la sección anterior, puede desconectarse de manera segura de un contenedor en ejecución presionando CTRL+p
seguido de CTRL+q
. Esto le permitirá volver a la Terminal del host.
Para volver a adjuntarlo al contenedor, primero busque el ID del contenedor en ejecución o su nombre usando podman ps
comando:
$ podman ps
Salida de muestra:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 607a288c810d docker.io/redhat/ubi8:latest /bin/bash 2 hours ago Up 2 hours ago cool_cannon
Aquí, 607a288c810d
es el ID del contenedor.
Y luego simplemente escribe podman attach
Comando seguido de la ID del contenedor como se muestra a continuación:
$ podman attach 607a288c810d
También puede adjuntarlo usando el nombre del contenedor como se muestra a continuación:
$ podman attach cool_cannon
Para desconectarse del Contenedor, simplemente presione CTRL+p
y CTRL+q
.
8. Ver contenedores en ejecución
Para buscar o enumerar los contenedores en ejecución, escriba:
$ podman ps
Salida de muestra:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e783c0202b7d docker.io/library/alpine:latest /bin/sh 37 seconds ago Up 38 seconds ago optimistic_murdock
Esto solo enumerará los contenedores en ejecución. Si desea enumerar los contenedores en ejecución y detenidos, use -a
bandera.
$ podman ps -a
Salida de muestra:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56c20497cbcd docker.io/redhat/ubi8:latest /bin/bash 3 hours ago Exited (0) 3 hours ago wizardly_albattani d23672b15cff docker.io/redhat/ubi8:latest /bin/bash 3 hours ago Exited (0) 3 hours ago nifty_merkle 89b2c038e1ba docker.io/redhat/ubi8:latest /bin/bash 3 hours ago Exited (0) 2 hours ago xenodochial_euler 607a288c810d docker.io/redhat/ubi8:latest /bin/bash 2 hours ago Exited (0) About a minute ago cool_cannon e783c0202b7d docker.io/library/alpine:latest /bin/sh 43 seconds ago Up 43 seconds ago optimistic_murdock
9. Eliminar contenedor automáticamente después de cerrarlo
Es posible que desee probar un Contenedor y simplemente eliminarlo tan pronto como haya terminado con el Contenedor. Si es así, puede eliminar automáticamente el Contenedor después de cerrarlo usando --rm
bandera:
$ podman run -it --rm ubi8:latest
Una vez que salga del Contenedor, se eliminará automáticamente.
10. Iniciar y detener contenedores
Como ya se indicó, podemos crear múltiples Contenedores usando la misma imagen. Esta es una de las mayores ventajas de los contenedores en comparación con las máquinas físicas o virtuales.
Para crear múltiples Contenedores nuevos, podemos usar podman run
como se describe en "5. Ejecutar contenedores" sección.
Para iniciar (encender) un Contenedor existente, simplemente hacemos:
$ podman start <container_name>
De manera similar, podemos detener (apagar) un comando en ejecución con el comando:
$ podman stop <container_name>
Déjame mostrarte un ejemplo, para que lo entiendas mejor.
Primero, busque la lista de todos los Contenedores:
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56c20497cbcd docker.io/redhat/ubi8:latest /bin/bash 2 days ago Exited (0) 2 days ago wizardly_albattani d23672b15cff docker.io/redhat/ubi8:latest /bin/bash 2 days ago Exited (0) 2 days ago nifty_merkle 89b2c038e1ba docker.io/redhat/ubi8:latest /bin/bash 2 days ago Exited (0) 2 days ago xenodochial_euler 607a288c810d docker.io/redhat/ubi8:latest /bin/bash 2 days ago Exited (0) 2 days ago cool_cannon e783c0202b7d docker.io/library/alpine:latest /bin/sh 2 days ago Exited (0) 2 days ago optimistic_murdock
El nombre de los Contenedores se muestra en los NOMBRES sección (última columna) de la salida anterior.
Voy a iniciar el Contenedor llamado wizardly_albattani
usando el comando:
$ podman start wizardly_albattani
Comprobemos si se ha iniciado:
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56c20497cbcd docker.io/redhat/ubi8:latest /bin/bash 2 days ago Up 7 seconds ago wizardly_albattani
Sí, subió hace 7 segundos.
Para detener el Contenedor, simplemente haga:
$ podman stop wizardly_albattani
11. Asignar nombre a contenedores
Si observa detenidamente el resultado de los comandos anteriores, Podman asigna nombres aleatorios cada vez que inicia un contenedor. Si no nombra sus Contenedores, Podman los nombrará automáticamente.
Echa un vistazo a la siguiente captura de pantalla. He comenzado el mismo Contenedor con la misma imagen dos veces. Después de salir del contenedor y reiniciarlo por segunda vez, obtiene un nuevo nombre incluso si usé la misma imagen.
Los contenedores obtienen un nuevo nombre cada vez que los cerramos y los iniciamos cada vez.
Sin embargo, puede asignar un nombre estático a los contenedores con --name
marca como a continuación:
$ podman run -it -d --name ostechnix_redhat ubi8:latest
El comando anterior creará un nuevo Contenedor en modo separado y lo nombrará como ostechnix_redhat
.
Para ver la lista de contenedores en ejecución, hacemos:
$ podman pd
Salida de muestra:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6fa78116dcb7 docker.io/redhat/ubi8:latest /bin/bash 4 seconds ago Up 5 seconds ago ostechnix_redhat
¿Notaste el nombre del Contenedor? Le hemos dado un nombre personalizado (es decir, ostechnix_redhat
) al Contenedor.
12. Cree imágenes personalizadas
Podman no es solo para descargar y ejecutar contenedores desde imágenes preconfiguradas. También puede crear sus imágenes personalizadas a partir de imágenes existentes.
Primero, inicie un contenedor existente o ejecute uno nuevo.
Voy a crear un nuevo contenedor de Ubuntu:
$ podman run -it 1318b700e415
Ahora estás dentro del Contenedor.
[email protected]:/#
Simplemente instale, actualice o elimine cualquier aplicación en el Contenedor.
A los efectos de esta guía, instalaré el servidor web Apache:
[email protected]:/# apt update
[email protected]:/# apt install apache2 -y
[email protected]:/# service apache2 start
Una vez que haya terminado, sepárelo del contenedor y regrese a la terminal del host presionando CTRL+p
y CTRL+q
.
¡Tenga en cuenta que el Contenedor todavía se está ejecutando en segundo plano!
Ahora, construya la Imagen desde el Contenedor existente usando el comando:
$ podman commit b871b0fd5810 ostechnix/ubuntu_apache
Aquí,
b871b0fd5810
- ID de contenedor de Ubuntu.ostechnix
– Nombre del usuario que creó el contenedor.ubuntu_apache
– Nombre de la imagen creada por el usuario ostechnix.
Ahora compruebe si se crea la nueva imagen enumerando las imágenes disponibles:
$ podman images
Salida de muestra:
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/ostechnix/ubuntu_apache latest 6c9b2fb66400 25 seconds ago 222 MB docker.io/library/ubuntu 20.04 1318b700e415 10 days ago 75.2 MB docker.io/redhat/ubi8 latest 0ced1c7c9b23 2 weeks ago 234 MB docker.io/library/alpine latest d4ff818577bc 7 weeks ago 5.87 MB
Como puede ver en el resultado anterior, una nueva imagen llamada ubuntu_apache
se crea.
Empecemos un nuevo Contenedor con esta imagen:
$ podman run -it --rm --name apache_webserver -p 8080:80 localhost/ostechnix/ubuntu_apache
Aquí, estoy ejecutando Container con una imagen recién creada en el paso anterior. También estoy mapeando el puerto local 8080
en el sistema local al puerto 80
dentro del contenedor.
Una vez que se inicia el Contenedor, asegúrese de que el servidor web Apache se inicie con el comando:
[email protected]:/# service apache2 start
Ahora, abra su navegador en su sistema host y navegue a http://localhost:8080
para verificar si el servidor web Apache se está ejecutando en el Contenedor.
13. Ver registros de contenedores
Para ver todo lo que hizo dentro de su Contenedor, simplemente puede verificar los registros del Contenedor usando el comando:
$ podman logs apache_webserver
14. Eliminar contenedores
Asegúrese de que los Contenedores estén detenidos:
$ podman stop ostechnix_redhat
Después de detener el Contenedor, elimínelo usando el comando:
$ podman rm ostechnix_redhat
Del mismo modo, elimine todos los Contenedores uno por uno como se muestra arriba.
Eliminar varios contenedores uno por uno puede ser una tarea tediosa si tiene una gran cantidad de contenedores. En lugar de eliminar uno tras otro, puede eliminar todos a la vez. ¡Sólo sé cuidadoso! ¡No hay forma de recuperar los Contenedores eliminados!
Para eliminar todos los contenedores detenidos de una sola vez, simplemente ejecute:
$ podman container prune
Escribe "Y"
para confirmar y presione ENTER
tecla para borrar los contenedores.
WARNING! This will remove all non running containers. Are you sure you want to continue? [y/N] y 2124a1fbc85a6be7d516e747723129bd7bb9c39d3a54951c9a81407d30ded1ab 54884f3375947026d4e87b99cb3a09e114c89120b101f5c8c1e614aca963975c 56c20497cbcdd9599c2fa729277ecf679ac29f79a0b06af3ae1a135726465ba7 607a288c810d2e605d9ba7590f8f7558ef5f96e87897a1cdde471ae9a74b36ad 69bbd87b44cb6c9a582749f4ad010b6b273e65f9fe424058fdc0bc55b188d7e4 89b2c038e1baf6ac59f0da8e43a7efedc7ba73a18ed8d704c879ffdbc7eb7f28 a4846b2454b1eb63e6d532b0f7ef4a05ca19f965caf9cd0d4a2ce17131a05e29 aa14879baf0919323730539dd949231d5bb89ca4207dd36c02a741316e6d0f18 b871b0fd5810f55e75bdd480d5fb34b09b0e293604f88896002a9368a607bf7e d23672b15cffc0a774227dc6b457a8bff5347073a112f6729d63ddf400f19dc7 e783c0202b7d7a6664e731feeff4bdb57a79df79080046ed2b728df4bce789d2 ebfd6210a6beedce43af0c41296e329d416128752ab603abd44c73117bf5dfd0
15. Eliminar imágenes
¡Puede eliminar las imágenes que ya no son necesarias!
Enumere todas las imágenes descargadas con el comando:
$ podman images
Salida de muestra:
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/ostechnix/ubuntu_apache latest 6c9b2fb66400 37 minutes ago 222 MB docker.io/library/ubuntu 20.04 1318b700e415 10 days ago 75.2 MB docker.io/redhat/ubi8 latest 0ced1c7c9b23 2 weeks ago 234 MB docker.io/library/alpine latest d4ff818577bc 7 weeks ago 5.87 MB
Ahora, elimine una imagen usando su ID de imagen o nombre, como se muestra a continuación:
$ podman rmi 6c9b2fb66400
Salida de muestra:
Untagged: localhost/ostechnix/ubuntu_apache:latest Deleted: 6c9b2fb66400138738ad12643d8461fbbb859f33d3be3c35181bb9ee9b11748d
Del mismo modo, elimine todas las demás imágenes no utilizadas,
Aviso: No puede eliminar una imagen que esté siendo utilizada actualmente por contenedores en ejecución o detenidos.
Conclusión
En este completo tutorial de Podman, brindamos 15 ejemplos prácticos sobre cómo comenzar con Podman en Linux. Si eres desarrollador, aprender Podman es muy importante para avanzar en tu carrera. Aprende a usar Podman a fondo. ¡Vale la pena tu tiempo!