Nota:
- Questa esercitazione è disponibile in un ambiente di esercitazione pratica gratuito fornito da Oracle.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
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
- Un sistema client con Oracle Linux installato
- Podman installato (il pacchetto "container-tools")
- Accesso a Internet
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.
-
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.
-
Controllare la versione di Podman.
podman -v
-
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.
-
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 didocker compose
. In altre parole, sostituire la sintassidocker compose up
condocker-compose up
.
-
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
-
Applicare le autorizzazioni eseguibili al file binario.
sudo chmod +x /usr/local/bin/docker-compose
-
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.
-
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.
-
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.
-
Prima di installare Podman Compose, verificare che pip sia aggiornato alla versione più recente.
sudo -H pip3 install --upgrade pip
-
Installare il pacchetto di composizione Podman.
sudo pip3 install podman-compose
Quando si esegue
pip3 install
comesudo
, è possibile ignorare i messaggi di AVVERTENZA. -
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.
-
Creare una directory per il test.
mkdir -p Documents/examples/echo
-
Passare alla directory.
cd Documents/examples/echo
-
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
-
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
-
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 filedocker-compose.yaml
.cd ~/Documents/examples/echo/
-
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. -
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
-
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
-
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. -
Ora è il momento di arrestare il servizio echoweb.
podman-compose down
Conferma operazione di composizione Docker in corso
-
(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 filedocker-compose.yaml
.cd ~/Documents/examples/echo/
-
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 utilizzandopodman-compose
è ancora in esecuzione. Attenersi alla procedura precedente per arrestarla. -
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
-
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"
-
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. -
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:
-
Spostarsi nella directory in cui si trova il file di composizione.
Importante: i comandi
podman-compose
odocker-compose
non funzioneranno a meno che non ci si trovi nella directory in cui si trova il filedocker-compose.yaml
.cd ~/Documents/examples/echo/
-
Inizia utilizzando Podman Compose.
podman-compose up -d
-
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
-
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:
- Oracle Learning Library
- documentazione di Oracle Linux:
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.
Using Compose Files with Podman
F76747-01
January 2023
Copyright © 2023, Oracle and/or its affiliates.