Nota:

Utilizzo dei file di composizione con Podman

Introduzione

Docker Compose è uno strumento della riga di comando che utilizza un file YAML formattato appositamente come input per assemblare ed eseguire uno o più container come applicazioni. Ciò consente agli sviluppatori di sviluppare, testare e quindi distribuire ai propri utenti un singolo file YAML per l'applicazione e utilizzare un solo comando per avviare e arrestare l'applicazione in modo affidabile. Questa portabilità e affidabilità hanno reso Docker Compose non solo molto popolare sia con gli utenti che con gli sviluppatori, ma sempre più spesso è un requisito.

Obiettivi

Questo laboratorio mostra come installare e utilizzare sia podman-compose che docker-compose con Podman e verificare che funzioni con un semplice file docker-compose.yaml.

Prerequisiti

Dichiarazione di non responsabilità del Supporto Oracle

Oracle non fornisce supporto tecnico per la sequenza di passi fornita nelle istruzioni riportate di seguito perché si riferiscono a programmi software e sistemi operativi non forniti da Oracle. Questa esercitazione fornisce istruzioni opzionali esclusivamente per comodità.

Per ulteriori informazioni sul metodo supportato da Oracle per lo sviluppo e l'uso dei servizi basati su Podman, consulta la pagina https://docs.oracle.com/en/operating-systems/oracle-linux/podman/.

Impostare l'ambiente di laboratorio

Nota: quando si utilizza l'ambiente di esercitazione pratica gratuita, consultare le Nozioni di base sul laboratorio di Oracle Linux per informazioni sulla connessione e altre istruzioni sull'uso.

  1. Aprire un terminale e connettersi tramite ssh all'istanza ol-server se non è già connesso.

    ssh oracle@<ip_address_of_instance>
    

Conferma funzionamento Podman

Il pacchetto container-tools in Oracle Linux fornisce le versioni più recenti di Podman, Builddah, Skopeo e le dipendenze associate.

  1. Controllare la versione di Podman.

    podman -v
    
  2. Verificare che l'interfaccia CLI di Podman funzioni.

    podman run quay.io/podman/hello
    

    Output di esempio:

    [oracle@ol-server ~]$ podman run quay.io/podman/hello
    Trying to pull quay.io/podman/hello:latest...
    Getting image source signatures
    Copying blob f82b04e85914 done  
    Copying config dbd85e09a1 done  
    Writing manifest to image destination
    Storing signatures
    !... Hello Podman World ...!
    
             .--"--.           
           / -     - \         
          / (O)   (O) \        
       ~~~| -=(,Y,)=- |         
        .---. /`  \   |~~      
     ~/  o  o \~~~~.----. ~~   
      | =(X)= |~  / (O (O) \   
       ~~~~~~~  ~| =(Y_)=-  |   
      ~~~~    ~~~|   U      |~~ 
    
    Project:   https://github.com/containers/podman
    Website:   https://podman.io
    Documents: https://docs.podman.io
    Twitter:   @Podman_io
    

Imposta Podman per l'utilizzo dei file di composizione

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

I passaggi seguenti descrivono come installare e configurare podman-compose e docker-compose.

Installa il package Docker Podman

Ciò consente a Podman di lavorare in modo nativo con i comandi Docker.

  1. Installare il pacchetto podman-docker.

    sudo dnf install -y podman-docker
    

Installa composizione Docker

Nota:

L'installazione della composizione in modalità standalone come descritto qui richiede l'uso di docker-compose anziché della sintassi standard utilizzata quando si utilizza la utility Docker di docker compose. In altre parole, sostituire la sintassi docker compose up con docker-compose up.

  1. Scaricare e installare Compose standalone.

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

    Output di esempio:

    [oracle@ol-server ~]$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
      % 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 42.8M  100 42.8M    0     0   158M      0 --:--:-- --:--:-- --:--:--  158M
    
    
  2. Applicare le autorizzazioni eseguibili al file binario.

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. Confermare la composizione dei lavori standalone.

    docker-compose version
    

    Output di esempio:

    [oracle@ol-server ~]$ docker-compose version
    Docker Compose version v2.15.1
    
    

Avvia il socket Podman

Per utilizzare le funzionalità di composizione Docker, è necessario eseguire i passi riportati di seguito creando un socket Unix.

  1. Configurare il socket Podman con questi passi.

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

    Output di esempio:

    [oracle@ol-server ~]$ sudo systemctl enable --now podman.socket
    Created symlink /etc/systemd/system/sockets.target.wants/podman.socket -> /usr/lib/systemd/system/podman.socket.
    [oracle@ol-server ~]$ sudo systemctl status podman.socket
    * podman.socket - Podman API Socket
       Loaded: loaded (/usr/lib/systemd/system/podman.socket; enabled; vendor preset)
       Active: active (listening) since Thu 2023-01-19 20:58:20 GMT; 16s ago
         Docs: man:podman-system-service(1)
       Listen: /run/podman/podman.sock (Stream)
       CGroup: /system.slice/podman.socket
    
    Jan 19 20:58:20 ol-server systemd[1]: Listening on Podman API Socket.
    
  2. Verificare che il socket funzioni come previsto utilizzando il codice curl.

sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping

Output di esempio:

[oracle@ol-server ~]$ sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping
OK
[oracle@ol-server ~]$

Se l'output di questo comando restituisce OK, la funzionalità di composizione è stata configurata correttamente per funzionare con i file docker-compose.yaml.

Installa composizione Podman

Podman Compose è una libreria Python 3 che implementa la specifica di composizione da eseguire con Podman.

  1. Prima di installare Podman Compose, verificare che pip sia aggiornato alla versione più recente.

    sudo -H pip3 install --upgrade pip
    
  2. Installare il pacchetto di composizione Podman.

    sudo pip3 install podman-compose 
    

    Quando si esegue pip3 install come sudo, è possibile ignorare i messaggi di AVVERTENZA.

  3. Conferma operazioni di composizione Podman.

    podman-compose version
    

    Output di esempio:

    [oracle@ol-server ~]$ podman-compose version
    ['podman', '--version', '']
    using podman version: 4.2.0
    podman-composer version  1.0.3
    podman --version 
    podman version 4.2.0
    exit code: 0
    

Creare un file di composizione Docker

Questo file docker-compose.yaml consente di estrarre e avviare l'applicazione designata.

  1. Creare una directory per il test.

    mkdir -p Documents/examples/echo
    
  2. Passare alla directory.

    cd Documents/examples/echo
    
  3. Creare il file docker-compose.yaml.

    cat >> docker-compose.yaml << EOF
    ---
    version: '3' 
    services: 
      web: 
        image: k8s.gcr.io/echoserver:1.4
        ports:
            - "${HOST_PORT:-8080}:8080" 
    EOF
    
  4. Esaminare il docker-compose.yaml appena creato.

    cat docker-compose.yaml
    

    Output di esempio:

    [oracle@ol-server echo]$ cat docker-compose.yaml 
    ---
    version: '3' 
    services: 
      web: 
        image: k8s.gcr.io/echoserver:1.4
        ports:
            - "8080:8080"
    

Conferma funzionamento composizione podman

  1. Spostarsi nella directory in cui si trova il file docker-compose.

    Importante: i comandi podman-compose non funzioneranno a meno che non ci si trovi nella directory in cui si trova il file docker-compose.yaml.

    cd ~/Documents/examples/echo/
    
  2. Avviare l'applicazione echoserver.

    podman-compose up -d
    

    Output di esempio:

    [oracle@ol-server echo]$ podman-compose up -d
    ['podman', '--version', '']
    using podman version: 4.2.0
    ** excluding:  set()
    ['podman', 'network', 'exists', 'echo_default']
    ['podman', 'network', 'create', '--label', 'io.podman.compose.project=echo', '--label', 'com.docker.compose.project=echo', 'echo_default']
    ['podman', 'network', 'exists', 'echo_default']
    podman create --name=echo_web_1 --label io.podman.compose.config-hash=123 --label io.podman.compose.project=echo --label io.podman.compose.version=0.0.1 --label com.docker.compose.project=echo --label com.docker.compose.project.working_dir=/home/oracle/examples/echo --label com.docker.compose.project.config_files=docker-compose.yaml --label com.docker.compose.container-number=1 --label com.docker.compose.service=web --net echo_default --network-alias web -p 8080:8080 k8s.gcr.io/echoserver:1.4
    Trying to pull k8s.gcr.io/echoserver:1.4...
    Getting image source signatures
    Copying blob d3c51dabc842 done  
    Copying blob a3ed95caeb02 done  
    Copying blob 6d9e6e7d968b done  
    Copying blob 412c0feed608 done  
    Copying blob cd23f57692f8 done  
    Copying blob dcd34d50d5ee done  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob b4241160ce0e done  
    Copying blob 7abee76f69c0 done  
    Writing manifest to image destination
    Storing signatures
    1b54b75ca13786d33df6708da1d83ecce14b055e78b03007c3c4e1f441e7139c
    exit code: 0
    

    Nota: come nel caso di Podman, tutti i container a cui viene fatto riferimento nel file docker-compose.yaml vengono estratti solo se non sono già presenti nel sistema.

  3. Eseguire il test dell'applicazione echoserver.

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

    Output di esempio:

    [oracle@ol-server echo]$ 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. Inoltre, conferma il successo rivedendo i log.

    podman-compose logs
    

    Output di esempio:

    [oracle@ol-server echo]$ podman-compose logs
    ['podman', '--version', '']
    using podman version: 4.2.0
    podman logs echo_web_1
    10.89.0.2 - - [17/Jan/2023:12:46:47 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1"
    exit code: 0
    
    
  5. Utilizzare la utility di composizione Podman per visualizzare i container in esecuzione.

    podman-compose ps
    

    Output di esempio:

    [oracle@ol-server echo]$ podman-compose ps   
    ['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
    

    Nota: vedere gli altri comandi della utility Podman Compose eseguendo podman-compose --help. Tuttavia, questi comandi aggiuntivi non sono applicabili a questo laboratorio.

  6. Ora è il momento di arrestare il servizio echoweb.

    podman-compose down
    

Conferma operazione di composizione Docker in corso

  1. (Opzionale) Spostarsi nella directory in cui si trova il file docker-compose.

    Importante: i comandi docker-compose non funzioneranno a meno che non ci si trovi nella directory in cui si trova il file docker-compose.yaml.

    cd ~/Documents/examples/echo/
    
  2. Avviare l'applicazione echoserver.

    sudo /usr/local/bin/docker-compose up -d
    

    Output di esempio:

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose up -d
    [+] Running 0/0
    [+] Running 0/1echo-web-1  Starting                                                                                               0.0
    [+] Running 0/1echo-web-1  Starting                                                                                               0.1
    [+] Running 0/1echo-web-1  Starting                                                                                               0.2
    [+] Running 0/1echo-web-1  Starting                                                                                               0.3
    [+] Running 0/1echo-web-1  Starting                                                                                               0.4
    [+] Running 0/1echo-web-1  Starting                                                                                               0.5
    [+] Running 0/1echo-web-1  Starting                                                                                               0.6
    [+] Running 0/1echo-web-1  Starting                                                                                               0.7
    [+] Running 1/1echo-web-1  Starting                                                                                               0.8
     ��� Container echo-web-1  Started                                                                                                0.8s
    

    NOTA:

    Se viene restituito il seguente output durante l'esecuzione di questo comando:

    ��� Container echo-web-1  Starting                                                                                               0.9s
    Error response from daemon: cannot listen on the TCP port: listen tcp4 :8080: bind: address already in use
    

    Non preoccuparti, significa solo che il comando podman-compose down non è stato eseguito e che il contenitore echoserver avviato in precedenza utilizzando podman-compose è ancora in esecuzione. Attenersi alla procedura precedente per arrestarla.

  3. Eseguire il test 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. Come in precedenza, utilizzare la utility di composizione Docker per esaminare i log e confermare che questa applicazione ha restituito una richiesta riuscita.

    sudo /usr/local/bin/docker-compose logs
    

    Output di esempio:

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose logs 
    echo-web-1  | 10.89.0.1 - - [17/Jan/2023:14:48:56 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1"
    
    
  5. La utility di composizione Docker offre anche un modo per esaminare i container avviati dal file di composizione.

    sudo /usr/local/bin/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
    

    Nota: vedere altri comandi della utility di composizione Docker eseguendo docker-compose --help. Tuttavia, questi comandi aggiuntivi non sono applicabili a questo laboratorio.

  6. Arrestare il servizio echoweb.

    sudo /usr/local/bin/docker-compose down
    

    Output di esempio:

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose down
    [+] Running 0/0
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.1
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.2
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.3
    [+] Running 2/1echo-web-1  Removing                                                                                                   0.4
     ��� Container echo-web-1  Removed                                                                                                    0.4s
     ��� Network echo_default  Removed                                                                                                    0.0s
    

Informazioni importanti

Se nello stesso sistema sono stati installati entrambi gli eseguibili podman-compose e docker-compose, è importante non è possibile richiamarli in modo intercambiabile. Ciò significa che se un processo viene avviato da podman-docker, non può essere sottoposto a query o arrestato utilizzando la utility docker-compose o viceversa, come mostrato nell'esempio seguente:

  1. Spostarsi nella directory in cui si trova il file di composizione.

    Importante: i comandi podman-compose o docker-compose non funzioneranno a meno che non ci si trovi nella directory in cui si trova il file docker-compose.yaml.

    cd ~/Documents/examples/echo/
    
  2. Inizia utilizzando Podman Compose.

    podman-compose up -d
    
  3. Provare a elencare i container in esecuzione utilizzando Docker Compose.

    sudo /usr/local/bin/docker-compose ps
    

    Output di esempio

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose ps
    NAME                IMAGE               COMMAND             SERVICE             CREATED             STATUS              PORTS
    
  4. Tuttavia, l'uso di Podman Compose conferma che il container è in esecuzione.

    podman-compose ps
    

    Output di esempio:

    [oracle@ol-server echo]$ podman-compose ps
    ['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
    

Riepilogo

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

Per ulteriori informazioni

Vedere altre risorse correlate:

Altre risorse di apprendimento

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

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