Docker Compose è uno strumento potente per definire ed eseguire ambienti multi-container. In questo articolo vedremo come utilizzarlo per avviare rapidamente un database PostgreSQL e inizializzarlo con uno script SQL personalizzato.
1. Prerequisiti
- Docker installato sul sistema
- Docker Compose installato
- Conoscenza base di YAML e SQL
2. Struttura del progetto
Organizziamo i file in una semplice struttura:
.
├── docker-compose.yml
└── init.sql
3. Contenuto del file docker-compose.yml
Il file docker-compose.yml
definisce il servizio PostgreSQL e specifica il volume che monta lo script di inizializzazione.
services:
db:
image: postgres
container_name: postgres_db
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5432:5432"
4. Contenuto del file init.sql
Questo script verrà eseguito automaticamente all’avvio del container, creando tabelle o inserendo dati iniziali.
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
INSERT INTO users (username, email)
VALUES ('alice', 'alice@example.com'),
('bob', 'bob@example.com');
5. Avvio del servizio
Avvia il container con il seguente comando:
docker compose up -d
Il database PostgreSQL sarà accessibile sulla porta 5432
del tuo host e il contenuto di init.sql
verrà eseguito alla creazione del volume dati.
6. Verifica
Puoi connetterti al database per verificare che le tabelle siano state create:
docker exec -it postgres_db psql -U user -d mydb
All'interno della shell psql
, puoi eseguire:
SELECT * FROM users;
Conclusione
Inizializzare PostgreSQL con Docker Compose è un modo rapido ed efficace per preparare ambienti di sviluppo o test. Grazie alla possibilità di eseguire script all’avvio, puoi definire facilmente la struttura del database e i dati di esempio.