Nota

Utilizza Compose Files con Podman su Oracle Linux

Introduzione

Podman e Docker Compose sono entrambi strumenti della riga di comando che utilizzano un file YAML appositamente formattato come input per assemblare e quindi eseguire uno o più contenitori come applicazioni. Questi strumenti consentono agli sviluppatori di sviluppare, testare e quindi fornire ai propri utenti un singolo file YAML per la propria applicazione e utilizzare un solo comando per avviarlo e arrestarlo in modo affidabile. Questa portabilità e affidabilità hanno reso l'utilizzo delle specifiche Compose estremamente popolare tra gli utenti e gli sviluppatori, e sta diventando sempre più un requisito.

Obiettivi

In questo tutorial imparerai a:

Prerequisiti

Implementa Oracle Linux

Nota: se è in esecuzione nella propria tenancy, leggere il progetto linux-virt-labs GitHub README.md e completare i prerequisiti prima di distribuire l'ambiente di laboratorio.

  1. Aprire un terminale sul Luna Desktop.

  2. Duplicare il progetto linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Passare alla directory di lavoro.

    cd linux-virt-labs/ol
    
  4. Installare le raccolte richieste.

    ansible-galaxy collection install -r requirements.yml
    
  5. Implementare l'ambiente di laboratorio.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e update_all=true
    

    L'ambiente di esercitazione pratica gratuito richiede l'aggiunta della variabile local_python_interpreter, che imposta ansible_python_interpreter per le riproduzioni eseguite su localhost. Questa variabile è necessaria perché l'ambiente installa il pacchetto RPM per l'SDK Oracle Cloud Infrastructure per Python, situato sotto i moduli python3.6.

    La forma di distribuzione predefinita utilizza la CPU AMD e Oracle Linux 8. Per utilizzare una CPU Intel o Oracle Linux 9, aggiungere -e instance_shape="VM.Standard3.Flex" o -e os_version="9" al comando di distribuzione.

    Importante: attendere che il playbook venga eseguito correttamente e raggiungere il task di sospensione. In questa fase del playbook, l'installazione di Oracle Linux è completa e le istanze sono pronte. Prendi nota del gioco precedente, che stampa gli indirizzi IP pubblici e privati dei nodi che distribuisce e qualsiasi altra informazione di distribuzione necessaria durante l'esecuzione del laboratorio.

Impostare Podman per l'utilizzo dei file di composizione

Podman ha introdotto il supporto per la funzionalità Docker Compose in Podman v3.2.0, dopo che è stato introdotto un supporto limitato in Podman v3.0.0, introducendo così la possibilità di utilizzare Docker Compose dall'interno di Podman. Più di recente, Podman v4.1.0 ha esteso il supporto della funzionalità Docker Compose per includere l'utilizzo di Docker Compose v2.2 e versioni successive.

Installare il package Docker Podman

Installare il pacchetto podman-docker, che consente a Podman di funzionare in modo nativo con i comandi Docker.

sudo dnf install -y podman-docker

Installa composizione Docker

  1. Scaricare e installare Compose standalone.

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

    Output di esempio:

      % 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 60.1M  100 60.1M    0     0   103M      0 --:--:-- --:--:-- --:--:--  378M
    
  2. Applicare le autorizzazioni eseguibili al file binario.

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. Confermare i lavori standalone di Compose.

    docker-compose version
    

    L'output restituisce la versione corrente di docker-compose.

    Nota: l'installazione di Compose in modalità standalone, come descritto qui, richiede l'uso di docker-compose up, ad esempio, anziché la sintassi standard docker-compose up utilizzata durante l'esecuzione della utility Docker.

Avviare il socket Podman

Podman e Docker Compose richiedono l'avvio del socket Podman, che consente alle chiamate di sistema di ogni programma di comunicare con Podman su questo processo controllato da systemd.

  1. Configurare il socket Podman.

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

    L'output mostra il socket systemd active (listening).

  2. Recupera la posizione per la posizione del socket Podman dell'utente.

    podman info | grep -i remotesocket -A2
    
  3. Verificare che il socket funzioni utilizzando cURL.

    curl -w "\n" -H "Content-Type: application/json" --unix-socket /run/user/$UID/podman/podman.sock http://localhost/_ping
    

    Il percorso per --unix-socket corrisponde al percorso fornito da podman info. L'output di questo comando deve restituire OK, a indicare una configurazione riuscita della funzionalità di composizione pronta per l'uso con i file docker-compose.yaml.

Installa composizione Podman

Podman Compose è una libreria Python 3 che implementa la specifica composita per essere eseguita con Podman.

  1. Installare e abilitare il repository developer_EPEL.

    Oracle Linux 8:

    sudo dnf install -y oracle-epel-release-el8
    sudo dnf config-manager --enable ol8_developer_EPEL
    

    Oracle Linux 9:

    sudo dnf install -y oracle-epel-release-el9
    sudo dnf config-manager --enable ol9_developer_EPEL
    

    Oracle Linux 10:

    sudo dnf install -y oracle-epel-release-el10
    sudo dnf config-manager --enable ol10_u0_developer_EPEL
    
  2. Installare il pacchetto di Podman Compose.

    sudo dnf install -y podman-compose 
    
  3. Verificare che Podman Compose funzioni visualizzandone la versione.

    podman-compose version
    

Creare un file di composizione

Questo file Compose consente il pull e l'avvio dell'applicazione designata.

  1. Creare una directory per il test e modificarla in tale directory.

    mkdir -p projects/echo
    cd projects/echo
    
  2. Creare il file di composizione.

    cat >> compose.yaml << EOF
    services:
      web:
        image: k8s.gcr.io/echoserver:1.4
        ports:
          - "${HOST_PORT:-8080}:8080"
    EOF
    
    
  3. Rivedere il file di composizione.

    cat compose.yaml
    

Esegui composizione Podman

  1. Cambiare nella stessa directory del file di composizione.

    Importante: i comandi podman-compose non funzioneranno a meno che non si trovi nella stessa directory del file compose.yaml.

    cd ~/projects/echo/
    
  2. Avviare l'applicazione echoserver.

    podman-compose up -d
    

    L'output mostra Podman che estrae il contenitore e lo avvia con i parametri elencati nel file di composizione. L'opzione -d indica a Podman di eseguire il contenitore in background in modalità scollegata. Podman estrae le immagini a cui viene fatto riferimento nel file Compose solo se non sono presenti localmente.

  3. Il test dell'applicazione echoserver è attivo e in esecuzione.

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

    Output di esempio:

    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. Confermare inoltre l'esito positivo esaminando i log.

    podman-compose logs
    

    Output di esempio:

    ```text ['podman', '–version', ''] using podman version: 4.2.0 podman logs echo_web_1 10.89.0.2 - [17/gen/2023:12:46:47 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1" exit code: 0

  5. Utilizzare la utility Podman Compose per visualizzare i container in esecuzione.

    podman-compose ps
    

    Output di esempio:

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

    È possibile visualizzare altri comandi della utility Podman Compose eseguendo podman-compose --help.

  6. Ora è il momento di arrestare il contenitore echoserver.

    podman-compose down
    
  7. Rimuovere la rete bridge Podman aggiuntiva creata durante la distribuzione del contenitore.

    podman network rm echo_default
    

Conferma funzionamento composizione Docker

  1. Impostare la variabile di ambiente per la posizione del socket Podman.

    export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
    
  2. Avviare l'applicazione echoserver.

    Questo comando deve essere eseguito all'interno della stessa directory del file di composizione.

    docker-compose up -d
    

    L'output mostra la creazione della rete echo_default e del contenitore echo-web-1.

  3. Accedere all'applicazione del contenitore.

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

    Output di esempio:

    [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. Esaminare i log e confermare che l'applicazione ha sottomesso correttamente una richiesta di reso.

    docker-compose logs
    

    Output di esempio:

    ```testo echo-web-1 | 10.89.0.1 - - [17/gen/2023:14:48:56 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1"

  5. Consente di ottenere una lista di contenitori avviata utilizzando la utility Docker Compose.

    docker-compose ps
    

    Output di esempio:

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

    docker-compose down
    

Informazioni importanti

Se si installano entrambi gli eseguibili podman-compose e docker-compose sullo stesso sistema, è importante notare che non è possibile richiamarli in modo intercambiabile. Ciò che intendiamo con questa istruzione è che se si avvia un processo utilizzando podman-compose, non è possibile eseguirne una query o arrestarlo utilizzando docker-compose o viceversa.

  1. Iniziare utilizzando Podman Compose.

    podman-compose up -d
    
  2. Provare a elencare i contenitori in esecuzione utilizzando Docker Compose.

    docker-compose ps
    

    L'output restituisce un elenco vuoto che mostra che, dal suo punto di vista, nessun container è in esecuzione.

  3. Tuttavia, l'utilizzo di Podman Compose conferma che il contenitore è in esecuzione.

    podman-compose ps
    

    Output di esempio:

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

Passi successivi

Ciò conferma come utilizzare un file Compose con Podman utilizzando podman-compose o docker-compose.

Altre risorse di apprendimento

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

Per la documentazione del prodotto, visitare Oracle Help Center.