Salta al contenuto principale

Eseguire PostgreSQL in un Contenitore Docker

DevOps Postgres Docker Database
Autore
Harpal Singh
Software Engineer
Tradotto da
Namastecode
Indice dei contenuti

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.