Come eseguire il server PostgreSQL nel contenitore Docker

27 feb 2024 4 min di lettura
Come eseguire il server PostgreSQL nel contenitore Docker
Indice dei contenuti

Introduzione

PostgreSQL è un sistema di database relazionale open source e di classe enterprise con il supporto per le query SQL e JSON. PostgreSQL ha il sostegno di oltre 20 anni di sviluppo della comunità. Ciò garantisce i massimi livelli di integrità, prestazioni e resilienza. L'applicazione più comune di PostgreSQL è nel data warehouse per applicazioni mobili, web e di analisi. PostgreSQL viene fornito con una serie di funzionalità come replica asincrona, backup online/a caldo, transazioni nidificate e molte altre funzionalità.

Il metodo più comune per installare il server database PostgreSQL proviene dai repository dei pacchetti del sistema operativo. Il pacchetto .deb per i sistemi basati su Debian e il pacchetto .rpm per i sistemi basati su RHEL. Il metodo alternativo per eseguire PostgreSQL è all'interno di un contenitore. Ciò garantisce uno stato del sistema pulito e il massimo livello di portabilità. In questo post del blog ci concentriamo sull'installazione e sull'esecuzione del server database PostgreSQL nel contenitore Docker.

Installazione del Docker Container Engine

Segui i passaggi forniti nel nostro articolo di seguito per configurare l'ambiente Docker sul tuo sistema Linux. Gli utenti Windows e macOS possono utilizzare strumenti basati sulla GUI come Docker Desktop e Portainer.

Dopo l'installazione confermare controllando la release della versione.

docker --version
Docker version 25.0.3, build 4debf41

Crea il file Compose per PostgreSQL

Crea la directory dei dati per il database PostgreSQL

mkdir ~/postgresql && cd ~/postgresql

Crea il file Compose che definirà come creare il contenitore.

vim docker-compose.yml

Successivamente definiamo il contenuto del file YAM. Le immagini del contenitore su Docker Hub sono ciò che stiamo utilizzando per creare un'istanza in esecuzione del server PostgreSQL. I dati del database verranno archiviati nella directory locale ./pgdata .

Creiamo anche un contenitore che esegue lo strumento di gestione basato sul web Admirer PostgreSQL.

  • PostgreSQL 16
services:
  db:
    image: postgres:16-bookworm
    restart: always
    environment:
      POSTGRES_PASSWORD: StrongPassword01
    volumes:
      - ./pgdata:/var/lib/postgresql/data

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
  • PostgreSQL 15
services:
  db:
    image: postgres:15-bookworm
    restart: always
    environment:
      POSTGRES_PASSWORD: StrongPassword01
    volumes:
      - ./pgdata:/var/lib/postgresql/data

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
  • PostgreSQL 14
services:
  db:
    image: postgres:14-bookworm
    restart: always
    environment:
      POSTGRES_PASSWORD: StrongPassword01
    volumes:
      - ./pgdata:/var/lib/postgresql/data

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
  • PostgreSQL 13
services:
  db:
    image: postgres:13-bookworm
    restart: always
    environment:
      POSTGRES_PASSWORD: StrongPassword01
    volumes:
      - ./pgdata:/var/lib/postgresql/data

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
  • PostgreSQL 12
services:
  db:
    image: postgres:12-bookworm
    restart: always
    environment:
      POSTGRES_PASSWORD: StrongPassword01
    volumes:
      - ./pgdata:/var/lib/postgresql/data

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
  • PostgreSQL 11
services:
  db:
    image: postgres:11-bookworm
    restart: always
    environment:
      POSTGRES_PASSWORD: StrongPassword01
    volumes:
      - ./pgdata:/var/lib/postgresql/data

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

Esecuzione del server PostgreSQL nel contenitore

Successivamente avviamo il contenitore eseguendo i comandi di composizione. L'opzione -d lo mantiene in esecuzione in modalità distaccata (in background) senza una sessione interattiva attiva.

Ezoico
$ docker compose up -d
[+] Running 22/22
 ✔ adminer 7 layers [⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                                                            11.0s
   ✔ 09e2bc8a597c Pull complete                                                                                                                                                                  0.9s
   ✔ 092a59d5d649 Pull complete                                                                                                                                                                  0.7s
   ✔ e4dca1b56763 Pull complete                                                                                                                                                                  0.4s
   ✔ 378feffe5197 Pull complete                                                                                                                                                                  0.8s
   ✔ 3bd4de3ac847 Pull complete                                                                                                                                                                  1.1s
   ✔ 44d5566ceca7 Pull complete                                                                                                                                                                  1.1s
   ✔ 3dafa7b9d4fc Pull complete                                                                                                                                                                  1.3s
 ✔ db 13 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                                                          13.5s
   ✔ 1f7ce2fa46ab Pull complete                                                                                                                                                                  1.8s
   ✔ e75b44f17b07 Pull complete                                                                                                                                                                  1.6s
   ✔ d601ea737a84 Pull complete                                                                                                                                                                  2.9s
   ✔ 0f4fcee3f93d Pull complete                                                                                                                                                                  2.1s
   ✔ 428f7aff61bc Pull complete                                                                                                                                                                  2.6s
   ✔ 7787ed5ab4f3 Pull complete                                                                                                                                                                  3.0s
   ✔ 3d2b66cffddc Pull complete                                                                                                                                                                  3.3s
   ✔ e7dee0dd847b Pull complete                                                                                                                                                                  3.3s
   ✔ a24060178bac Pull complete                                                                                                                                                                  5.8s
   ✔ 0eb290c85bd2 Pull complete                                                                                                                                                                  4.2s
   ✔ 88b80c4fe471 Pull complete                                                                                                                                                                  3.9s
   ✔ eac33d14a11e Pull complete                                                                                                                                                                  4.4s
   ✔ d40b681a9814 Pull complete                                                                                                                                                                  4.9s
[+] Running 2/3
 ⠋ Network postgresql_default      Created                                                                                                                                                       1.0s
 ✔ Container postgresql-adminer-1  Started                                                                                                                                                       0.8s
 ✔ Container postgresql-db-1       Started                                                                                                                                                       0.7s

Conferma lo stato del contenitore eseguendo la finestra mobile componi con flag ps.

docker compose ps
NAME                   IMAGE                  COMMAND                  SERVICE   CREATED         STATUS         PORTS
postgresql-adminer-1   adminer                "entrypoint.sh php -…"   adminer   5 minutes ago   Up 5 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
postgresql-db-1        postgres:11-bookworm   "docker-entrypoint.s…"   db        5 minutes ago   Up 5 minutes   5432/tcp

Per accedere alla shell del contenitore, esegui;

docker exec -ti postgresql-db-1 bash
root@a79ad82fd433:/#

La versione del server PostgreSQL può essere verificata utilizzando il comando psql -V.

psql -V
psql (PostgreSQL) 11.22 (Debian 11.22-1.pgdg120+1)

Da lì puoi iniziare psql, che è un front-end basato su terminale per PostgreSQL.

su - postgres
psql (11.22 (Debian 11.22-1.pgdg120+1))
Type "help" for help.
postgres=#

Possiamo creare un utente e un database di prova;

  • Utente del database: nov1
  • Nome del database: miosito
  • Password: Str0ngPassw0rd
CREATE USER nov1 WITH PASSWORD 'Str0ngPassw0rd';
CREATE ROLE
CREATE DATABASE mywebsite WITH OWNER = 'nov1';
CREATE DATABASE

Per uscire da PostgreSQL e dalla shell del contenitore, utilizzare il comando exittre volte.

exit
logout

I dati del database verranno archiviati in ./pgdata come definito nel file di composizione.

ls -1 pgdata/
base
global
pg_commit_ts
pg_dynshmem
pg_hba.conf
pg_ident.conf
pg_logical
pg_multixact
pg_notify
pg_replslot
pg_serial
pg_snapshots
pg_stat
pg_stat_tmp
pg_subtrans
pg_tblspc
pg_twophase
PG_VERSION
pg_wal
pg_xact
postgresql.auto.conf
postgresql.conf
postmaster.opts
postmaster.pid

Accesso alla dashboard di Admirer

Apri il tuo browser web su http://ServerIP:8080.

Accedi come utente, database e con la password.

Otterrai una dashboard. Da qui puoi gestire il tuo database: creare tabelle, funzioni, viste, importare dati, ecc

Conclusione

Eseguendo il database PostgreSQL in un contenitore apprezzerai l'efficienza della sua amministrazione. Gli altri vantaggi della containerizzazione vanno dalla portabilità, all’isolamento alla scalabilità. Puoi sollevare l'immagine del contenitore con i dati ed eseguirla in un host separato in pochi secondi. Decidere se adottare un database containerizzato si riduce alle tue preferenze di utilizzo.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.