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.
$ 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 exit
tre 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.