Nota:
- Questa esercitazione è disponibile in un ambiente di laboratorio gratuito fornito da Oracle.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti Oracle Cloud Infrastructure. Al termine del laboratorio, sostituire questi valori con quelli specifici del tuo ambiente cloud.
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:
- Esegui playbook localmente
- Aggiungere una raccolta a una playbook
- Installa podman
- Estrarre ed eseguire un contenitore
oraclelinux:8
Prerequisiti
- Un sistema Oracle Linux con la seguente configurazione:
- l'ultima versione di Oracle Linux 8 (x86_64)
- un utente non root con autorizzazioni
sudo
- installare Oracle Linux Automation Engine
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
-
Se non è già collegato, aprire un terminale e collegarsi tramite ssh al sistema ol-server.
ssh oracle@<ip_address_of_ol-server>
-
Creare una directory di lavoro.
mkdir -p ~/podman-project
-
Passare alla directory di lavoro.
cd ~/podman-project
-
Creare il file
requirements.yml
utilizzando il proprio editor. Qui utilizzeremovi
.vi requirements.yml
-
Immettere la modalità di inserimento
vi
digitandoi
. -
Aggiungere la chiave e il nome di tutte le raccolte utilizzate nella playbook.
Esempio:
--- collections: - name: containers.podman
-
Dopo aver modificato il file
requirements.yml
, salvare e chiudere il file. Se si utilizzavi
, è possibile farlo digitandoESC
,:wq!
eENTER
.
Installare le raccolte utilizzando il file dei requisiti
-
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:
-
Passare al livello superiore della directory di lavoro, se non ancora presente in tale directory.
cd ~/podman-project
-
Creare il file playbook.
vi podman-playbook.yml
-
Immettere la modalità di inserimento
vi
digitandoi
. -
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 privilegiosudo
per impostazione predefinita.
-
Salvare e chiudere il file. Se si utilizza
vi
, è possibile farlo digitandoESC
,:wq!
eENTER
. -
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
-
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.
-
Modificare il file playbook.
vi podman-playbook.yml
-
Immettere la modalità di inserimento
vi
digitandoi
. -
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
-
Salvare e chiudere il file. Se si utilizza
vi
, è possibile farlo digitandoESC
,:wq!
eENTER
. -
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
-
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.
-
Modificare il file playbook.
vi podman-playbook.yml
-
Immettere la modalità di inserimento
vi
digitandoi
. -
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.
-
Salvare e chiudere il file. Se si utilizza
vi
, è possibile farlo digitandoESC
,:wq!
eENTER
. -
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
-
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.
-
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.
-
Modificare il file playbook.
vi podman-playbook.yml
-
Immettere la modalità di inserimento
vi
digitandoi
. -
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.
-
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 directorysource: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.
-
Salvare e chiudere il file. Se si utilizza
vi
, è possibile farlo digitandoESC
,:wq!
eENTER
. -
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
-
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
-
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
-
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.
Configure Podman Containers with Oracle Linux Automation Engine
F50071-04
November 2022
Copyright © 2021, Oracle and/or its affiliates.