GNU/Linux >> Linux Esercitazione >  >> Cent OS

Come creare un contenitore Docker MySQL per i test

Docker è un ambiente di runtime di container che consente ai programmi di operare in un ambiente incarcerato senza dipendenze esterne richieste. I contenitori sono simili in alcuni concetti alle macchine virtuali, tuttavia non utilizzano un hypervisor e vengono eseguiti in una singola istanza del kernel, condividendo spesso l'istanza con altri contenitori. Una delle caratteristiche principali della containerizzazione è la mancanza di dipendenze esterne; il contenitore ha tutte le librerie e i componenti di runtime necessari per eseguire l'applicazione.

Oracle fornisce immagini di container Docker da MySQL 5.5.40 e quindi rende Docker una scelta eccellente per eseguire test su più versioni e rilasci di MySQL. Spesso è desiderabile eseguire test di regressione di un bug per determinare su quali versioni il bug ha effetto o per quantificare in che modo il comportamento è cambiato tra le versioni.

Docker consente l'avvio abbastanza leggero delle istanze MySQL con una funzione di pulizia automatica una volta completato il test. In questo post, illustrerò alcuni dei modi in cui puoi utilizzare Docker per avviare MySQL e utilizzarlo per i test.

Prima di poter utilizzare Docker, è necessario installarlo sul computer di prova. Se non hai accesso diretto a un sistema Linux, ti consiglio di ottenere VirtualBox e creare una macchina virtuale Linux per l'esecuzione di immagini Docker, alcune buone scelte per il sistema operativo sarebbero CentOS 7 o Fedora (l'ultimo). Fedora può essere considerata la variante a monte delle varianti Linux aziendali e quindi sarà garantito il supporto più recente per le tecnologie.

Installazione

1. Sui sistemi che hanno YUM o DNF e hanno accesso ai repository del sistema operativo, puoi installare la finestra mobile con questo comando:

# yum install docker docker-common

Dopo aver eseguito quel comando, YUM dovrebbe chiederti di installare la finestra mobile e tutte le dipendenze necessarie.

2. Per utilizzare Docker, devi quindi avviare il servizio:

# service docker start

Nelle distribuzioni CentOS/RHEL 7, usa systemctl:

# systemct start docker

3. Se vuoi che Docker sia disponibile dopo ogni riavvio, abilitalo con questo comando:

# chkconfig docker on

Nelle distribuzioni CentOS/RHEL 7, usa systemctl:

# systemct enable docker

Come funziona Docker

Docker di per sé è solo un gestore di container, per utilizzare efficacemente Docker è necessario avere accesso a docker.io, il sito da cui vengono pubblicate e scaricate le immagini dei container Docker. I container Docker in docker.io contengono un'immagine dei binari MySQL e delle informazioni sulle dipendenze in modo che il servizio Docker possa scaricare i file di runtime appropriati e il filesystem virtuale in cui eseguire il container Docker.

Quando crei un'istanza del contenitore Docker, esso alloca un filesystem virtuale per il contenitore che è persistente tra le esecuzioni (a meno che tu non utilizzi il –rm interruttore). Puoi avviare e arrestare i contenitori Docker a piacimento e rimarranno persistenti durante i riavvii. Una delle funzionalità di Docker che lo rende particolarmente utile per le istanze di test è la possibilità di cancellare il contenitore una volta interrotto. Se avvii un container Docker con l'opzione –rm, quando il container viene arrestato viene eliminato anche dal filesystem e aiuta a eliminare il cruft.

Creazione e avvio di container

Ecco il comando più semplice per avviare l'ultima versione di MySQL in un container e rimuoverla dopo lo spegnimento:

# docker run --rm --name=mysql8 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:latest

Ecco la decodifica di quel comando:

  • porta mobile – docker è il nome eseguibile utilizzato per eseguire tutte le funzioni della finestra mobile.
  • corri – questo è un comando dato alla finestra mobile, indica alla finestra mobile di creare un nuovo contenitore ed eseguirlo.
  • –rm – questo indica a Docker di rimuovere i file contenitore dopo che è stato interrotto.
  • –nome=mysql8 – questo dice a Docker di nominare il contenitore "mysql8" per tutti i futuri riferimenti ai comandi. Questo nome è arbitrario ma dovrebbe essere descrittivo per evitare conflitti con più istanze del contenitore.
  • -e MYSQL_ALLOW_EMPTY_PASSWORD – questo passa un'opzione al contenitore durante la fase di creazione, dicendo al contenitore di assegnare una password di root vuota durante il processo di creazione.
  • -d mysql/mysql-server:latest – questo indica a docker il repository e la versione da scaricare da docker.io durante la creazione del contenitore. La parola "più recente" è una versione magica che dice a Docker di scaricare la versione più recente di tutte le versioni di MySQL, puoi anche specificare i numeri di versione esatti.

Alcune delle utili modifiche del comando precedente potrebbero essere specificare una versione di MySQL o assegnarle un nome univoco. Ecco un esempio in cui viene specificato MySQL 8.0.13 e viene utilizzato un nome univoco simile:

# docker run --rm --name=mysql8013 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:8.0.13

Puoi anche richiamare istanze MySQL 5.5 in questo modo:

docker run --rm --name=mysql55 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:5.5
Nota :Gli esempi di cui sopra ignorano DELIBERATAMENTE qualsiasi sicurezza per motivi di convenienza e convenienza. NON utilizzare o replicare queste configurazioni in un ambiente di produzione, NON sono sicure!

Utilizzo dell'istanza Docker

Finora abbiamo solo discusso dell'avvio dell'istanza Docker, ma senza l'accesso al programma client non è molto utile. Creare connessioni utilizzando i programmi client MySQL standard è abbastanza semplice perché utilizzano connessioni socket locali e si connettono tramite localhost. Se vuoi connetterti usando un IP di rete, come con MySQL Workbench, è un po' più complicato.

Ecco un esempio di una connessione CLI mysql locale:

# docker exec -it mysql8 mysql -uroot

Analizziamo quel comando:

  • esecutivo – dice a docker di eseguire un comando all'interno di un'istanza del contenitore docker.
  • -it – dice a Docker di creare una sessione interattiva con uno pseudo-tty.
  • mysql8 – dice a docker che il comando verrà eseguito nell'istanza del contenitore denominata 'mysql8'.
  • mysql -uroot – questa è l'effettiva riga di comando della shell grezza che la finestra mobile esegue all'interno dell'istanza del contenitore.

I contenitori MySQL Docker includono le utilità della riga di comando MySQL, come mysql, mysqlpump, mysqldump, ecc. Se si desidera reindirizzare i dati in uno degli strumenti della riga di comando, come il caricamento di un dump, sarà necessario rimuovere - t dalla riga di comando, in questo modo:

# docker exec -i mysql8 mysql -uroot < dumpfile.sql

Accesso TCP/IP ai container Docker

Utilizzando i comandi di esempio sopra, Docker assegnerà indirizzi IP privati ​​non instradabili ai container e creerà un'interfaccia di rete virtuale sul tuo sistema. L'interfaccia virtuale e il contenitore costituiscono gli endpoint per effettuare connessioni TCP/IP al servizio in esecuzione nel contenitore.

Per scoprire l'indirizzo IP della tua interfaccia di rete virtuale sulla tua macchina Linux, esegui questo comando:

shell> ip addr show docker0

8: docker0:  mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:f7:98:c4:d1 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:f7ff:fe98:c4d1/64 scope link
valid_lft forever preferred_lft forever

Nell'esempio sopra puoi vedere che l'indirizzo IP assegnato alla mia interfaccia Docker virtuale è 172.17.0.1, questo è l'endpoint da cui si connetterà l'applicazione client; questo è l'indirizzo IP che utilizzerai per creare un utente in MySQL.

Per determinare l'indirizzo IP assegnato alla tua istanza del contenitore, esegui questo comando, sostituendo il nome della tua istanza con 'mysql' nell'esempio:

shell> docker inspect mysql8 | grep IPAddress

"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",

Nell'output precedente l'indirizzo IP dell'istanza del contenitore è 172.17.0.2, quindi gli endpoint 172.17.0.1 <-> 172.17.0.2. Quindi dobbiamo creare un utente per la connessione del programma client, altrimenti riceverai una negazione perché 172.17.0.1 non è un host consentito.

shell> docker exec -it mysql8 mysql -uroot

mysql> create user [email protected] identified by '';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all on *.* to [email protected] with grant option;
Query OK, 0 rows affected (0.01 sec)

Dopo aver creato l'utente di rete, puoi connetterti all'istanza del contenitore come root senza password. La rete 172.17.0.0/16 è una rete privata non instradabile a cui non è possibile accedere dall'esterno della tua macchina, quindi non c'è pericolo che qualcuno acceda al tuo container Docker dall'esterno.

Spegnimento e pulizia

Dopo aver completato il test, dovrai spegnere l'istanza Docker e pulire i file se non hai utilizzato --rm all'avvio.

Per arrestare un'istanza Docker:

# docker stop mysql8

Per rimuovere l'istanza:

# docker rm mysql8

Conclusione

Spero di aver illustrato l'utilità dei contenitori Docker per i test e l'utilizzo della sandbox. Docker ha il potenziale per modificare il flusso di lavoro e rendere i test di regressione veloci, facili e convenienti. L'hub Docker contiene immagini per la versione 5.5.40 e successive.


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

  2. Come uscire da un container Docker

  3. Come creare un'immagine personalizzata da un contenitore Docker

  4. Come creare un repository Yum locale per i pacchetti MySQL Enterprise

  5. Come specificare il nome host per il contenitore in esecuzione?

Apprendimento Docker:come creare un contenitore Docker

Come installare Docker su Debian 11

Come creare un database in MySQL

Come eseguire PHPMyAdmin in un contenitore Docker

Come creare un'immagine Docker da un contenitore in esecuzione

Come creare un contenitore dell'applicazione Django Docker