L'immagine MySQL ufficiale su Docker Hub fornisce tutto il necessario per avviare una nuova instanza di MYSQL. Le immagini sono disponibili per le versioni MySQL 5.6, 5.7 e 8.0. Per avviare il container basta specificare la versione desiderata direttamente come tag immagine:
docker pull mysql: 8.0
Prima della distribuzione, dovrai configurare un volume Docker o associare il montaggio in cui rendere permanente il database. In caso contrario, i tuoi dati andranno persi al riavvio del container. Il montaggio deve essere eseguito su /var/lib/mysql all'interno del container.
È inoltre necessario impostare una password per l'utente root di MySQL. Per impostarla utilizza la variabile di ambiente MYSQL_ROOT_PASSWORD, altrimenti se questa variabile non è impostata MySQL rifiuterà di inizializzare il container. Quindi ecco come eseguire MySQL soddisfacendo questi prerequisiti:
docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=password_sicura -v $HOME/mysql-data:/var/lib/mysql -d mysql:8.0
Il completamento della routine nella prima esecuzione di MySQL richiederà alcuni secondi. Al termine del processo puoi verificare se il database è attivo eseguendo il comando docker log my-mysql e verificare la presenza di una riga che contiene "ready for connections".
Il comando docker run può diventare estremamente lungo, soprattutto se si hanno requisiti di configurazione complessi. La scrittura di un file docker-compose.yml è 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=password_sicura docker-compose up -d
Puoi ottenere una shell MySQL interattiva collegandoti al container ed eseguendo il comando mysql. Ciò fornisce l'interfaccia della riga di comando completa di MySQL, in modo da poter utilizzare tutti i comandi appropriati.
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 -p password_sicura database_name < path-to-file.sql
È necessario associare le porte se si desidera accedere a MySQL dal proprio host. Associa una porta host alla porta 3306 del container. Aggiungi quanto segue al tuo docker-compose.yml, all'interno della definizione del servizio di mysql:
ports:
- 33060:3306
Questo collegherà la porta 33060 sul tuo computer host alla porta 3306 del container. Se non stai usando Docker Compose, passa -p 33060:3306 a docker run quando avvii il container. Ora sarai in grado di connetterti a localhost:33060 utilizzando i client MySQL in esecuzione sul tuo host.
Se devi connetterti da un altro container Docker, è meglio usare Docker Compose. Definire un altro servizio per il nuovo container. Entrambi i container esisteranno nella stessa rete Docker. Sarai in grado di connetterti utilizzando la porta 3306 sul nome host del container MySQL (che corrisponde al nome del servizio definito nel tuo file Compose).
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 e MYSQL_PASSWORD – Creare 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– 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, dovresti prestare attenzione quando usi questa variabile negli ambienti CI - la password potrebbe essere visibile a chiunque abbia accesso ai log dei job!
L'esecuzione di MySQL all'interno di Docker è molto più semplice e veloce rispetto all'installazione manuale di MySQL su un server fisico. 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 risparmiare tempo, sia che tu stia iniziando da zero o utilizzando uno schema esistente.