Note:

Uso de la composición de archivos con Podman en Oracle Linux

Introducción

Podman y Docker Compose son herramientas de línea de comandos que utilizan un archivo YAML con formato especial como entrada para ensamblar y, a continuación, ejecutar uno o varios contenedores como aplicaciones. Estas herramientas permiten a los desarrolladores desarrollar, probar y, a continuación, entregar a sus usuarios un único archivo YAML para su aplicación y utilizar solo un comando para iniciarlo y detenerlo de forma fiable. Esta portabilidad y fiabilidad han hecho que el uso de la especificación Compose sea muy popular entre los usuarios y desarrolladores, y se está convirtiendo cada vez más en un requisito.

Objetivos

En este tutorial, aprenderá a:

Requisitos

Despliegue de Oracle Linux

Nota: Si se ejecuta en su propio arrendamiento, lea el proyecto linux-virt-labs GitHub README.md y complete los requisitos antes de desplegar el entorno de prácticas.

  1. Abra un terminal en el escritorio Luna.

  2. Clone el proyecto linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Cambie al directorio de trabajo.

    cd linux-virt-labs/ol
    
  4. Instale las recopilaciones necesarias.

    ansible-galaxy collection install -r requirements.yml
    
  5. Despliegue el entorno de prácticas.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e update_all=true
    

    El entorno de prácticas libres necesita la variable adicional local_python_interpreter, que define ansible_python_interpreter para las reproducciones que se ejecutan en localhost. Esta variable es necesaria porque el entorno instala el paquete RPM para el SDK para Python de Oracle Cloud Infrastructure, que se encuentra en los módulos python3.6.

    La unidad de despliegue por defecto utiliza la CPU AMD y Oracle Linux 8. Para utilizar una CPU Intel u Oracle Linux 9, agregue -e instance_shape="VM.Standard3.Flex" o -e os_version="9" al comando de despliegue.

    Importante: Espere a que el cuaderno de estrategias se ejecute correctamente y alcance la tarea de pausa. En esta etapa del manual, se ha completado la instalación de Oracle Linux y las instancias están listas. Tome nota de la reproducción anterior, que imprime las direcciones IP públicas y privadas de los nodos que despliega y cualquier otra información de despliegue necesaria al ejecutar el ejercicio práctico.

Configurar Podman para trabajar con archivos de composición

Podman introdujo el soporte para la funcionalidad Docker Compose en Podman v3.2.0, después de que se introdujo el soporte limitado en Podman v3.0.0, lo que introdujo la capacidad de usar Docker Compose desde Podman. Más recientemente, Podman v4.1.0 amplió el soporte de la funcionalidad de Docker Compose para incluir el uso de Docker Compose v2.2 y posteriores.

Instalación del paquete Docker de Podman

Instale el paquete podman-docker, que permite que Podman funcione de forma nativa con los comandos de Docker.

sudo dnf install -y podman-docker

Instalación de Docker Compose

  1. Descargue e instale Compose independiente.

    sudo curl -SL https://github.com/docker/compose/releases/download/v2.28.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
    

    Salida de ejemplo:

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
    100 60.1M  100 60.1M    0     0   103M      0 --:--:-- --:--:-- --:--:--  378M
    
  2. Aplique permisos ejecutables al binario.

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. Confirmar creación de trabajos independientes.

    docker-compose version
    

    La salida devuelve la versión actual de docker-compose.

    Nota: Instalar Compose de forma autónoma, como se describe aquí, requiere el uso de docker-compose up, por ejemplo, en lugar de la sintaxis docker-compose up estándar utilizada al ejecutar la utilidad Docker.

Inicio del Socket Podman

Podman y Docker Compose requieren el inicio del socket Podman, que permite que las llamadas del sistema de cada programa se comuniquen con Podman a través de este proceso controlado por systemd.

  1. Configure el socket de Podman.

    systemctl --user enable --now podman.socket
    systemctl --user status podman.socket
    

    La salida muestra el socket systemd active (listening).

  2. Obtener la ubicación del socket Podman del usuario.

    podman info | grep -i remotesocket -A2
    
  3. Verifique que el socket funcione con cURL.

    curl -w "\n" -H "Content-Type: application/json" --unix-socket /run/user/$UID/podman/podman.sock http://localhost/_ping
    

    La ruta de acceso para --unix-socket coincide con la ruta proporcionada desde podman info. La salida de este comando debe devolver OK, lo que indica una configuración correcta de la funcionalidad Compose que está lista para trabajar con archivos docker-compose.yaml.

Instalación de Podman Composer

Podman Compose es una biblioteca de Python 3 que implementa la especificación de composición para ejecutarla con Podman.

  1. Instale y active el repositorio developer_EPEL.

    Oracle Linux 8:

    sudo dnf install -y oracle-epel-release-el8
    sudo dnf config-manager --enable ol8_developer_EPEL
    

    Oracle Linux 9:

    sudo dnf install -y oracle-epel-release-el9
    sudo dnf config-manager --enable ol9_developer_EPEL
    

    Oracle Linux 10:

    sudo dnf install -y oracle-epel-release-el10
    sudo dnf config-manager --enable ol10_u0_developer_EPEL
    
  2. Instale el paquete Podman Compose.

    sudo dnf install -y podman-compose 
    
  3. Confirme que Podman Compose funciona mostrando su versión.

    podman-compose version
    

Creación de un archivo compuesto

Este archivo Compose permite extraer e iniciar la aplicación designada.

  1. Cree un directorio para la prueba y cambie al directorio correspondiente.

    mkdir -p projects/echo
    cd projects/echo
    
  2. Cree el archivo de redacción.

    cat >> compose.yaml << EOF
    services:
      web:
        image: k8s.gcr.io/echoserver:1.4
        ports:
          - "${HOST_PORT:-8080}:8080"
    EOF
    
    
  3. Revise el archivo de redacción.

    cat compose.yaml
    

Ejecutar composición de Podman

  1. Cambie al mismo directorio que el archivo Compose.

    Importante: Los comandos podman-compose no funcionarán a menos que esté en el mismo directorio que el archivo compose.yaml.

    cd ~/projects/echo/
    
  2. Inicie la aplicación echoserver.

    podman-compose up -d
    

    La salida muestra a Podman desplegando el contenedor e iniciándolo con los parámetros enumerados en el archivo Compose. La opción -d indica a Podman que ejecute el contenedor en segundo plano en modo desasociado. Podman solo extraerá las imágenes a las que se hace referencia en el archivo Compose si no están presentes localmente.

  3. Pruebe que la aplicación echoserver esté activa y en ejecución.

    curl -X POST -d "foobar" http://localhost:8080/; echo
    

    Salida de ejemplo:

    CLIENT VALUES:
    client_address=10.89.0.2
    command=POST
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://localhost:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    content-length=6
    content-type=application/x-www-form-urlencoded
    host=localhost:8080
    user-agent=curl/7.61.1
    BODY:
    foobar
    
  4. Además, confirme el éxito revisando los logs.

    podman-compose logs
    

    Salida de ejemplo:

    ``texto ['podman', '–version', ''] utilizando la versión de podman: 4.2.0 podman logs echo_web_1 10.89.0.2 - - [17/enero/2023:12:46:47 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1" código de salida: 0

  5. Use la utilidad Podman Compose para ver los contenedores en ejecución.

    podman-compose ps
    

    Salida de ejemplo:

    ['podman', '--version', '']
    using podman version: 4.2.0
    podman ps -a --filter label=io.podman.compose.project=echo
    CONTAINER ID  IMAGE                      COMMAND               CREATED        STATUS            PORTS                   NAMES
    f4053947c8c1  k8s.gcr.io/echoserver:1.4  nginx -g daemon o...  2 minutes ago  Up 2 minutes ago  0.0.0.0:8080->8080/tcp  echo_web_1
    exit code: 0
    

    Puede ver otros comandos de la utilidad Compose de Podman ejecutando podman-compose --help.

  6. Ahora es el momento de detener el contenedor echoserver.

    podman-compose down
    
  7. Elimine la red de puente de Podman adicional creada durante el despliegue de contenedores.

    podman network rm echo_default
    

Confirmar el funcionamiento de Docker Compose

  1. Defina la variable de entorno para la ubicación del socket de Podman.

    export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
    
  2. Inicie la aplicación echoserver.

    Este comando debe ejecutarse desde el mismo directorio que el archivo Compose.

    docker-compose up -d
    

    La salida muestra la creación de la red echo_default y el contenedor echo-web-1.

  3. Acceda a la aplicación del contenedor.

    curl -X POST -d "foobar" http://localhost:8080/; echo
    

    Salida de ejemplo:

    [oracle@ol-server ~]$ curl -X POST -d "foobar" http://localhost:8080/; echo
    CLIENT VALUES:
    client_address=10.89.0.2
    command=POST
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://localhost:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    content-length=6
    content-type=application/x-www-form-urlencoded
    host=localhost:8080
    user-agent=curl/7.61.1
    BODY:
    foobar
    
  4. Inspeccione los logs y confirme que esta aplicación ha enviado correctamente una solicitud de devolución.

    docker-compose logs
    

    Salida de ejemplo:

    ``texto echo-web-1 | 10.89.0.1 - - [17/enero/2023:14:48:56 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1"

  5. Obtenga una lista de los contenedores que comenzaron a usar la utilidad Docker Compose.

    docker-compose ps
    

    Salida de ejemplo:

    echo-web-1        k8s.gcr.io/echoserver:1.4   "nginx -g daemon off;"   web             12 minutes ago      Up 12 minutes       8080/tcp
    
  6. Detenga la aplicación echoserver.

    docker-compose down
    

Información Importante

Si instala los ejecutables podman-compose y docker-compose en el mismo sistema, es esencial tener en cuenta que no es posible invocarlos indistintamente. Lo que queremos decir con esta sentencia es que si inicia un proceso con podman-compose, no puede consultarlo ni pararlo con docker-compose ni viceversa.

  1. Comience por usar Podman Compose.

    podman-compose up -d
    
  2. Intente mostrar los contenedores en ejecución mediante Docker Compose.

    docker-compose ps
    

    La salida devuelve una lista vacía que muestra que, desde su perspectiva, no se está ejecutando ningún contenedor.

  3. Sin embargo, el uso de Podman Compose confirma que el contenedor se está ejecutando.

    podman-compose ps
    

    Salida de ejemplo:

    ['podman', '--version', '']
    using podman version: 4.2.0
    podman ps -a --filter label=io.podman.compose.project=echo
    CONTAINER ID  IMAGE                      COMMAND               CREATED        STATUS            PORTS                   NAMES
    55335e797296  k8s.gcr.io/echoserver:1.4  nginx -g daemon o...  4 minutes ago  Up 4 minutes ago  0.0.0.0:8080->8080/tcp  echo_web_1
    exit code: 0
    

Pasos Siguientes

Esto confirma cómo utilizar un archivo Compose con Podman mediante podman-compose o docker-compose.

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.