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 :

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