I container Docker ti consentono di creare 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.
Per iniziare
L'immagine MySQL ufficiale su Docker Hub fornisce tutto il necessario per iniziare. Le immagini sono disponibili per le versioni MySQL 5.6, 5.7 e 8.0. Specifica quello che desideri utilizzare come tag immagine:
docker pull mysql:8.0
Prima della distribuzione, dovrai configurare un volume Docker o associare il montaggio per rendere permanente il tuo database. In caso contrario, i tuoi dati andranno persi al riavvio del contenitore. Il montaggio deve essere eseguito su /var/lib/mysql
all'interno del contenitore.
È inoltre necessario impostare una password per l'utente root di MySQL. Usa il MYSQL_ROOT_PASSWORD
variabile d'ambiente. MySQL rifiuterà di inizializzare 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/mysql-data:/var/lib/mysql -d mysql:8.0
Il completamento della routine di prima esecuzione di MySQL richiederà alcuni secondi. Puoi controllare se il database è attivo eseguendo docker logs my-mysql
. Verifica la presenza di una riga che contenga ready for connections
.
RELAZIONATO: Come utilizzare Docker per containerizzare PHP e Apache
Composizione Docker
La docker run
comando può diventare rapidamente lungo, soprattutto se si hanno requisiti di configurazione complessi. Scrivere un docker-compose.yml
il file è più gestibile. Ecco un esempio:
version: "3"
services:
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD
volumes:
- mysql:/var/lib/mysql
volumes:
mysql:
Puoi avviare MySQL usando MYSQL_ROOT_PASSWORD=secure docker-compose up -d
.
RELAZIONATO: Come installare Docker e Docker Compose su Linux
Connessione a MySQL
Puoi ottenere una shell MySQL interattiva collegandoti al container ed eseguendo mysql
comando. Ciò fornisce l'interfaccia a riga di comando completa di MySQL, in modo da poter utilizzare 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 reindirizzarlo al comando:
docker exec -it my-mysql mysql -psecret database_name < path-to-file.sql
È necessario impostare un'associazione di porte se si desidera accedere a MySQL dal proprio host. Associa una porta host alla porta 3306 del contenitore. Aggiungi quanto segue al tuo docker-compose.yml
file, all'interno del mysql
definizione del servizio:
ports:
- 33060:3306
Questo legherà la porta 33060 sul tuo computer host alla porta 3306 del container. Se non stai usando Docker Compose, passa -p 33060:3306
su docker run
quando avvii il tuo contenitore. Ora potrai connetterti a localhost:33060
utilizzando client MySQL in esecuzione sul tuo host.
Se devi connetterti da un altro Contenitore Docker, è meglio utilizzare Docker Compose. Definire un altro servizio per il nuovo contenitore. Entrambi i container esisteranno nella stessa rete Docker. Sarai in grado di connetterti utilizzando la porta 3306 sul nome host del contenitore MySQL (che corrisponde al nome del servizio definito nel tuo file Compose).
Creazione automatica di un database e di un utente
Le immagini MySQL Docker supportano variabili di ambiente facoltative 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
– Il nome di uno schema di database da creare quando il server viene inizializzato per la prima volta.MYSQL_USER
eMYSQL_PASSWORD
– Crea un nuovo account utente iniziale, separatamente dallaroot
utente. Se imposti anche ilMYSQL_DATABASE
variabile, il tuo nuovo account utente sarà automaticamente ottenere tutti i privilegi sul database appena creato.MYSQL_RANDOM_ROOT_PASSWORD
– Imposta questa variabile in modo che MySQL generi automaticamente una nuova password per laroot
utente. Questo sostituisce ilMYSQL_ROOT_PASSWORD
variabile. La password generata verrà emessa nel flusso di output standard alla prima esecuzione. Per questo motivo, dovresti prestare attenzione quando usi questa variabile negli ambienti CI:la password potrebbe essere visibile a chiunque abbia accesso ai registri dei lavori!
File seme di prima esecuzione
Avrai spesso tabelle e dati che desideri inserire nel database non appena viene creato. Le immagini MySQL sono configurate per cercare .sh
, .sql
e .sql.gz
file nel /docker-entrypoint-initdb.d
del contenitore directory.
Tutti i file trovati verranno eseguiti in sequenza. L'ordine sarà sempre alfabetico. Puoi applicare i prefissi dei nomi di file (ad es. 1-seed_tables.sql
/ 2-seed_data.sql
) per assicurarsi che le operazioni vengano completate nell'ordine previsto.
Questo meccanismo ti consente di eseguire facilmente il seeding 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, monta una directory sul tuo host nella directory del contenitore.
MySQL ignorerà i file di inizializzazione a meno che non ci sia un database nella directory dei dati. La cancellazione del contenuto della directory dei dati attiverà una nuova inizializzazione al riavvio del contenitore.
Modificare le impostazioni del server
I file di configurazione del server MySQL verranno caricati 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. Puoi ottenere l'elenco delle opzioni disponibili dal manuale di MySQL Server.
L'utilizzo di un file delle opzioni semplifica la visualizzazione e la modifica della configurazione in futuro. Puoi controllare 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
Questa variante di docker run
avvierà MySQL con il registro delle query generali abilitato. Il mysql
binary è il punto di ingresso dell'immagine, quindi i flag sono passati a docker run
dopo che il nome dell'immagine verrà inoltrato a mysql
.
Conclusione
L'esecuzione di MySQL all'interno di Docker è molto più semplice e veloce rispetto all'installazione "bare metal" di MySQL Server. 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 seed di database di prima esecuzione. Ciò ti consente di decollare rapidamente, sia che tu stia partendo da zero o utilizzando uno schema esistente.
RELAZIONATO: Come distribuire rapidamente WordPress come contenitore Docker