Postgres in locale con docker

Buongiorno a tutti,

Avevo la necessità di controllare che i backup del db di produzione fossero corretti e che, in qualsiasi momento, potessi replicare la situazione in un qualsivoglia ambiente.

Volevo inoltre far si che la macchina su cui sto lavorando restasse il più pulita possibile, motivo per cui è normale pensare a docker.

Primo passaggio è creare il Dockerfile :

FROM postgres
ENV POSTGRES_PASSWORD docker
COPY ./sql/pgcluster.sql /docker-entrypoint-initdb.d/

Ho impostato una password fittizia per l’utente postgres e copiato il file sql (il backup di produzione) in un’apposita cartella all’interno del container che sarà eseguito nella fase di startup del servizio postgres.

Il file che ho a disposizione ripristina tutto il cluster, nel caso si desiderasse una configurazione diversa si potrebbe pensare di aggiungere qualche altra variabile d’ambiente come specificato nella documentazione Docker Hub.

A questo punto per tirare su la macchina con i dati bastano le seguenti istruzioni:

# creazione dell'immagine pg con tag latest
docker image build . -t pg:latest  
# esecuzione del container 'pg_container' utilizzando l'immagine pg:latest
# e mappando la porta 5432 del container con la 5433 in locale 
docker run -d -p 5433:5432 --name pg_container pg:latest

L’istanza del database all’interno del container è mappata sulla porta 5433 e si potrebbe già accedere al db tramite il PgAdmin o da terminale.

Per eseguire la mia applicazione IDF con Java avevo bisogno di specificare anche la porta di connessione :

Cattura

Nella stringa jdbc non si vede tutto il contenuto che è :

driver=org.postgresql.Driver
url=jdbc:postgresql://localhost:5433/cloud_admin

I parametri DSN servono soltanto per testare la connessione. Senza questa stringa di connessione JDBC la nostra connection string dell’applicativo risulterà vuota e avremo un errore nella connessione al db.

Quando la porta è la 5432 (default) si poteva omettere la stringa jdbc e inserire semplicemente come nome del server localhost (in questo caso).

A presto

5 Mi Piace

Grazie @mauro.v della condivisione della tua esperienza, penso che possa risultare utile a molti altri utenti Foundation.

1 Mi Piace