Come eseguire PostgreSQL con Docker: una guida passo passo
Questo tutorial mostra come eseguire rapidamente PostgreSQL e lo strumento di gestione pgAdmin in un contenitore Docker utilizzando Docker Compose.
PostgreSQL è un sistema di gestione di database relazionali a oggetti gratuito e open source. È in circolazione da oltre 30 anni e si pubblicizza come “il database relazionale open source più avanzato al mondo”.
Allo stesso tempo, Docker è diventato lo standard del settore IT per la facilità di creazione di pacchetti, distribuzione ed esecuzione di applicazioni distribuite. Fornisce un'eccellente opportunità per containerizzare il database e prevenire la confusione del sistema con dipendenze derivanti dall'installazione del pacchetto locale.
Ma prima di andare avanti, rispondiamo ad alcune domande essenziali.
Perché utilizzare PostgreSQL su Docker?
Esistono diversi motivi per cui l'utilizzo di PostgreSQL su Docker può essere vantaggioso:
- Portabilità: Docker fornisce un ambiente coerente per l'esecuzione di PostgreSQL su diversi sistemi e piattaforme. Ciò significa che puoi garantire che la tua applicazione venga eseguita allo stesso modo indipendentemente dall'infrastruttura sottostante. Inoltre, è più semplice testare ed eseguire il debug delle tue app in ambienti diversi e garantisce che verranno eseguite in modo coerente in produzione.
- Isolamento: i contenitori Docker forniscono un ambiente isolato per l'esecuzione di istanze PostgreSQL, così puoi eseguire più istanze sullo stesso host senza preoccuparti di conflitti o dipendenze.
- Scalabilità: Docker semplifica la distribuzione di istanze PostgreSQL su qualsiasi piattaforma e la scalabilità in base alle necessità. Ciò consente una maggiore flessibilità nella gestione delle risorse del database, poiché puoi facilmente avviare nuove istanze o regolare il numero di contenitori in esecuzione in un dato momento.
Perché utilizzare Docker Compose?
Docker Compose è uno strumento che consente di eseguire applicazioni Docker multi-contenitore. Si tratta di un'utilità da riga di comando che semplifica il processo di orchestrazione dei contenitori Docker utilizzando un file YAML per definire i servizi, le reti e i volumi di un'applicazione.
In altre parole, Docker Compose ti consente di definire tutti i servizi che compongono la tua applicazione in un singolo file e quindi utilizzare il comando docker-compose
per avviare, arrestare e gestire tali servizi. Ciò semplifica la configurazione e la gestione di applicazioni complesse che si basano su più contenitori.
Questo è ciò che faremo in questa guida quando distribuiremo in parallelo PostgreSQL e pgAdmin, lo strumento di amministrazione e gestione open source più popolare per il database PostgreSQL. Ciò ci consentirà di iniziare immediatamente a gestire e amministrare la nostra istanza PostgreSQL senza perdere tempo a cercare strumenti aggiuntivi per gestirla.
Passaggio 1: installa Docker Compose
Presumibilmente hai già installato Docker sul tuo sistema. In caso contrario, i seguenti collegamenti ti mostreranno come installarlo rapidamente e facilmente per la distribuzione che stai utilizzando, come Ubuntu, Debian, AlmaLinux o Rocky Linux.
L'altro componente essenziale è Docker Compose. Ricorda, viene fornito separatamente da Docker. Pertanto, è necessario installare Docker prima di aggiungere Docker Compose; in caso contrario, Compose non funzionerà.
Installarlo è piuttosto semplice, anche se non è già sul tuo sistema Linux. Digita i seguenti comandi:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Al momento della stesura di questo articolo, stavamo utilizzando Docker Compose 2.16.0. Per verificare se ce n'è uno nuovo, segui questo link e sostituisci la parte "2.16.0" nel primo comando sopra con quella che desideri.
Successivamente, esegui il comando seguente per assicurarti che Docker Compose sia installato e funzioni correttamente. Dovresti ricevere una risposta simile a quella mostrata.
docker-compose version
Sembra tutto a posto, quindi passiamo alla parte vera e propria.
Passaggio 2: crea un file di composizione Docker
Come accennato all'inizio della guida, Docker Compose ti consente di creare ed eseguire stack di più contenitori. Per utilizzarlo, devi prima creare un file "docker-compose.yaml " che configuri i contenitori per la tua applicazione. Quindi, puoi utilizzare un singolo comando come "docker-compose up
" per avviare tutti i contenitori e collegarli insieme.
Creiamo quindi il nostro file master che descrive i servizi PostgreSQL e pgAdmin per il nostro stack containerizzato. Per prima cosa creeremo una directory con un nome a nostra scelta, ad esempio "pg", quindi, con il tuo editor di testo preferito, creeremo un file denominato "docker-compose.yaml " al suo interno:
mkdir pg && cd pg
vim docker-compose.yaml
Quindi, aggiungi il seguente contenuto:
version: "3.8"
services:
postgres:
image: postgres
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: mypgdbpass
volumes:
- postgres_data:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4
restart: always
ports:
- "5050:80"
environment:
PGADMIN_DEFAULT_EMAIL: [email
PGADMIN_DEFAULT_PASSWORD: mypgadminpass
volumes:
- pgadmin_data:/var/lib/pgadmin
depends_on:
- postgres
volumes:
postgres_data:
pgadmin_data:
Salva e chiudi il file. Non preoccuparti se qualcosa nel suo contenuto non ti è chiaro. Ora lo spiegherò, quindi analizziamo questa sintassi.
- servizi: definisce i due servizi che Docker deve eseguire, "postgres" e "pgadmin".
- immagine: specifica le immagini Docker Hub che verranno scaricate e utilizzate per i nostri servizi. Non applichiamo loro un tag poiché vogliamo utilizzare le versioni più recenti. Tuttavia, se ne hai bisogno, puoi consultare quello disponibile per PostgreSQL e pgAdmin e utilizzarlo, specificandolo, ad esempio, "postgres:15.2-alpine".
- riavvia: configura il contenitore Docker in modo che si riavvii sempre se si arresta in modo imprevisto.
- porte: mappa la porta TCP del tuo computer host alla porta del contenitore. In questo modo, il servizio containerizzato è esposto all'esterno del contenitore ed è possibile accedervi da remoto.
- ambiente: imposta le variabili di ambiente per l'autenticazione e la configurazione dell'applicazione. Assicurati di modificare i valori dell'ambiente “POSTGRES_PASSWORD” per l'utente amministratore “postgres” di PostgreSQL e pgAdmin (“PGADMIN_DEFAULT_EMAIL” e “<PGADMIN_DEFAULT_PASSWORD“) a ciò che desideri.
- volumi: monta volumi Docker denominati per i file dell'applicazione per rendere persistenti i tuoi dati. In caso contrario, i dati andranno persi al riavvio del contenitore.
- depends_on: consente di eseguire i servizi in ordine. Nel nostro caso, il servizio “pgadmin” non verrà avviato finché “postgres” non sarà attivo e funzionante.
Passaggio 3: esegui PostgreSQL e pgAdmin come contenitori Docker
Finalmente siamo pronti per eseguire PostgreSQL e pgAdmin utilizzando Docker Compose. Per fare ciò, esegui il comando indicato di seguito dalla directory "pg" in cui risiede il file "docker-compose.yaml".
Distribuisci ed esegui i contenitori in background:
docker-compose up -d
Le immagini inizieranno a essere scaricate. L'intero processo può richiedere alcuni minuti, a seconda della velocità della connessione Internet. Alla fine, dovresti vedere una schermata simile a quella qui sotto, che ti informa che tutti i contenitori sono stati creati e avviati con successo.
Naturalmente, il ritardo prima dell'effettivo avvio dei contenitori PostgreSQL e pgAdmin utilizzando Docker Compose sarà solo la prima volta perché è necessario scaricare le immagini da Internet. Tutte le esecuzioni successive richiederanno pochi secondi poiché le immagini Docker sono disponibili localmente sul tuo sistema Linux.
Passaggio 4: collega pgAdmin al contenitore PostgreSQL
Apri il browser e puntalo su "http://localhost:5050" o "http://indirizzo-ip:5050" sul server su cui hai eseguito PostgreSQL e contenitori Docker pgAdmin.
La pagina di accesso di pgAdmin ti darà il benvenuto. Inserisci il nome utente e la password specificati come valori per le variabili “PGADMIN_DEFAULT_EMAIL” e “PGADMIN_DEFAULT_PASSWORD” nel file “docker-compose.yaml” .
Successivamente, fai clic su "Aggiungi nuovo server".
Si aprirà una nuova finestra modale in cui è possibile configurare le impostazioni di connessione al server PostgreSQL. Innanzitutto, inserisci il nome della tua connessione preferita nel campo "Nome".
Quindi seleziona la scheda "Connessione". Nel campo "Nome/indirizzo host", inserisci il nome del servizio del contenitore PostgreSQL di Docker come definito nel file "docker-compose.yaml". Nel nostro caso è “postgres”. Infine, inserisci la password fornita come valore "POSTGRES_PASSWORD" e salva le modifiche facendo clic sul pulsante "Salva".
L'applicazione si connetterà al contenitore Docker PostgreSQL e potrai monitorare e amministrare il server del database utilizzando l'interfaccia web ricca di funzionalità di pgAdmin.
In alternativa, puoi ottenere una shell PostgreSQL interattiva collegandola al contenitore ed eseguendo il comando psql
per interagire direttamente con il database PostgreSQL. Per fare ciò, devi prima entrare nel contenitore. Bisogna però conoscerne il nome. Per trovarlo digitare:
docker ps
Nell'esempio mostrato, il nostro contenitore PostgreSQL è denominato "pg-postgres-1". Puoi anche utilizzare l'ID contenitore invece del nome, che nell'esempio mostrato è "37c52cf79923". Per connetterci direttamente ad esso, dobbiamo eseguire quanto segue:
docker exec -it pg-postgres-1 psql -U postgres
Ciò fornisce l'interfaccia completa della riga di comando PostgreSQL per utilizzare tutti i comandi e i flag familiari.
Infine, lascia che ti guidi attraverso i comandi essenziali di Docker Compose per gestire il tuo stack PostgreSQL/pgAdmin containerizzato.
Comandi essenziali per la composizione di Docker
I comandi essenziali di Docker Compose che puoi utilizzare nella pratica sono mostrati di seguito con esempi. Ricordatevi di eseguirli dalla directory “pg”, dove risiede “docker-compose.yaml”.
Elenca tutti i contenitori Docker
Per visualizzare un elenco di tutti i contenitori attualmente in esecuzione nella distribuzione, digitare:
docker-compose ps
Arresta tutti i contenitori Docker
Per arrestare tutti i contenitori docker in esecuzione in background, utilizzare il comando come mostrato di seguito:
docker-compose stop
Naturalmente è possibile fermare solo uno dei contenitori, non tutti. Esegui "docker-compose stop
" seguito dal nome del servizio definito nel file "docker-compose.yaml". Notare non il nome del contenitore ma il nome del servizio.
Ad esempio, per arrestare il contenitore PostgreSQL, definito con il nome del servizio “postgres”, digitare quanto segue:
docker-compose stop postgres
Allo stesso modo, puoi riavviarlo in un secondo momento eseguendo "docker-compose start postgres
".
Avvia tutti i contenitori Docker
Dalla directory del tuo progetto ("pg"), avvia la tua applicazione eseguendo il comando come mostrato di seguito:
docker-compose start
Visualizza i log dei contenitori
Il comando "docker-compose logs
" visualizza l'output dei log dai servizi. Ad esempio, esegui il comando seguito dal nome del servizio per visualizzare i log del contenitore PostgreSQL.
docker-compose logs postgres
Inoltre, se desideri aggregare i log di ogni contenitore nel tuo stack e tenere traccia di ciò che accade al loro interno in tempo reale, digita:
docker-compose logs -f
Arrestare e rimuovere tutti i contenitori
Il seguente comando arresta e rimuove contenitori e reti creati in precedenza dal comando “docker-compose up
”:
docker-compose down
Inoltre, se desideri arrestare e rimuovere i contenitori insieme alle immagini Docker associate, utilizza il seguente comando:
docker-compose down --rmi all
Se, oltre ad arrestare e rimuovere i contenitori, desideri eliminare anche i dati archiviati in modo permanente nei volumi Docker, esegui le seguenti operazioni:
docker-compose down -v
Attenzione! Tieni presente che perderai tutti i dati in questo modo. In questo caso, l'intero contenuto del database PostgreSQL (volume "pgadmin_data"). Quindi, pensaci due volte prima di eseguire questo comando.
Conclusione
Docker ha rivoluzionato il modo in cui gli sviluppatori distribuiscono e gestiscono le applicazioni. Uno dei casi d'uso più significativi che lo utilizza è la facilità di distribuzione e accesso alle applicazioni create all'interno di contenitori senza preoccuparsi di dipendenze e installazioni. Grazie alla sua capacità di fornire un ambiente coerente e semplificare il processo di distribuzione, Docker è diventata una soluzione di riferimento per sviluppatori e amministratori di sistema.
Questo tutorial ti ha mostrato come eseguire rapidamente PostgreSQL e lo strumento di gestione pgAdmin in un contenitore Docker utilizzando Docker Compose. Seguendo le istruzioni passo passo descritte in questa guida, potrai rendere operativi i tuoi ambienti PostgreSQL e pgAdmin in pochi minuti.
Fammi sapere se hai domande o suggerimenti nei commenti qui sotto e sarò felice di risponderti.