1. Introduzione
In questo tutorial, impareremo come eseguire PostgreSQL in un container Docker. Questa tecnica semplifica la configurazione di PostgreSQL. Pertanto, è una soluzione ideale per ambienti di sviluppo e test.
Iniziamo.
2. Requisiti preliminari
Prima di tutto, assicuriamoci che Docker sia installato e in esecuzione sulla nostra macchina. Se non lo è, seguiamo la guida all’installazione di Docker ufficiale per configurarlo.
Successivamente, scarichiamo l’immagine Docker di PostgreSQL da Docker Hub:
docker pull postgres:latest
Questo comando recupera l’ultima versione dell’immagine PostgreSQL. In alternativa, possiamo specificare una versione specifica sostituendo latest con il tag desiderato (ad esempio, 13.2). Possiamo trovare tutti i tag disponibili nella pagina PostgreSQL Docker Hub.
3. Avviare un Container PostgreSQL
Per avviare un container PostgreSQL, esegui il seguente comando:
docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
Analizziamo questo comando:
- –name my-postgres: Assegna un nome al contenitore.
- -e POSTGRES_PASSWORD=mysecretpassword: Imposta la password per l’utente predefinito postgres.
- -d: Esegue il contenitore in modalità staccata. Ciò significa che il contenitore si avvia in background.
- postgres: Specifica l’immagine Docker da utilizzare. In questo caso, utilizzeremo l’ultima versione.
4. Accesso all’istanza PostgreSQL
Ora, dovremmo avere un’istanza di PostgreSQL all’interno di un container chiamato my-postgres. Pertanto, non possiamo usare il comando psql direttamente dal nostro terminale poiché non sarà disponibile. Invece, possiamo utilizzare il comando docker exec per accedere all’istanza di PostgreSQL all’interno del container:
docker exec -it my-postgres psql -U postgres
Ora, dovremmo avere una shell che possiamo utilizzare per interagire con il database. Di solito non accediamo al database direttamente. Ma, in questo momento, è l’unico modo per accedere al database.
Configuriamo il container in modo che esponga il database all’host.
5. Configurazione del Container PostgreSQL
Per connetterci dalla macchina host, dobbiamo configurare il container in modo che esponga la porta del database. Per fare ciò, possiamo utilizzare l’opzione –publish o -p per mappare la porta del container a una porta dell’host:
docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres
Ora avremo accesso al database dalla macchina host se ci connettiamo a localhost:5432. Inoltre, abbiamo impostato la password per l’utente postgres in modo da poter utilizzare un client di database, come DBeaver, per connetterci al database.
Ricordare questi comandi può essere difficile. Invece, potremmo utilizzare un file docker-compose.yml per definire il nostro contenitore. In questo modo, possiamo anche condividere la configurazione con il nostro team.
Fermiamoci e cancelliamo il container attuale:
docker stop my-postgres
docker rm my-postgres
Ora, possiamo creare il nostro file docker-compose.yml.
6. Utilizzare Docker Compose
Un docker-compose è semplicemente una descrizione in file dei contenitori che vogliamo eseguire nel formato YAML. Creiamo un file docker-compose.yml per il contenitore Postgresql:
version: '3.1'
services:
db:
image: postgres
restart: always
environment:
POSTGRES_PASSWORD: mysecretpassword
ports:
- 5432:5432
Sopra, stiamo definendo un servizio chiamato db con configurazioni simili a quelle precedenti. L’unica novità qui è l’opzione di riavvio. In breve, diciamo a Docker di riavviare sempre il contenitore se si ferma, ad esempio, a causa di un errore o di un riavvio del sistema.
Eseguiamo il container utilizzando il comando docker-compose dalla stessa directory in cui abbiamo salvato questo file:
docker-compose up -d
Ancora una volta, utilizziamo l’opzione -d per eseguire il container in modalità staccata.
Per fermare e rimuovere il container, possiamo utilizzare il comando docker-compose down:
docker-compose down
Ora, sappiamo come creare facilmente un database locale utilizzando Docker. Ma ricorda, questo non è adatto per la produzione. Dobbiamo considerare altre cose per il nostro ambiente di produzione.
Se abbiamo l’opportunità, dovremmo optare per un servizio di database gestito—ad esempio, Amazon RDS, Google Cloud SQL o Azure Database for PostgreSQL.
7. Persistenza dei Dati del Contenitore PostgreSQL
Con l’attuale configurazione, se rimuoviamo il container PostgreSQL, perdiamo anche i dati contenuti al suo interno. Per persistere i dati, possiamo montare una cartella locale nel container utilizzando l’opzione –volume o -v. Ad esempio:
docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -v /path/to/local/folder:/var/lib/postgresql/data -d postgres
In breve, i dati di PostgreSQL utilizzeranno la cartella path/to/local/folder per i loro contenuti. Quindi, se rimuoviamo il container e lo ricreiamo con lo stesso volume, i dati saranno ancora lì.
8. Conclusione
In questo tutorial, abbiamo imparato come eseguire e configurare PostgreSQL in un container Docker. Abbiamo mostrato prima un comando rapido per avere un’istanza del database in esecuzione. Poi, abbiamo utilizzato un file docker-compose.yml per definire il container. Infine, abbiamo discusso della persistenza dei dati montando una cartella locale nel container.