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 MySQL, PostgreSQL, 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:
$ 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 nomemy-mysql
al tuo container per una riferibilità più semplice.-e MYSQL_ROOT_PASSWORD=my-secret-pw
imposta la password root per MySQL sumy-secret-pw
. Sostituiscimy-secret-pw
con una password sicura a tua scelta.-e MYSQL_DATABASE=mydb
crea opzionalmente un database chiamatomydb
. Puoi cambiaremydb
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:
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
.
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.
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.
Mysql -u root -p
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 chiamatomy-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.
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.
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.
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.
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.
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.
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.
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:
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