<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?action=history&amp;feed=atom&amp;title=Podman_compose</id>
		<title>Podman compose - Historial de revisiones</title>
		<link rel="self" type="application/atom+xml" href="https://1984.lsi.us.es/wiki-ssoo/index.php?action=history&amp;feed=atom&amp;title=Podman_compose"/>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Podman_compose&amp;action=history"/>
		<updated>2026-05-14T01:03:36Z</updated>
		<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Podman_compose&amp;diff=5173&amp;oldid=prev</id>
		<title>Pneira: Página creada con «= Varios podman a la vez (podman-compose) =  Cuando queremos ejecutar varios contenedores a la vez y que estén conectados entre ellos fácilmente, utilizaremos podman-comp...»</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Podman_compose&amp;diff=5173&amp;oldid=prev"/>
				<updated>2025-12-16T13:14:41Z</updated>
		
		<summary type="html">&lt;p&gt;Página creada con «= Varios podman a la vez (podman-compose) =  Cuando queremos ejecutar varios contenedores a la vez y que estén conectados entre ellos fácilmente, utilizaremos podman-comp...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Varios podman a la vez (podman-compose) =&lt;br /&gt;
&lt;br /&gt;
Cuando queremos ejecutar varios contenedores a la vez y que estén conectados&lt;br /&gt;
entre ellos fácilmente, utilizaremos podman-compose, donde con un fichero de&lt;br /&gt;
configuración simple en yaml, tendremos toda la configuración de lo que vamos a&lt;br /&gt;
ejecutar.&lt;br /&gt;
&lt;br /&gt;
Primero vamos a instalar podman-compose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install podman-compose&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora veamos un pequeño ejemplo donde explicaremos todos los detalles para crear&lt;br /&gt;
un podman-compose, en este caso, el nombre por defecto de los ficheros suele ser&lt;br /&gt;
podman-compose.yml, y el contenido será similar a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
version: '3'&lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
  web:&lt;br /&gt;
    container_name: web&lt;br /&gt;
    restart: always&lt;br /&gt;
    build:&lt;br /&gt;
      context: .&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;8000:8000&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - /home/ubuntu/volume:/volumen:rw&lt;br /&gt;
    environment:&lt;br /&gt;
      USERNAME: test&lt;br /&gt;
  web2:&lt;br /&gt;
    container_name: web2&lt;br /&gt;
    build:&lt;br /&gt;
      dockerfile: Dockerfile&lt;br /&gt;
      context: .&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - web&lt;br /&gt;
    command: touch web2&lt;br /&gt;
  web3:&lt;br /&gt;
    container_name: web3&lt;br /&gt;
    restart: on-failure&lt;br /&gt;
    image: pstauffer/curl&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - web&lt;br /&gt;
    command: curl -X GET web:8000/welcome?username=web3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el podman-compose definimos diferentes servicios a ejecutar, en nuestro caso&lt;br /&gt;
hemos iniciado tres servicios diferentes, web, web2 y web3:&lt;br /&gt;
&lt;br /&gt;
El primer servicio, web:&lt;br /&gt;
&lt;br /&gt;
* container_name: para darle un nombre por defecto al contenedor cuando se cree&lt;br /&gt;
* restart: pueden ser:&lt;br /&gt;
** &amp;quot;no&amp;quot;: si la máquina termina, no se vuelve a iniciar (opción por defecto)&lt;br /&gt;
** always: siempre que el contenedor termine, intenta iniciarse de nuevo&lt;br /&gt;
** on-failure: solo intenta reiniciarse si el contenedor termina con fallo&lt;br /&gt;
** unless-stopped: solo reinicia el contenedor si el usuario es el que lo termina&lt;br /&gt;
* Utilizará el fichero Dockerfile creado en el paso 11 para generar la imagen a   usar.&lt;br /&gt;
* Expondrá el puerto 8000 del contenedor en el 8000 de nuestra máquina&lt;br /&gt;
* Montará un volumen, se hace de forma similar a la línea de comandos&lt;br /&gt;
* Creará una variable de entorno&lt;br /&gt;
&lt;br /&gt;
El segundo servicio, web2:&lt;br /&gt;
&lt;br /&gt;
* Utilizará el fichero Dockerfile también, la diferencia entre este y el primer servicio, es que si el nombre del Dockerfile cambia, tendremos que hacerlo de esta segunda forma, la primera por defecto solo buscará el fichero Dockerfile&lt;br /&gt;
* depends_on hará que para ejecutar este servicio, su dependencia tenga ya que estar iniciada&lt;br /&gt;
* Ejecutaremos un comando el cual sustituirá al comando de la imagen&lt;br /&gt;
&lt;br /&gt;
El tercer servicio, web3:&lt;br /&gt;
&lt;br /&gt;
* Utilizará la imagen ostauffer/curl que es un imagen mínima que contiene el comando curl&lt;br /&gt;
* restart: en este caso, hasta que el comando no se ejecute correctamente, se seguirá reiniciando el contenedor&lt;br /&gt;
* depends_on igual que el servicio 2, dependerá del servicio 1&lt;br /&gt;
* Ejecutaremos un comando para llamar desde el servicio 3 al servicio 1&lt;br /&gt;
&lt;br /&gt;
== Paso 13.1: Construir podman-compose ==&lt;br /&gt;
&lt;br /&gt;
En el caso de existir servicios que tengan Dockerfiles, esto hará que se construyan previamente, como hacer un podman build de cada uno de los servicios que contenga un Dockerfile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
podman-compose build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto se generarán las imágenes necesarias para ejecutar todos los servicios.&lt;br /&gt;
&lt;br /&gt;
== Paso 13.2: Iniciar podman-compose ==&lt;br /&gt;
&lt;br /&gt;
Para iniciar todos los servicios, ejecutaremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
podman-compose up -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Después de esto podremos ver el logs de todos los servicios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
podman-compose logs -f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí veremos que el servicio 3 ha conseguido llamar correctamente al servicio 1.&lt;br /&gt;
&lt;br /&gt;
Ahora veremos como podman-compose ha creado los contenedores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
podman ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida será similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                    NAMES&lt;br /&gt;
219a4118244c        pstauffer/curl      &amp;quot;curl -X GET web:800…&amp;quot;   6 seconds ago       Exited (0) 3 seconds ago                            web3&lt;br /&gt;
c97e894cb3ae        ubuntu_web2         &amp;quot;touch web2&amp;quot;             6 seconds ago       Exited (0) 4 seconds ago                            web2&lt;br /&gt;
f35d034204fc        ubuntu_web          &amp;quot;/bin/sh -c 'hug -f …&amp;quot;   6 seconds ago       Up 5 seconds               0.0.0.0:8000-&amp;gt;8000/tcp   web&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí vemos varios detalles:&lt;br /&gt;
&lt;br /&gt;
* El nombre que le hemos dado en el podman-compose ha funcionado correctamente&lt;br /&gt;
* Vemos que los comandos son los correctos también&lt;br /&gt;
* web2 está parado por que la política de reinicio es apagar cuando se termine de ejecutar un comando&lt;br /&gt;
* web 3 está parado por que el comando ha terminado con un salida correcta&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora que en el servicio web está todo correcto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
podman exec -ti web ash&lt;br /&gt;
echo $USERNAME&lt;br /&gt;
ls /volumen&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que tanto cambiar la variable de entorno como crear un&lt;br /&gt;
volumen ha funcionado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Paso 13.3: Parar podman-compose ==&lt;br /&gt;
&lt;br /&gt;
Para parar todos los servicios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
podman-compose down&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
podman ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que han desaparecido todos los contenedores.&lt;/div&gt;</summary>
		<author><name>Pneira</name></author>	</entry>

	</feed>