Note:
- Este tutorial está disponible en un entorno de laboratorio gratuito proporcionado por Oracle.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Configuración de contenedores Podman con Oracle Linux Automation Engine
Introducción
Oracle Linux Automation Engine permite a los usuarios crear un manual para instalar Podman y, a continuación, ejecutar y gestionar contenedores mediante la recopilación containers.podman.
Al ejecutar cuadernos de estrategias, Oracle Linux Automation Engine ejecuta las tareas en máquinas que coinciden con la directiva hosts:
en el cuaderno de estrategias. Estos hosts se definen normalmente en un archivo de inventario y pueden ser remotos o locales. En este tutorial, mostraremos cómo ejecutar un manual localmente.
Objetivos
En este tutorial, aprenderá a:
- Ejecutar manuales localmente
- Agregar una recopilación a un cuaderno de estrategias
- Instalar Podman
- Extraer y ejecutar un contenedor oraclelinux:9
Requisitos
-
Un sistema Oracle Linux con la siguiente configuración:
- un usuario no root con permisos sudo
- instalar Oracle Linux Automation Engine
Despliegue de Oracle Linux Automation Engine
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.
-
Abra un terminal en Luna Desktop.
-
Clone el proyecto
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Cambie al directorio de trabajo.
cd linux-virt-labs/olam
-
Instale las recopilaciones necesarias.
ansible-galaxy collection install -r requirements.yml
-
Actualizar la configuración de la instancia de Oracle Linux.
cat << EOF | tee instances.yml > /dev/null compute_instances: 1: instance_name: "ol-control-node" type: "control" olam_type: olae EOF
-
Cree un archivo de inventario.
cat << EOF | tee hosts > /dev/null localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6 EOF
-
Despliegue el entorno de prácticas.
ansible-playbook create_instance.yml -i hosts -e "@instances.yml"
El entorno de prácticas gratuitas necesita la variable adicional
ansible_python_interpreter
para localhost porque instala el paquete RPM para el SDK para Python de Oracle Cloud Infrastructure. La ubicación para instalar este paquete se encuentra en los módulos de Python por defecto del sistema según la versión de Oracle Linux. El uso de una variable de inventario evita que las reproducciones se ejecuten en hosts que no sean localeshost.La unidad de despliegue por defecto utiliza la CPU de AMD. Puede cambiar la unidad de las instancias transfiriendo una nueva definición de variable de unidad en la línea de comandos.
Por ejemplo:
-e instance_shape="VM.Standard3.Flex"
Del mismo modo, la versión por defecto de la imagen de Oracle Linux utiliza la variable
os_version
definida en el archivo `default_vars.yml. Puede modificar este valor transfiriendo la versión principal de Oracle Linux en la línea de comandos.Por ejemplo:
-e os_version="9"
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. Observe la reproducción anterior, que imprime las direcciones IP públicas y privadas de los nodos que despliega.
Recopilaciones
Las recopilaciones son un formato de distribución para el contenido de Oracle Linux Automation Engine que puede incluir manuales, roles, módulos y plugins. Este tutorial instalará la recopilación containers.podman
mediante un archivo requirements.yml
. Un archivo requirements.yml
permite la instalación de recopilaciones, roles o ambos en función de las claves definidas en el archivo.
Creación de un archivo de requisitos
-
Abra un nuevo terminal y conéctese al sistema ol-control-node mediante SSH.
ssh oracle@<ip_address_of_instance>
-
Cree un directorio de trabajo.
mkdir -p ~/podman-project
-
Cree un archivo de requisitos.
cat << 'EOF' | tee ~/podman-project/requirements.yml > /dev/null --- collections: - name: containers.podman EOF
-
Instale la colección.
ansible-galaxy collection install -r ~/podman-project/requirements.yml
La salida muestra el proceso de recuperación del archivo comprimido del sitio Galaxy y, a continuación, su instalación en el directorio raíz en
.ansible/collections.
Nota: Si la salida muestra
ERROR: Ansible requires the locale encoding to be UTF-8; Detected None.
, indica un valor de configuración regional incorrecto paraansible
. Para solucionar el problema, defina estas dos variables de entorno:export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
Instalar Podman
Los cuadernos de estrategias de Oracle Linux Automation Engine constan de reproducciones, que se componen de tareas asignadas a hosts específicos. Estas tareas ejecutan principalmente módulos idempotentes. Idempotency asegura que usted logre el mismo resultado si el libro de jugadas se ejecuta una o varias veces. Este tutorial demostrará la idempotencia mediante la construcción del manual en etapas y su ejecución entre cada cambio.
Antes de ejecutar un contenedor Podman, necesitamos instalar los paquetes Podman desde el repositorio AppStream de Oracle Linux.
-
Cree el archivo del libro de estrategias.
cat << 'EOF' | tee ~/podman-project/podman-playbook.yml > /dev/null --- - hosts: localhost connection: local tasks: - name: Install podman ansible.builtin.dnf: name: '@container-tools:ol8' state: present become: yes when: - ansible_distribution == 'OracleLinux' - ansible_facts['distribution_major_version'] == '8' - name: Install podman ansible.builtin.dnf: name: 'container-tools' state: present become: yes when: - ansible_distribution == 'OracleLinux' - ansible_facts['distribution_major_version'] == '9' EOF
Un libro de estrategias y los nombres de las tareas tienen como objetivo hacer que el libro de estrategias sea autodocumentado. La siguiente información ofrece una explicación más detallada de algunos puntos clave.
hosts: localhost
: indica las tareas que se deben ejecutar en el host local.connection: local
: garantiza que el enlace siga siendo local y no se ejecute mediante SSH.become: yes
: eleva la tarea de esta sección de cuaderno de estrategias para que se ejecute con el privilegiosudo
de forma predeterminada.
-
Ejecutar el manual.
Dado que ejecutamos este manual en el host local, no hay ningún motivo para crear o hacer referencia a un archivo de inventario explícitamente. Sin embargo, si quisiéramos ejecutar esto en un host remoto, tendríamos que actualizar la entrada
hosts:
, eliminar la líneaconnection:
en el manual y, a continuación, crear y hacer referencia a un archivo de inventario. Si no está familiarizado con este proceso, puede consultar algunos de nuestros otros tutoriales, enlazados en Oracle Linux Training Station al final de este tutorial.ansible-playbook ~/podman-project/podman-playbook.yml
La salida del comando debe mostrar que se ejecuta correctamente en localhost, lo que indica un cambio en la tarea Install podman. Este estado indica que hemos completado correctamente la instalación del módulo container-tools.
-
Verifique el paquete de Podman instalado mostrando su versión.
podman --version
Extraer una imagen
Una vez que hemos instalado Podman, podemos extraer imágenes de nuestro registro de elección y ubicarlas localmente. En este paso, extraeremos la imagen de Oracle Linux de GitHub Container Registry.
Puede encontrar información adicional sobre las imágenes de Oracle Linux Developer aquí.
-
Agregue la tarea para extraer una imagen de contenedor al manual.
cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null - name: Pull oraclelinux:9 from GitHub containers.podman.podman_image: name: ghcr.io/oracle/oraclelinux:9 EOF
-
Ejecutar el manual.
ansible-playbook ~/podman-project/podman-playbook.yml
-
Compruebe que Podman ha extraído la imagen.
podman images
Ejemplo de salida:
REPOSITORY TAG IMAGE ID CREATED SIZE ghcr.io/oracle/oraclelinux 9 97e22ab49eea 20 hours ago 254 MB
Ejecución de 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.
-
Actualice el archivo del manual.
cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null - name: Run image containers.podman.podman_container: name: nginx image: ghcr.io/oracle/oraclelinux9-nginx:1.20 state: started detach: yes expose: - '80' - '443' publish: - '8080:80' EOF
Dónde:
name
: nombre del contenedor.image
: ruta de repositorio (o nombre de imagen) y etiqueta utilizadas 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 puede encontrar una coincidencia.detach
: ejecuta el contenedor en modo desasociado.expose
: muestra un puerto o un rango de puertos.publish
: publica un puerto de contenedor o un rango de puertos en el host.
-
Ejecutar el manual.
ansible-playbook ~/podman-project/podman-playbook.yml
-
Compruebe que el contenedor se está ejecutando.
podman ps
Ejemplo de salida:
[oracle@ol-server podman-project]$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5f7a28cc4c6b ghcr.io/oracle/oraclelinux9-nginx:1.20 nginx -g daemon o... 2 minutes ago Up 2 minutes ago 0.0.0.0:8080->80/tcp nginx
La salida muestra que el contenedor ha estado en funcionamiento durante 2 minutos.
-
Detenga el contenedor.
Con el CONTAINER ID de la salida anterior, ejecute:
podman stop $(podman ps -q -f name=nginx)
Este comando utiliza el CONTAINER ID como referencia para detener el contenedor nginx.
Ejecución de una imagen de contenedor con un volumen
Podman crea volúmenes agregando un montaje de enlace, que asigna un directorio local a un directorio dentro del contenedor. Vamos a demostrar esta función ejecutando el mismo contenedor NGINX y sustituyendo la página index.html por defecto por una personalizada.
-
Actualice el archivo del manual.
Cree el directorio local. Si bien podemos realizar este paso de manera eficiente y manual una vez desde la línea de comandos, lo automatizaremos en su lugar. La automatización de este paso garantiza que el directorio exista cada vez que se ejecuta el manual. Antes de ejecutar la imagen, agregue estas tareas, que crean un directorio y el archivo index.html.
Asegúrese de dejar una línea en blanco entre las tareas para facilitar la lectura y de seguir las reglas de sintaxis YAML y las directrices de alineación. Utilizaremos
sed
para completar esta tarea, ya que permite la fácil inserción de bloques de texto en un archivo en una línea específica.sed -i -e '24 r '<(cat -<< EOF - name: Ensure the destination directory exists ansible.builtin.file: path: "/home/oracle/nginx/" state: directory - name: Create an 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. EOF ) ~/podman-project/podman-playbook.yml
-
A continuación, agregue la siguiente opción al final de la tarea
Run image
.cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null volume: "/home/oracle/nginx:/usr/share/nginx/html:Z" EOF
La opción
volume
crea un montaje de enlace entre el directoriosource:destination
. La opción:Z
aborda cualquier problema de permisos SELinux relacionado con el montaje de enlace. Podman lo hace volviendo a etiquetar el contenido del volumen para que coincida con la etiqueta dentro del contenedor.Aquí hay una versión completa del cuaderno de estrategias como referencia.
-
Ejecutar el manual.
ansible-playbook ~/podman-project/podman-playbook.yml
-
Compruebe que el contenedor se está ejecutando.
podman ps
Ejemplo de salida:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f74aa726d470 ghcr.io/oracle/oraclelinux9-nginx:1.20 nginx -g daemon o... 10 minutes ago Up 10 minutes ago 0.0.0.0:8080->80/tcp nginx
-
Verifique que el archivo index.html existe.
ls -l /home/oracle/nginx
Ejemplo de salida:
[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
-
Verifique el montaje de enlace.
Utilice cURL para mostrar la página index.html del contenedor y el mensaje de bienvenida.
curl localhost:8080
Donde 8080 es la asignación de puerto local al puerto 80 en el contenedor.
Pasos Siguientes
Al completar este tutorial, debe comprender cómo automatizar su trabajo con Podman y contenedores mediante Oracle Linux Automation Engine. Explore el resto de módulos de la recopilación containers.podman para crear cuadernos de estrategias adicionales que automatizen la infraestructura.
Enlaces relacionados
- Documentación de Oracle Linux Automation Manager
- Formación de Oracle Linux Automation Manager
- Oracle Linux Training Station
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.
Configure Podman Containers with Oracle Linux Automation Engine
F52947-04
Copyright ©2021, Oracle and/or its affiliates.