Nota:

Configuración de contenedores Podman con Oracle Linux Automation Engine

Introducción

Este tutorial le guiará a través de la creación de un cuaderno de estrategias para instalar Podman y ejecutar un contenedor de Oracle Linux mediante la herramienta de gestión de la configuración Oracle Linux Automation Engine.

Antes de continuar: si no está familiarizado con la ejecución de cuadernos de estrategias, consulte nuestro tutorial de introducción, Escritura de un libro de estrategias con Oracle Linux Automation Engine.

Al ejecutar cuadernos de estrategias, Oracle Linux Automation Engine ejecuta las tareas en máquinas que coinciden con la directiva hosts del cuaderno de estrategias. Estos hosts se suelen definir en un archivo inventory y pueden ser remotos o locales. En este tutorial, vamos a demostrar cómo ejecutar un cuaderno de estrategias localmente.

Objetivos

En este laboratorio, aprenderá a:

Requisitos

Recopilaciones

Nota: al utilizar el entorno de prácticas gratuitas, consulte Aspectos básicos del laboratorio de Oracle Linux para conocer la conexión y otras instrucciones de uso.

Las recopilaciones son un formato de distribución para el contenido de Oracle Linux Automation Engine que puede incluir libros de estrategias, roles, módulos y plugins. En este tutorial se instalará la recopilación containers.podman mediante un archivo requirements.yml. Un archivo requirements.yml permite instalar recopilaciones, roles o ambos en función de las claves definidas en el archivo.

Crear un archivo de requisitos

  1. Si aún no está conectado, abra un terminal y conéctese mediante ssh al sistema ol-server.

    ssh oracle@<ip_address_of_ol-server>
    
  2. Cree un directorio de trabajo.

    mkdir -p ~/podman-project
    
  3. Cambie al directorio de trabajo.

    cd ~/podman-project
    
  4. Cree el archivo requirements.yml con el editor que elija. Aquí, utilizaremos vi.

    vi requirements.yml
    
  5. Introduzca el modo de inserción vi escribiendo i.

  6. Agregue la clave y el nombre de cualquier recopilación utilizada en el libro de reproducción.

    Ejemplo:

    ---
    collections:
      - name: containers.podman
    
  7. Una vez que haya terminado de editar el archivo requirements.yml, guarde y cierre el archivo. Si utiliza vi, puede hacerlo escribiendo ESC, :wq! y ENTER.

Instalación de recopilaciones mediante el archivo de requisitos

  1. Extraiga las recopilaciones e instálelas localmente.

    ansible-galaxy collection install -r requirements.yml
    

    Una vez que el comando se ejecuta correctamente, los resultados son similares a los mostrados.

    Salida de ejemplo:

    [oracle@ol-server podman-project]$ ansible-galaxy collection install -r requirements.yml 
    Starting galaxy collection install process
    Process install dependency map
    Starting collection install process
    Downloading https://galaxy.ansible.com/download/containers-podman-1.10.1.tar.gz to /home/oracle/.ansible/tmp/ansible-local-519108lfh458k/tmpikc963ue/containers-podman-1.10.1-aqgw3x1r
    Installing 'containers.podman:1.10.1' to '/home/oracle/.ansible/collections/ansible_collections/containers/podman'
    containers.podman:1.10.1 was installed successfully
    

Crear el libro de reproducción

Los cuadernos de estrategias de Oracle Linux Automation Engine constan de reproducciones compuestas por tareas asignadas a los hosts. Estas tareas ejecutan principalmente módulos idempotentes. Idempotency está obteniendo el mismo resultado si se ejecuta el libro de reproducción una o varias veces. En este tutorial se demostrará la idempotencia mediante la creación del libro de reproducción en etapas y su ejecución entre cada cambio.

Instalar Podman

Antes de ejecutar un contenedor Podman, necesitamos instalar los paquetes Podman. Instalaremos los paquetes mediante el módulo container-tools:ol8 desde el repositorio ol8_appstream de Oracle Linux.

Desde un terminal del sistema ol-server:

  1. Cambie al nivel superior del directorio de trabajo, si no sigue en ese directorio.

    cd ~/podman-project
    
  2. Cree el archivo del cuaderno de estrategias.

    vi podman-playbook.yml
    
  3. Introduzca el modo de inserción vi escribiendo i.

  4. Agregue lo siguiente al archivo del cuaderno de estrategias.

    Ejemplo:

    ---
    - hosts: localhost
      connection: local
      collections:
        - containers.podman
      tasks:
    
      - name: install podman
        ansible.builtin.dnf:
          name: '@container-tools:ol8'
          state: present
        become: yes
    

    Un cuaderno de estrategias y los nombres de las tareas pretenden hacer que el libro de juegos sea autodocumentado. La información que figura a continuación explicará algunos puntos más.

    • hosts: localhost: indica las tareas que se deben ejecutar en el host local.
    • connection: local: garantiza que el enlace permanece local y no se ejecuta mediante SSH.
    • collections: proporciona una lista de las recopilaciones utilizadas en la reproducción.
    • become: yes: eleva la tarea dentro de esta sección del cuaderno de estrategias para que se ejecute con el privilegio sudo de forma predeterminada.


  5. Guarde y cierre el archivo. Si utiliza vi, puede hacerlo escribiendo ESC, :wq! y ENTER.

  6. Ejecutar el cuaderno de estrategias

    ansible-playbook podman-playbook.yml
    

    El comando se debe ejecutar correctamente con resultados similares a los mostrados.

    Salida de ejemplo:

    [WARNING]: provided hosts list is empty, only localhost is available. Note that
    the implicit localhost does not match 'all'
    
    PLAY [localhost] ***************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [install podman] **********************************************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    
  7. Verificar el paquete Podman instalado

    podman --version
    

    Salida de ejemplo:

    [oracle@ol-server podman-project]$ podman --version
    podman version 4.2.0
    

Extraer una imagen

Una vez instalado Podman, podemos extraer imágenes de nuestro registro de elección y ubicarlas localmente. En este paso, extraerá la imagen de Oracle Linux del registro de contenedor GitHub.

Puede obtener información adicional sobre las imágenes del desarrollador de Oracle Linux aquí.

  1. Edite el archivo del cuaderno de estrategias.

    vi podman-playbook.yml
    
  2. Introduzca el modo de inserción vi escribiendo i.

  3. Agregue la siguiente tarea al final del archivo del cuaderno de estrategias.

    Asegúrese de dejar una línea en blanco entre las tareas de legibilidad y seguir las reglas de sintaxis YAML y la alineación.

    Ejemplo:

    - name: pull oraclelinux:8 from GitHub
      podman_image:
        name: ghcr.io/oracle/oraclelinux:8
    
  4. Guarde y cierre el archivo. Si utiliza vi, puede hacerlo escribiendo ESC, :wq! y ENTER.

  5. Ejecutar el cuaderno de estrategias

    ansible-playbook podman-playbook.yml
    

    El comando se debe ejecutar correctamente con resultados similares a los mostrados.

    Salida de ejemplo:

    [WARNING]: provided hosts list is empty, only localhost is available. Note that
    the implicit localhost does not match 'all'
    
    PLAY [localhost] ***************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [install podman] **********************************************************
    ok: [localhost]
    
    TASK [pull oraclelinux:8 from GitHub] ******************************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    
  6. Verifique que Podman ha extraído la imagen.

    podman images
    

    Salida de ejemplo:

    [oracle@ol-server podman-project]$ podman images
    REPOSITORY                  TAG         IMAGE ID      CREATED       SIZE
    ghcr.io/oracle/oraclelinux  8           97e22ab49eea  20 hours ago  254 MB
    

Ejecutar una imagen de contenedor

En lugar de simplemente extraer una imagen, también podemos extraer y ejecutar un contenedor basado en una imagen en un solo paso. Vamos a extraer y ejecutar la imagen de desarrollador de Oracle Linux NGINX en este paso.

  1. Edite el archivo del cuaderno de estrategias.

    vi podman-playbook.yml
    
  2. Introduzca el modo de inserción vi escribiendo i.

  3. Agregue la siguiente tarea al final del archivo del cuaderno de estrategias.

    Asegúrese de dejar una línea en blanco entre las tareas de legibilidad y seguir las reglas de sintaxis YAML y la alineación.

    Ejemplo:

    - name: run image
      containers.podman.podman_container:
        name: my-ol8
        image: ghcr.io/oracle/oraclelinux8-nginx:1.18
        state: started
        detach: yes
        expose:
          - '80'
          - '443'
        publish:
          - '8080:80'
    

    La información que figura a continuación explicará algunos puntos más.

    • name: nombre del contenedor.
    • image: ruta de repositorio (o nombre de imagen) y etiqueta utilizados para crear el contenedor.
    • state: comprueba si hay un contenedor en ejecución que coincida con el nombre y la configuración. Podman crea e inicia un nuevo contenedor cuando no encuentra ninguna coincidencia.
    • detach: ejecuta el contenedor en modo desasociado.
    • expose: Exponga un puerto o un rango de puertos.
    • publish: permite publicar el puerto o el rango de puertos de un contenedor en el host.


  4. Guarde y cierre el archivo. Si utiliza vi, puede hacerlo escribiendo ESC, :wq! y ENTER.

  5. Ejecutar el cuaderno de estrategias

    ansible-playbook podman-playbook.yml
    

    El comando se debe ejecutar correctamente con resultados similares a los mostrados.

    Salida de ejemplo:

    [WARNING]: provided hosts list is empty, only localhost is available. Note that
    the implicit localhost does not match 'all'
    
    PLAY [localhost] ***************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [install podman] **********************************************************
    ok: [localhost]
    
    TASK [pull oraclelinux:8 from GitHub] ******************************************
    ok: [localhost]
    
    TASK [run image] ***************************************************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    
  6. Verifique que el contenedor se está ejecutando.

    podman ps
    

    Salida de ejemplo:

    [oracle@ol-server podman-project]$ podman ps
    CONTAINER ID  IMAGE                                   COMMAND               CREATED         STATUS             PORTS                 NAMES
    5f7a28cc4c6b  ghcr.io/oracle/oraclelinux8-nginx:1.18  nginx -g daemon o...  18 minutes ago  Up 18 minutes ago  0.0.0.0:8080->80/tcp  my-ol8
    

    La salida muestra que el contenedor ha estado activo y en ejecución durante 18 minutos.

  7. Pare el contenedor.

    Con CONTAINER NAMES de la salida anterior, ejecute:

    podman stop <CONTAINER NAMES>
    

    Salida de ejemplo:

    [oracle@ol-server podman-project]$ podman stop my-ol8
    my-ol8
    [oracle@ol-server podman-project]$ podman ps
    CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
    

Ejecución de una imagen de contenedor con un volumen

Podman crea volúmenes agregando una asignación de montaje de enlace de un directorio local a un directorio dentro del contenedor. Demostraremos esta función ejecutando el mismo contenedor NGINX y sustituyendo una página index.html personalizada por el valor por defecto de NGINX.

  1. Edite el archivo del cuaderno de estrategias.

    vi podman-playbook.yml
    
  2. Introduzca el modo de inserción vi escribiendo i.

  3. Cree el directorio local.

    Podemos realizar este paso de forma eficiente y manual una vez desde la línea de comandos, pero vamos a automatizarlo. La automatización de este paso garantiza que el directorio exista cada vez que se ejecute el cuaderno de estrategias.

    Antes de la tarea run image, agregue estas tareas, que crean un directorio y el archivo index.html.

    Asegúrese de dejar una línea en blanco entre las tareas de legibilidad y seguir las reglas de sintaxis YAML y la alineación.

    Ejemplo:

      - name: ensure dest directory exists
        ansible.builtin.file:
          path: "/home/oracle/nginx/"
          state: directory
    
      - name: create empty file
        ansible.builtin.file:
          path: "/home/oracle/nginx/index.html"
          state: touch
          mode: '0755'
    
      - name: create index.html
        ansible.builtin.copy:
          dest: "/home/oracle/nginx/index.html"
          content: |
            Hello! Welcome to Oracle Linux Containers.
    
  4. A continuación, agregue la siguiente opción al final de la tarea run image.

    Ejemplo:

    volume: "/home/oracle/nginx:/usr/share/nginx/html:Z"
    

    La opción volume crea un montaje de enlace entre el directorio source:destination. La opción :Z aborda cualquier problema de permisos de SELinux relacionado con el montaje de enlace. Podman hace esto volviendo a etiquetar el contenido del volumen para que coincida con la etiqueta dentro del contenedor.

    Aquí es una versión completa del cuaderno de estrategias como referencia.

  5. Guarde y cierre el archivo. Si utiliza vi, puede hacerlo escribiendo ESC, :wq! y ENTER.

  6. Ejecutar el cuaderno de estrategias

    ansible-playbook podman-playbook.yml
    

    El comando se debe ejecutar correctamente con resultados similares a los mostrados.

    Salida de ejemplo:

    [WARNING]: provided hosts list is empty, only localhost is available. Note that
    the implicit localhost does not match 'all'
    
    PLAY [localhost] ***************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [install podman] **********************************************************
    ok: [localhost]
    
    TASK [pull oraclelinux:8 from GitHub] ******************************************
    ok: [localhost]
    
    TASK [ensure dest directory exists] ********************************************
    changed: [localhost]
    
    TASK [create empty file] *******************************************************
    changed: [localhost]
    
    TASK [create index.html] *******************************************************
    changed: [localhost]
    
    TASK [run image] ***************************************************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=7    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    
  7. Verifique que el contenedor se está ejecutando.

    podman ps
    

    Salida de ejemplo:

    CONTAINER ID  IMAGE                                   COMMAND               CREATED         STATUS             PORTS                 NAMES
    f74aa726d470  ghcr.io/oracle/oraclelinux8-nginx:1.18  nginx -g daemon o...  10 minutes ago  Up 10 minutes ago  0.0.0.0:8080->80/tcp  my-ol8
    
  8. Verifique que el archivo index.html existe.

    ls -l /home/oracle/nginx
    

    Salida de ejemplo:

    [oracle@ol-server podman-project]$ ls -l /home/oracle/nginx/
    total 4
    -rwxr-xr-x. 1 oracle oracle 41 Nov  5 16:46 index.html
    
  9. Compruebe el montaje de enlace.

    Utilice curl para mostrar la página index.html del contenedor.

    curl localhost:8080
    

    Donde 8080 es la asignación de puerto local al puerto 80 en el contenedor.

    Salida de ejemplo:

    [oracle@ol-server podman-project]$ curl localhost:8080
    Hello! Welcome to Oracle Linux Containers.
    

Resumen

La salida curl muestra una conexión correcta al servidor web NGINX que se ejecuta en el contenedor de podman, que se despliega localmente mediante Oracle Linux Automation Engine.

Para obtener más información

Documentación de Oracle Linux Automation Manager
Formación de Oracle Linux Automation Manager
Estación de formación de Oracle Linux

Más recursos de aprendizaje

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

Para obtener documentación sobre los productos, visite Oracle Help Center.