Come scrivere uno script di inizializzazione per MySQL in Docker con Docker Compose

Come scrivere uno script di inizializzazione per MySQL in Docker con Docker Compose

Quando si utilizza MySQL in un ambiente Docker, è spesso utile o necessario inizializzare il database con dati o configurazioni personalizzate al primo avvio. Questo è possibile grazie alla funzionalità nativa di MySQL Docker che esegue automaticamente gli script presenti nella directory /docker-entrypoint-initdb.d.

Struttura dei file

Per prima cosa, organizza il tuo progetto in una directory con la seguente struttura:

mysql-init/
├── docker-compose.yml
└── init/
    └── init.sql

Creazione dello script di inizializzazione

Nel file init/init.sql puoi inserire qualsiasi comando SQL che desideri venga eseguito al primo avvio del container. Ad esempio:

CREATE DATABASE IF NOT EXISTS my_db;
USE my_db;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

INSERT INTO users (name, email) VALUES
('Mario Rossi', 'mario@example.com'),
('Luisa Verdi', 'luisa@example.com');

Scrivere il file docker-compose.yml

Nel file docker-compose.yml definisci il servizio MySQL e monta la directory degli script SQL:



services:
  mysql:
    image: mysql:8
    container_name: mysql_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password123
      MYSQL_DATABASE: my_db
    ports:
      - "3306:3306"
    volumes:
      - ./init:/docker-entrypoint-initdb.d

Avviare il container

Posizionati nella directory mysql-init e avvia il container con:

docker compose up -d

MySQL verrà avviato e lo script init.sql verrà eseguito automaticamente durante il primo avvio. Gli script non verranno rieseguiti nei successivi avvii, a meno che non si elimini il volume dei dati associato al container.

Verifica

Per connetterti al database ed eseguire una verifica, puoi usare il client MySQL da un altro container o dalla tua macchina locale:

docker exec -it mysql_db mysql -u root -p

Dopo aver inserito la password (password123), puoi eseguire una query per verificare la presenza dei dati:

USE my_db;
SELECT * FROM users;

Conclusione

Utilizzare docker compose con MySQL e script di inizializzazione ti consente di creare ambienti riproducibili e automatizzati per lo sviluppo e il testing. Questo approccio è particolarmente utile per applicazioni che richiedono una configurazione o dei dati iniziali specifici.