Come Eseguire un Database MySQL in un Contenitore Docker

the use of a local containerized database offers flexibility and simplifies the setup process. It allows for closely replicating production environments without the complexity of traditional database installations. Docker streamlines this process, making it easy to deploy, manage, and scale databases in isolated containers with just a few commands.

In this guide, you’ll learn how to:

  • Run a local containerized database
  • Access the shell of a containerized database
  • Connect to a containerized database from your host
  • Persist database data in a volume
  • Cleanup lab

Prerequisites

To follow this guide, you must have Docker installed. For installation instructions, please refer to the Docker website.

Step-by-Step Guide to Setting Up Containerized Databases

1. Run a Local Containerized Database

La maggior parte dei sistemi di database più popolari, come MySQLPostgreSQL, e MongoDB, hanno immagini ufficiali Docker disponibili su Docker Hub. Queste immagini curate aderiscono alle migliori pratiche, garantendo che tu abbia accesso alle ultime funzionalità e agli aggiornamenti di sicurezza. 

Per iniziare, visita Docker Hub e cerca il database che ti interessa. Ogni pagina dell’immagine fornisce istruzioni dettagliate su come eseguire il container, personalizzare la tua configurazione e configurare il database per soddisfare le tue esigenze. Per ulteriori informazioni sull’immagine MySQL fornita in questa guida, fare riferimento alla pagina dell’immagine MySQL su Docker Hub.

Per eseguire un container di database, puoi utilizzare sia l’interfaccia grafica di Docker Desktop che la CLI. Per eseguire un container utilizzando la CLI, esegui il seguente comando in un terminale:

Shell

 

$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

 

In questo comando:

  • --name my-mysql assegna il nome my-mysql al tuo container per una riferibilità più semplice.
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw imposta la password root per MySQL su my-secret-pw. Sostituisci my-secret-pw con una password sicura a tua scelta.
  • -e MYSQL_DATABASE=mydb crea opzionalmente un database chiamato mydb. Puoi cambiare mydb con il nome del database desiderato.
  • -d esegue il container in modalità detached, il che significa che funziona in background.
  • mysql:latest specifica che vuoi utilizzare la versione più recente dell’immagine MySQL.

Per verificare che il tuo container stia funzionando, esegui docker ps in un terminale:

Shell

 

run docker ps

PUoi anche controllare lo stesso nella console di Docker Desktop:

2. Accedi alla Shell di un Database Containerizzato

Quando un database viene eseguito all’interno di un container Docker, potresti aver bisogno di accedere alla sua shell per gestire il database, eseguire comandi o eseguire compiti amministrativi. Docker fornisce un modo semplice per farlo utilizzando il comando docker exec. Inoltre, puoi utilizzare l’interfaccia grafica di Docker Desktop se preferisci.

Se non hai ancora un container di database in esecuzione, fai riferimento a Avvia un Database Containerizzato Locale. Per accedere al terminale di un container MySQL utilizzando la CLI, puoi usare il seguente comando docker exec.

Shell

docker exec -it my-mysql bash 

In questo comando:

  • docker exec informa Docker che vuoi eseguire un comando in un container in esecuzione.
  • -it garantisce che il terminale a cui stai accedendo sia interattivo, così puoi digitare comandi al suo interno.
  • my-mysql è il nome del tuo container MySQL. Se hai chiamato diversamente il tuo container quando l’hai avviato, usa quel nome invece.
  • Il comando che vuoi eseguire all’interno del container è bash. Esso apre una shell Bash che ti permette di interagire con il file system del container e con le applicazioni installate.
  • Dopo aver eseguito questo comando, avrai accesso alla shell bash all’interno del tuo container MySQL, da cui puoi gestire direttamente il tuo server MySQL. Puoi eseguire Exit per tornare al tuo terminale.

Verifica se il container Docker è in esecuzione.

Shell

 

run docker ps

Una volta acceso il terminale del container, puoi eseguire qualsiasi strumento disponibile in quel container. Il seguente esempio (Immagine) mostra utilizzare MySQL nel container per elencare i database.

Shell

Mysql -u root -p

MySQL

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> create database testdb;

Query OK, 1 row affected (0.11 sec)

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

| testdb             |

+--------------------+

6 rows in set (0.00 sec)

 

mysql> connect testdb;

Connection id:    12

Current database: testdb

 

mysql> SHOW TABLES;

Empty set (0.02 sec)

 

mysql> create table test (id numeric,fname varchar(20));

Query OK, 0 rows affected (0.10 sec)

 

mysql> SHOW TABLES;

+------------------+

| Tables_in_testdb |

+------------------+

| test             |

+------------------+

1 row in set (0.00 sec)

 

mysql> insert into test values (1,'arvind');

Query OK, 1 row affected (0.08 sec)

 

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from test;

+------+--------+

| id   | fname  |

+------+--------+

|    1 | arvind |

+------+--------+

1 row in set (0.00 sec)

La tabella che abbiamo creato e i dati che abbiamo salvato nella tabella di test sono persistenti solo fino a quando utilizziamo lo stesso container; tutti i dati saranno persi una volta che ricreiamo o costruiamo un nuovo container.

Puoi验证Exiting il container e rientrando nel database del container per vedere se i dati esistono. Vedrai quindi che i dati esistono ancora nel database purché il container sia in esecuzione.

3. Connettiti a un Database Containerizzato dal Tuo Host

Connettersi a un database containerizzato dalla propria macchina host comporta la mappatura di una porta all’interno del container su una porta della macchina host. Questo processo garantisce che il database all’interno del container sia accessibile tramite la rete della macchina host. Per MySQL, la porta predefinita è 3306. Esponendo questa porta, è possibile utilizzare vari strumenti di gestione del database o applicazioni sulla macchina host per interagire con il proprio database MySQL.

Prima di iniziare, è necessario rimuovere qualsiasi container che avete eseguito in precedenza per questa guida. Per arrestare e rimuovere un container, si può:

  • nella terminale, eseguire docker remove --force my-mysql per rimuovere il container chiamato my-mysql;
  • Oppure, nel Docker Dashboard, selezionare l’icona Elimina accanto al proprio container nella vista Containers.

Dopodiché, è possibile utilizzare la GUI di Docker Desktop o la CLI per eseguire il container con la porta mappata.

Shell

 

docker run -p 3307:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

Nel comando, -p 3307:3306 mappa la porta 3307 sull’host sulla porta 3306 nel container.

4. Persistenza dei Dati del Database in un Volume

Persistere i dati del database in un volume Docker è necessario per garantire che i dati sopravvivano ai riavvii e alle rimozioni del container. Un volume Docker permette di archiviare i file del database al di fuori dello strato scrivibile del container, rendendo possibile aggiornare il container, cambiare basi e condividere dati senza perderli. È possibile collegare un volume al proprio container di database utilizzando sia la CLI di Docker che la GUI di Docker Desktop.

Nota: Come già fatto previously nella sezione Connetti a un Database Containerizzati, prima di iniziare, devi rimuovere tutti i container che hai eseguito in precedenza per questa guida.

Successivamente, puoi utilizzare la GUI di Docker Desktop o la CLI per eseguire il container con un volume.

Per eseguire il tuo container di database con un volume collegato, includi l’opzione —v con il tuo comando docker run. Questa specifica il nome di un volume e il percorso dove il database memorizza i suoi dati all’interno del container. Se il volume non esiste, Docker lo crea automaticamente per te.

Per eseguire un container di database con un volume collegato, verifica che i dati persistano. Esegui il container e collega il volume.

Shell

docker run –name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -v my-db-volume:/var/lib/mysql -d mysql:latest

Questo comando monta il volume chiamato my-db-volume alla directory /var/lib/mysql nel container.

Crea alcuni dati nel database. Usa il comando docker exec per eseguire MySQL all’interno del container e creare una tabella.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "CREATE TABLE IF NOT EXISTS mydb.mytable (column_name VARCHAR(255)); INSERT INTO mydb.mytable (column_name) VALUES ('value');"

 

Questo comando utilizza lo strumento MySQL nel container per creare una tabella chiamata mytable con una colonna chiamata column_name, e infine, inserisce un valore.

Ferma e rimuovi il container. Senza un volume, la tabella che hai creato sarà persa quando rimuovi il container.

Shell

docker remove --force my-mysql

Avvia un nuovo container con il volume collegato. Questa volta, non è necessario specificare nessuna variabile d’ambiente poiché la configurazione è salvata nel volume.

Shell

docker run --name my-mysql -v my-db-volume:/var/lib/mysql -d mysql:latest

Verifica che la tabella che hai creato esista ancora. Poi, usa di nuovo il comando docker exec per eseguire MySQL all’interno del container.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "SELECT * FROM mydb.mytable;"

 

Questo comando utilizza lo strumento MySQL nel contenitore per selezionare tutti i record dalla tabella table. Dovresti vedere un output simile al seguente. 

SQL

 

column_name

value

5. Pulizia dell’Immagine del Contenitore MySQL

Per rimuovere un contenitore, utilizzare il comando docker remove con i nomi o gli ID dei contenitori separati da spazi. Ad esempio:

Shell

 

docker remove --force 90b8831a4b8
docker remove --force 36252896d6ff
docker remove --force d86dff3809e8

Conclusione

In definitiva, eseguire MySQL con Docker fornisce una soluzione portatile, scalabile ed efficiente per la gestione del database. I contenitori isolati di Docker aiutano a semplificare il deployment, ridurre i problemi di compatibilità e ottimizzare l’uso delle risorse. Permettendo un facile controllo della versione e il ripristino degli ambienti, Docker supporta uno sviluppo e un test rapido. È ideale per gestire i database MySQL nei microservizi, rendendoli più facili da distribuire e scalare mantenendo prestazioni forti.

Source:
https://dzone.com/articles/guide-for-running-mysql-database-in-docker-container