Come eseguire MySQL in un contenitore Docker

I contenitori Docker ti consentono di avviare rapidamente nuove applicazioni senza inquinare il tuo sistema con dipendenze. Un database MySQL è un requisito comune per il software basato sul web. Ecco come ottenere una nuova istanza MySQL in esecuzione in Docker in pochi minuti.

Guida introduttiva

L'immagine ufficiale di MySQL su Docker Hub fornisce tutto il necessario per iniziare. Le immagini sono disponibili per le versioni di MySQL 5.6, 5.7 e 8.0. Specificare quello che si desidera utilizzare come tag immagine:

docker pull mysql: 8.0

Prima della distribuzione, sarà necessario configurare un volume Docker o eseguire il bind mount per rendere persistente il database. In caso contrario, il i dati andranno persi al riavvio del contenitore. Il montaggio dovrebbe essere effettuato in/var/lib/mysql all'interno del contenitore.

È inoltre necessario impostare una password per l'utente root di MySQL. Usa la variabile d'ambiente MYSQL_ROOT_PASSWORD. MySQL rifiuterà di inizializzarsi se questa variabile non è impostata. Prova a scegliere una password sicura.

Ecco come eseguire MySQL soddisfacendo questi prerequisiti:

docker run –name my-mysql -e MYSQL_ROOT_PASSWORD = secret -v $ HOME/dati-mysql:/var/lib/mysql -d mysql: 8.0

Il completamento della routine di prima esecuzione di MySQL richiederà alcuni secondi. È possibile verificare se il database è attivo eseguendo i log docker my-mysql. Cerca una riga che contenga connessioni pronte.

Docker Compose

Il comando docker run può diventare rapidamente lungo, specialmente se hai requisiti di configurazione complessi. La scrittura di un file docker-compose.yml è più gestibile. Ecco un esempio:

versione: “3” servizi: mysql: image: mysql: 8.0 ambiente: – volumi MYSQL_ROOT_PASSWORD: – mysql:/var/lib/mysql volumi: mysql:

Puoi avviare MySQL utilizzando MYSQL_ROOT_PASSWORD = secure docker-compose up -d.

Connessione a MySQL

Puoi ottenere una shell MySQL interattiva allegando al contenitore ed eseguendo il comando mysql. Questo fornisce l'interfaccia a riga di comando MySQL completa, quindi puoi usare tutti i comandi e i flag familiari.

docker exec -it my-mysql mysql -p

Questo comando apre una shell come utente root e richiede una password.

Per importare un file SQL dal tuo filesystem, puoi inserirlo nel comando:

docker exec -it mio-mysql mysql -psecret nome_database & lt; path-to-file.sql

È necessario impostare un binding di porta se si desidera accedere a MySQL dal proprio host. Associa una porta host alla porta 3306 del contenitore. Aggiungi quanto segue al tuo file docker-compose.yml, all'interno della definizione del servizio mysql:

ports: – 33060: 3306

Questo collegherà la porta 33060 sul tuo computer host alla porta 3306 del contenitore. Se non stai utilizzando Docker Compose, passa -p 33060: 3306 a docker run quando avvii il contenitore. Ora sarai in grado di connetterti a localhost: 33060 utilizzando i client MySQL in esecuzione sul tuo host.

Se devi connetterti da un altro contenitore Docker, è meglio usare Docker Compose. Definisci un altro servizio per il nuovo contenitore. Entrambi i contenitori esisteranno nella stessa rete Docker. Potrai connetterti utilizzando la porta 3306 sul nome host del contenitore MySQL (questo corrisponde al nome del servizio definito nel tuo file Compose).

Creazione automatica di un database e di un utente

Le immagini Docker di MySQL supportano variabili di ambiente opzionali che consentono di gestire la configurazione del database di prima esecuzione. Imposta queste variabili per eseguire automaticamente il provisioning di un nuovo database e account utente vuoti:

  • MYSQL_DATABASE & # 8211; Il nome di uno schema di database da creare quando il server viene inizializzato per la prima volta.
  • MYSQL_USER e MYSQL_PASSWORD & # 8211; Crea un nuovo account utente iniziale, separatamente per l'utente root. Se imposti anche la variabile MYSQL_DATABASE, al tuo nuovo account utente verranno automaticamente concessi tutti i privilegi sul database appena creato.
  • MYSQL_RANDOM_ROOT_PASSWORD & # 8211; Imposta questa variabile in modo che MySQL generi automaticamente una nuova password per l'utente root. Questo sostituisce la variabile MYSQL_ROOT_PASSWORD. La password generata verrà emessa nel flusso di output standard alla prima esecuzione. Per questo motivo, è necessario prestare attenzione quando si utilizza questa variabile in ambienti CI & # 8211; la password può essere visibile a chiunque abbia accesso ai registri dei lavori!

File seme di prima esecuzione

Tu & # 8217; Avrai spesso tabelle e dati che desideri inserire nel database non appena viene creato. Le immagini MySQL sono configurate per cercare i file .sh, .sql e .sql.gz nella directory container & # 8217; s /docker-entrypoint-initdb.d.

Tutti i file trovati verranno eseguiti in sequenza. L'ordine sarà sempre alfabetico. Puoi applicare i prefissi dei nomi dei file (ad esempio 1-seed_tables.sql/2-seed_data.sql) per assicurarti che le operazioni vengano completate nell'ordine previsto.

Questo meccanismo ti consente di eseguire facilmente il seed della tua nuova istanza di database con i dati iniziali. Puoi scrivere il tuo Dockerfile, usando MySQL come immagine di base, e aggiungere i tuoi file seed in /docker-entrypoint-initdb.d. In alternativa, bind monta una directory sul tuo host nella directory del contenitore.

MySQL ignorerà i file di inizializzazione a meno che non ci sia alcun database nella directory dei dati. La cancellazione del contenuto della directory dei dati attiverà una nuova inizializzazione quando riavvii il contenitore.

Modifica delle impostazioni del server

I file di configurazione del server MySQL saranno caricato da /etc/mysql/conf.d. Aggiungi i tuoi file di configurazione a questa directory, utilizzando un Dockerfile override o un bind mount, per regolare le impostazioni del server. È possibile ottenere l'elenco delle opzioni disponibili dal manuale di MySQL Server.

L'utilizzo di un file di opzioni semplifica la visualizzazione e la modifica della configurazione in futuro. Controlli il tuo file nel controllo della versione insieme al tuo progetto. Tuttavia, i flag della riga di comando sono disponibili anche per modifiche e sperimentazioni una tantum.

docker run –name my-mysql -e MYSQL_ROOT_PASSWORD = secret -d mysql: latest –general-log = on

Questo la variante di docker run avvierà MySQL con il log delle query generali abilitato. Il binario mysql è il punto di ingresso dell'immagine, quindi i flag passati a docker run dopo il nome dell'immagine verranno inoltrati a mysql.

Conclusione

Esecuzione di MySQL all'interno di Docker è molto più semplice e veloce rispetto all'installazione di MySQL Server & # 8220; bare-metal. & # 8221; Puoi eseguire più istanze MySQL senza il rischio di conflitti.

Le immagini Docker ufficiali sono dotate di utili opzioni di configurazione e supporto integrato per i seed del database di prima esecuzione. Ciò ti consente di decollare rapidamente, sia che tu stia partendo da zero o utilizzando uno schema esistente.


Posted

in

by

Tags: