GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come eseguire MySQL in un contenitore Docker

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 e MYSQL_PASSWORD – Crea un nuovo account utente iniziale, separatamente dalla root utente. Se imposti anche il MYSQL_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 la root utente. Questo sostituisce il MYSQL_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


Docker
  1. Come eseguire MySQL in Docker Container:una guida semplice e facile da seguire

  2. Come SSH in un contenitore Docker

  3. Come eseguire un comando su un contenitore Docker in esecuzione

  4. Come assegnare un IP statico a un contenitore Docker

  5. Come creare un contenitore Docker MySQL per i test

Come eseguire lo stack ELK su Docker Container

Come eseguire SSH in un contenitore Docker ed eseguire comandi

Come eseguire un'app .NET in Docker

Come eseguire PHPMyAdmin in un contenitore Docker

Come eseguire Grafana in un contenitore Docker

Come eseguire i contenitori Docker