Nota:

Uso de Archivos de Redacción con Podman

Introducción

Docker Compose es una herramienta de línea de comandos que utiliza un archivo YAML con formato especial como entrada para ensamblar y, a continuación, ejecutar contenedores únicos o múltiples como aplicaciones. Esto permite 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 ha hecho que Docker Compose no solo sea muy popular entre los usuarios y desarrolladores, sino cada vez más un requisito.

Objetivos

En este laboratorio se muestra cómo instalar y utilizar podman-compose y docker-compose con Podman, y cómo verificar que funcionan con un archivo docker-compose.yaml simple.

Requisitos

Exención de responsabilidad de soporte de Oracle

Oracle no proporciona soporte técnico para la secuencia de pasos que se proporcionan en las siguientes instrucciones porque estos pasos hacen referencia a programas de software y sistemas operativos que Oracle no proporciona. En este tutorial se proporcionan instrucciones opcionales solo para su comodidad.

Para obtener más información sobre el método soportado de Oracle para el desarrollo y uso de servicios basados en Podman, consulte https://docs.oracle.com/en/operating-systems/oracle-linux/podman/.

Configuración del entorno de prácticas

Nota: Al utilizar el entorno de prácticas gratuitas, consulte Oracle Linux Lab Basics para obtener instrucciones de conexión y otras instrucciones de uso.

  1. Abra un terminal y conéctese mediante ssh a la instancia de ol-server si aún no está conectada.

    ssh oracle@<ip_address_of_instance>
    

Confirmar trabajos de Podman

El paquete de herramientas de contenedor de Oracle Linux proporciona las versiones más recientes de Podman, Buildah, Skopeo y las dependencias asociadas.

  1. Compruebe la versión de Podman.

    podman -v
    
  2. Confirme que la CLI de Podman está funcionando.

    podman run quay.io/podman/hello
    

    Resultado de ejemplo:

    [oracle@ol-server ~]$ podman run quay.io/podman/hello
    Trying to pull quay.io/podman/hello:latest...
    Getting image source signatures
    Copying blob f82b04e85914 done  
    Copying config dbd85e09a1 done  
    Writing manifest to image destination
    Storing signatures
    !... Hello Podman World ...!
    
             .--"--.           
           / -     - \         
          / (O)   (O) \        
       ~~~| -=(,Y,)=- |         
        .---. /`  \   |~~      
     ~/  o  o \~~~~.----. ~~   
      | =(X)= |~  / (O (O) \   
       ~~~~~~~  ~| =(Y_)=-  |   
      ~~~~    ~~~|   U      |~~ 
    
    Project:   https://github.com/containers/podman
    Website:   https://podman.io
    Documents: https://docs.podman.io
    Twitter:   @Podman_io
    

Configuración de Podman para Trabajar con Archivos de Redacción

Podman introdujo el soporte para la funcionalidad de Docker Compose en Podman v3.2.0, después de que se introdujo un soporte limitado en Podman v3.0.0, lo que introdujo la capacidad de utilizar Docker Compose desde dentro de 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 superiores.

En los siguientes pasos se describe cómo instalar y configurar podman-compose y docker-compose.

Instalación del paquete Podman Docker

Esto permite a Podman trabajar de forma nativa con comandos de Docker.

  1. Instale el paquete podman-docker.

    sudo dnf install -y podman-docker
    

Instalación de Docker Compose

Nota:

La instalación de Compose de manera independiente, como se describe aquí, requiere el uso de docker-compose en lugar de la sintaxis estándar utilizada al utilizar la utilidad Docker de docker compose. En otras palabras, sustituya la sintaxis docker compose up por docker-compose up en su lugar.

  1. Descargar e instalar Compose independiente.

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

    Resultado de ejemplo:

    [oracle@ol-server ~]$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
      % 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 42.8M  100 42.8M    0     0   158M      0 --:--:-- --:--:-- --:--:--  158M
    
    
  2. Aplique permisos ejecutables al binario.

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

    docker-compose version
    

    Resultado de ejemplo:

    [oracle@ol-server ~]$ docker-compose version
    Docker Compose version v2.15.1
    
    

Iniciar el socket de Podman

Los siguientes pasos son necesarios para que la funcionalidad de Docker Compose funcione mediante la creación de un socket de Unix.

  1. Configure el socket de Podman con estos pasos.

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

    Resultado de ejemplo:

    [oracle@ol-server ~]$ sudo systemctl enable --now podman.socket
    Created symlink /etc/systemd/system/sockets.target.wants/podman.socket -> /usr/lib/systemd/system/podman.socket.
    [oracle@ol-server ~]$ sudo systemctl status podman.socket
    * podman.socket - Podman API Socket
       Loaded: loaded (/usr/lib/systemd/system/podman.socket; enabled; vendor preset)
       Active: active (listening) since Thu 2023-01-19 20:58:20 GMT; 16s ago
         Docs: man:podman-system-service(1)
       Listen: /run/podman/podman.sock (Stream)
       CGroup: /system.slice/podman.socket
    
    Jan 19 20:58:20 ol-server systemd[1]: Listening on Podman API Socket.
    
  2. Verifique que el socket funcione como se espera con curl.

sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping

Resultado de ejemplo:

[oracle@ol-server ~]$ sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping
OK
[oracle@ol-server ~]$

Si la salida de este comando devuelve OK, la funcionalidad Compose se ha configurado correctamente para trabajar con archivos docker-compose.yaml.

Instalación de Podman Compose

Podman Compose es una biblioteca Python 3 que implementa la especificación compuesta para ejecutar con Podman.

  1. Antes de instalar Podman Compose, confirme que pip se ha actualizado a la última versión.

    sudo -H pip3 install --upgrade pip
    
  2. Instale el paquete Podman Compose.

    sudo pip3 install podman-compose 
    

    Al ejecutar pip3 install como sudo, se pueden ignorar los mensajes de ADVERTENCIA.

  3. Confirme que Podman Compose funciona.

    podman-compose version
    

    Resultado de ejemplo:

    [oracle@ol-server ~]$ podman-compose version
    ['podman', '--version', '']
    using podman version: 4.2.0
    podman-composer version  1.0.3
    podman --version 
    podman version 4.2.0
    exit code: 0
    

Creación de un archivo de composición de Docker

Este archivo docker-compose.yaml permite extraer e iniciar la aplicación designada.

  1. Cree un directorio para la prueba.

    mkdir -p Documents/examples/echo
    
  2. Cambie al directorio.

    cd Documents/examples/echo
    
  3. Cree el archivo docker-compose.yaml.

    cat >> docker-compose.yaml << EOF
    ---
    version: '3' 
    services: 
      web: 
        image: k8s.gcr.io/echoserver:1.4
        ports:
            - "${HOST_PORT:-8080}:8080" 
    EOF
    
  4. Revise el docker-compose.yaml recién creado.

    cat docker-compose.yaml
    

    Resultado de ejemplo:

    [oracle@ol-server echo]$ cat docker-compose.yaml 
    ---
    version: '3' 
    services: 
      web: 
        image: k8s.gcr.io/echoserver:1.4
        ports:
            - "8080:8080"
    

Confirmar que Podman Compose está funcionando

  1. Cambie al directorio donde se encuentra el archivo docker-compose.

    Importante: los comandos podman-compose no funcionarán a menos que esté en el directorio donde se encuentra el archivo docker-compose.yaml.

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

    podman-compose up -d
    

    Resultado de ejemplo:

    [oracle@ol-server echo]$ podman-compose up -d
    ['podman', '--version', '']
    using podman version: 4.2.0
    ** excluding:  set()
    ['podman', 'network', 'exists', 'echo_default']
    ['podman', 'network', 'create', '--label', 'io.podman.compose.project=echo', '--label', 'com.docker.compose.project=echo', 'echo_default']
    ['podman', 'network', 'exists', 'echo_default']
    podman create --name=echo_web_1 --label io.podman.compose.config-hash=123 --label io.podman.compose.project=echo --label io.podman.compose.version=0.0.1 --label com.docker.compose.project=echo --label com.docker.compose.project.working_dir=/home/oracle/examples/echo --label com.docker.compose.project.config_files=docker-compose.yaml --label com.docker.compose.container-number=1 --label com.docker.compose.service=web --net echo_default --network-alias web -p 8080:8080 k8s.gcr.io/echoserver:1.4
    Trying to pull k8s.gcr.io/echoserver:1.4...
    Getting image source signatures
    Copying blob d3c51dabc842 done  
    Copying blob a3ed95caeb02 done  
    Copying blob 6d9e6e7d968b done  
    Copying blob 412c0feed608 done  
    Copying blob cd23f57692f8 done  
    Copying blob dcd34d50d5ee done  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob b4241160ce0e done  
    Copying blob 7abee76f69c0 done  
    Writing manifest to image destination
    Storing signatures
    1b54b75ca13786d33df6708da1d83ecce14b055e78b03007c3c4e1f441e7139c
    exit code: 0
    

    Nota: Al igual que con Podman, los contenedores a los que se hace referencia en el archivo docker-compose.yaml solo se extraen si aún no están presentes en el sistema.

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

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

    Resultado de ejemplo:

    [oracle@ol-server echo]$ 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. Además, confirme el éxito mediante la revisión de los logs.

    podman-compose logs
    

    Resultado de ejemplo:

    [oracle@ol-server echo]$ podman-compose logs
    ['podman', '--version', '']
    using podman version: 4.2.0
    podman logs echo_web_1
    10.89.0.2 - - [17/Jan/2023:12:46:47 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1"
    exit code: 0
    
    
  5. Use la utilidad Podman Compose para ver los contenedores en ejecución.

    podman-compose ps
    

    Resultado de ejemplo:

    [oracle@ol-server echo]$ podman-compose ps   
    ['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
    

    Nota: Consulte otros comandos de la utilidad Podman Compose ejecutando podman-compose --help. Sin embargo, estos comandos adicionales están fuera del ámbito de esta práctica.

  6. Ahora es el momento de detener el servicio echoweb.

    podman-compose down
    

Confirmar que Docker Compose está funcionando

  1. (Opcional) Cambie al directorio donde se encuentra el archivo docker-compose.

    Importante: los comandos docker-compose no funcionarán a menos que esté en el directorio donde se encuentra el archivo docker-compose.yaml.

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

    sudo /usr/local/bin/docker-compose up -d
    

    Resultado de ejemplo:

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose up -d
    [+] Running 0/0
    [+] Running 0/1echo-web-1  Starting                                                                                               0.0
    [+] Running 0/1echo-web-1  Starting                                                                                               0.1
    [+] Running 0/1echo-web-1  Starting                                                                                               0.2
    [+] Running 0/1echo-web-1  Starting                                                                                               0.3
    [+] Running 0/1echo-web-1  Starting                                                                                               0.4
    [+] Running 0/1echo-web-1  Starting                                                                                               0.5
    [+] Running 0/1echo-web-1  Starting                                                                                               0.6
    [+] Running 0/1echo-web-1  Starting                                                                                               0.7
    [+] Running 1/1echo-web-1  Starting                                                                                               0.8
     ��� Container echo-web-1  Started                                                                                                0.8s
    

    NOTA:

    Si se devuelve la siguiente salida al ejecutar este comando:

    ��� Container echo-web-1  Starting                                                                                               0.9s
    Error response from daemon: cannot listen on the TCP port: listen tcp4 :8080: bind: address already in use
    

    No se preocupe, solo significa que el comando podman-compose down no se ejecutó y el contenedor echoserver iniciado anteriormente con podman-compose aún se está ejecutando. Siga los pasos anteriores para detenerlo.

  3. Pruebe que el contenedor se esté ejecutando.

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

    Resultado 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. Como antes, utilice la utilidad Docker Compose para inspeccionar los logs y confirmar que esta aplicación ha devuelto una solicitud correcta.

    sudo /usr/local/bin/docker-compose logs
    

    Resultado de ejemplo:

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose logs 
    echo-web-1  | 10.89.0.1 - - [17/Jan/2023:14:48:56 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1"
    
    
  5. La utilidad Docker Compose también proporciona una forma de revisar los contenedores iniciados por el archivo Compose.

    sudo /usr/local/bin/docker-compose ps
    

    Resultado de ejemplo:

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

    Nota: Consulte otros comandos de la utilidad Docker Compose ejecutando docker-compose --help. Sin embargo, estos comandos adicionales están fuera del ámbito de esta práctica.

  6. Detenga el servicio echoweb.

    sudo /usr/local/bin/docker-compose down
    

    Resultado de ejemplo:

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose down
    [+] Running 0/0
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.1
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.2
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.3
    [+] Running 2/1echo-web-1  Removing                                                                                                   0.4
     ��� Container echo-web-1  Removed                                                                                                    0.4s
     ��� Network echo_default  Removed                                                                                                    0.0s
    

Información importante

Si los ejecutables podman-compose y docker-compose se han instalado en el mismo sistema, es importante tener en cuenta que no es posible invocarlos de manera intercambiable. Esto significa que si podman-docker inicia un proceso, no se puede consultar ni parar mediante la utilidad docker-compose, o viceversa, como se muestra en el siguiente ejemplo:

  1. Cambie al directorio donde se encuentra el archivo de redacción.

    Importante: los comandos podman-compose o docker-compose no funcionarán a menos que esté en el directorio donde se encuentra el archivo docker-compose.yaml.

    cd ~/Documents/examples/echo/
    
  2. Empiece por utilizar Podman Compose.

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

    sudo /usr/local/bin/docker-compose ps
    

    Resultado de ejemplo

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose ps
    NAME                IMAGE               COMMAND             SERVICE             CREATED             STATUS              PORTS
    
  4. Sin embargo, el uso de Podman Compose confirma que el contenedor se está ejecutando.

    podman-compose ps
    

    Resultado de ejemplo:

    [oracle@ol-server echo]$ podman-compose ps
    ['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
    

Resumen

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

Para más información

Ver otros recursos relacionados:

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 los productos, visite Oracle Help Center.