Nota:

Configura contenitori Podman con Oracle Linux Automation Engine

Introduzione

Questa esercitazione descrive le procedure per creare una playlist per l'installazione di Podman ed eseguire un contenitore Oracle Linux utilizzando lo strumento di gestione della configurazione di Oracle Linux Automation Engine.

Procedure preliminari: se non si ha familiarità con l'esecuzione dei playbook, consultare la nostra esercitazione introduttiva, Scrivi una guida con Oracle Linux Automation Engine.

Quando si eseguono playbook, Oracle Linux Automation Engine esegue i task su macchinari corrispondenti alla direttiva hosts nel playbook. In genere questi host sono definiti in un file inventory e possono essere remoti o locali. In questa esercitazione verrà illustrato come eseguire un playbook localmente.

Obiettivi

In questo laboratorio imparerai a:

Prerequisiti

Raccolte

Nota: quando si utilizza l'ambiente di laboratorio gratuito, consultare Oracle Linux Lab Basics per le istruzioni di connessione e altro tipo.

Le raccolte sono un formato di distribuzione per i contenuti di Oracle Linux Automation Engine che può includere playbook, ruoli, moduli e plugin. Questa esercitazione installerà la raccolta containers.podman utilizzando un file requirements.yml. Un file requirements.yml consente di installare raccolte, ruoli o entrambi in base alle chiavi definite nel file.

Creazione di un file di requisiti

  1. Se non è già collegato, aprire un terminale e collegarsi tramite ssh al sistema ol-server.

    ssh oracle@<ip_address_of_ol-server>
    
  2. Creare una directory di lavoro.

    mkdir -p ~/podman-project
    
  3. Passare alla directory di lavoro.

    cd ~/podman-project
    
  4. Creare il file requirements.yml utilizzando il proprio editor. Qui utilizzeremo vi.

    vi requirements.yml
    
  5. Immettere la modalità di inserimento vi digitando i.

  6. Aggiungere la chiave e il nome di tutte le raccolte utilizzate nella playbook.

    Esempio:

    ---
    collections:
      - name: containers.podman
    
  7. Dopo aver modificato il file requirements.yml, salvare e chiudere il file. Se si utilizza vi, è possibile farlo digitando ESC, :wq! e ENTER.

Installare le raccolte utilizzando il file dei requisiti

  1. Estrarre le raccolte e installarle localmente.

    ansible-galaxy collection install -r requirements.yml
    

    Una volta eseguito correttamente il comando, i risultati sono simili a quelli mostrati.

    Output di esempio:

    [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
    

Creare la Playbook

Le playbook di Oracle Linux Automation Engine sono costituite da giochi costituiti da attività mappate agli host. Queste attività eseguono principalmente moduli idempotenti. L'idea è ottenere lo stesso risultato se si esegue il playbook una o più volte. Questo tutorial dimostrerà l'idea di creare la playbook nelle fasi e di eseguirla tra ogni cambiamento.

Installa podman

Prima di eseguire un contenitore Podman, dobbiamo installare i pacchetti Podman. I pacchetti verranno installati utilizzando il modulo container-tools:ol8 dal repository di Oracle Linux ol8_appstream.

Da un terminale sul sistema ol-server:

  1. Passare al livello superiore della directory di lavoro, se non ancora presente in tale directory.

    cd ~/podman-project
    
  2. Creare il file playbook.

    vi podman-playbook.yml
    
  3. Immettere la modalità di inserimento vi digitando i.

  4. Aggiungere quanto segue al file playbook.

    Esempio:

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

    Una playbook e i nomi delle attività mirano a rendere l'autodocumentazione della playbook. Le informazioni riportate di seguito illustreranno alcuni elementi.

    • hosts: localhost: indica i task da eseguire sull'host locale.
    • connection: local: assicura che il collegamento rimanga locale e non venga eseguito su SSH.
    • collections: fornisce un elenco di tutte le raccolte utilizzate nella riproduzione.
    • become: yes: consente di elevare il task all'interno di questa sezione playbook da eseguire con il privilegio sudo per impostazione predefinita.


  5. Salvare e chiudere il file. Se si utilizza vi, è possibile farlo digitando ESC, :wq! e ENTER.

  6. Run the playbook

    ansible-playbook podman-playbook.yml
    

    Il comando deve essere eseguito correttamente con risultati simili a quelli mostrati.

    Output di esempio:

    [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. Verificare il package Podman installato

    podman --version
    

    Output di esempio:

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

Pull di un'immagine

Una volta installato Podman, possiamo estrarre le immagini dal nostro registro di scelta e posizionarle localmente. In questo passo, l'immagine di Oracle Linux verrà estratta dal Container Registry GitHub.

Ulteriori informazioni sulle immagini degli sviluppatori Oracle Linux sono disponibili qui.

  1. Modificare il file playbook.

    vi podman-playbook.yml
    
  2. Immettere la modalità di inserimento vi digitando i.

  3. Aggiungere il seguente task alla fine del file playbook.

    Assicurarsi di lasciare una riga vuota tra i task per la leggibilità e seguire le regole di sintassi e l'allineamento YAML.

    Esempio:

    - name: pull oraclelinux:8 from GitHub
      podman_image:
        name: ghcr.io/oracle/oraclelinux:8
    
  4. Salvare e chiudere il file. Se si utilizza vi, è possibile farlo digitando ESC, :wq! e ENTER.

  5. Run the playbook

    ansible-playbook podman-playbook.yml
    

    Il comando deve essere eseguito correttamente con risultati simili a quelli mostrati.

    Output di esempio:

    [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. Verificare Podman ha estratto l'immagine.

    podman images
    

    Output di esempio:

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

Esegui un'immagine container

Anziché semplicemente estrarre un'immagine, possiamo anche estrarre ed eseguire un contenitore basato su un'immagine in un unico passaggio. In questo passo tiriamo ed eseguiamo l'immagine dello sviluppatore NGINX di Oracle Linux.

  1. Modificare il file playbook.

    vi podman-playbook.yml
    
  2. Immettere la modalità di inserimento vi digitando i.

  3. Aggiungere il seguente task alla fine del file playbook.

    Assicurarsi di lasciare una riga vuota tra i task per la leggibilità e seguire le regole di sintassi e l'allineamento YAML.

    Esempio:

    - 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'
    

    Le informazioni riportate di seguito illustreranno alcuni elementi.

    • name: nome del contenitore.
    • image: percorso del repository (o nome immagine) e tag utilizzati per creare il contenitore.
    • state: verifica la presenza di un contenitore in esecuzione corrispondente al nome e alla configurazione. Podman crea e avvia un nuovo contenitore quando non trova una corrispondenza.
    • detach: esegue il contenitore in modalità scollegata.
    • expose: esporre una porta o un intervallo di porte.
    • publish: pubblicare la porta o l'intervallo di porte di un contenitore sull'host.


  4. Salvare e chiudere il file. Se si utilizza vi, è possibile farlo digitando ESC, :wq! e ENTER.

  5. Run the playbook

    ansible-playbook podman-playbook.yml
    

    Il comando deve essere eseguito correttamente con risultati simili a quelli mostrati.

    Output di esempio:

    [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. Verificare che il contenitore sia in esecuzione.

    podman ps
    

    Output di esempio:

    [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
    

    L'output mostra che il contenitore è attivo e in esecuzione per 18 minuti.

  7. Arrestare il contenitore.

    Utilizzando CONTAINER NAMES dall'output precedente, eseguire:

    podman stop <CONTAINER NAMES>
    

    Output di esempio:

    [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
    

Esegui un'immagine container con un volume

Podman crea volumi aggiungendo un mapping di installazione con bind a una directory locale in una directory all'interno del contenitore. Questa funzione verrà dimostrata eseguendo lo stesso contenitore NGINX e sostituendo una pagina index.html personalizzata per l'impostazione predefinita NGINX.

  1. Modificare il file playbook.

    vi podman-playbook.yml
    
  2. Immettere la modalità di inserimento vi digitando i.

  3. Creare la directory locale.

    È possibile eseguire questo passaggio in modo efficiente e manuale una volta dalla riga di comando, ma automatizzarlo. L'automazione di questo passaggio garantisce l'esistenza della directory in qualsiasi momento in cui viene eseguito il playbook.

    Prima del task run image, aggiungere questi task, che creano una directory e il file index.html.

    Assicurarsi di lasciare una riga vuota tra i task per la leggibilità e seguire le regole di sintassi e l'allineamento YAML.

    Esempio:

      - 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. Aggiungere quindi l'opzione seguente alla fine del task run image.

    Esempio:

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

    L'opzione volume crea un'attivazione di associazione tra la directory source:destination. L'opzione :Z risolve eventuali problemi di autorizzazioni SELinux correlati all'attivazione dell'associazione. Podman esegue questa operazione rietichettando il contenuto del volume in modo che corrisponda all'etichetta all'interno del contenitore.

    Qui è una versione completa della playbook per riferimento.

  5. Salvare e chiudere il file. Se si utilizza vi, è possibile farlo digitando ESC, :wq! e ENTER.

  6. Run the playbook

    ansible-playbook podman-playbook.yml
    

    Il comando deve essere eseguito correttamente con risultati simili a quelli mostrati.

    Output di esempio:

    [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. Verificare che il contenitore sia in esecuzione.

    podman ps
    

    Output di esempio:

    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. Verificare che il file index.html esista.

    ls -l /home/oracle/nginx
    

    Output di esempio:

    [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. Verificare l'attivazione del bind.

    Utilizzare curl per visualizzare la pagina index.html dal contenitore.

    curl localhost:8080
    

    Dove 8080 è il mapping della porta locale alla porta 80 nel contenitore.

    Output di esempio:

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

Riepilogo

L'output curl mostra una connessione riuscita al server Web NGINX in esecuzione nel contenitore podman, che viene distribuito localmente utilizzando Oracle Linux Automation Engine.

Ulteriori informazioni

Documentazione di Oracle Linux Automation Manager
Oracle Linux Automation Manager Training
Oracle Linux Training Station

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti di apprendimento gratuito sul canale Oracle Learning YouTube. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.

Per la documentazione del prodotto, visitare il sito Oracle Help Center.