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.

Torna su