Si të ekzekutoni MySQL në një kontejner Docker


Kontejnerët Docker ju lejojnë të rrotulloni shpejt aplikacionet e reja pa e ndotur sistemin tuaj me varësi. Një bazë të dhënash MySQL është një kërkesë e zakonshme për softuerin e bazuar në ueb. Ja se si të ekzekutoni një shembull të ri MySQL në Docker në vetëm disa minuta.

Fillimi

Imazhi zyrtar i MySQL në Docker Hub ofron gjithçka që nevojitet për të filluar. Imazhet janë të disponueshme për versionet 5.6, 5.7 dhe 8.0 të MySQL. Specifikoni atë që dëshironi të përdorni si etiketë imazhi:

docker pull mysql:8.0

Përpara vendosjes, do t'ju duhet të konfiguroni një volum Docker ose të lidhni montimin për të vazhduar hyrjen në bazën tuaj të të dhënave. Përndryshe, të dhënat tuaja do të humbasin kur kontejneri të riniset. Montimi duhet të bëhet në /var/lib/mysql brenda kontejnerit.

Ju gjithashtu duhet të vendosni një fjalëkalim për përdoruesin rrënjë të MySQL. Përdorni variablin e mjedisit MYSQL_ROOT_PASSWORD. MySQL do të refuzojë të inicializohet nëse kjo variabël nuk është vendosur. Mundohuni të zgjidhni një fjalëkalim të sigurt.

Ja se si të ekzekutoni MySQL duke përmbushur këto parakushte:

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

Rutina e ekzekutimit të parë MySQL do të marrë disa sekonda për të përfunduar. Mund të kontrolloni nëse baza e të dhënave është e hapur duke ekzekutuar docker logs my-mysql. Kontrolloni për një linjë që përmban gati për lidhje.

Docker Compose

Komanda docker run mund të bëhet shpejt e gjatë, veçanërisht nëse keni kërkesa komplekse konfigurimi. Shkrimi i një skedari docker-compose.yml është më i mirëmbajtur. Këtu është një shembull:

version: "3"

services:
  mysql:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD
    volumes:
      - mysql:/var/lib/mysql

volumes:
  mysql:

Mund të nisni MySQL duke përdorur MYSQL_ROOT_PASSWORD=secure docker-compose up -d.

Lidhja me MySQL

Ju mund të fitoni një guaskë interaktive MySQL duke u bashkangjitur në kontejner dhe duke ekzekutuar komandën mysql. Kjo siguron ndërfaqen e plotë të linjës së komandës MySQL, kështu që ju mund të përdorni të gjitha komandat dhe flamujt e njohur.

docker exec -it my-mysql mysql -p

Kjo komandë hap një guaskë si përdorues rrënjë dhe kërkon një fjalëkalim.

Për të importuar një skedar SQL nga sistemi juaj i skedarëve, mund ta futni atë në komandën:

docker exec -it my-mysql mysql -psecret database_name < path-to-file.sql

Duhet të konfiguroni një lidhje porti nëse dëshironi të aksesoni MySQL nga hosti juaj. Lidhni një port pritës në portën 3306 të kontejnerit. Shtoni sa vijon në skedarin tuaj docker-compose.yml, brenda përkufizimit të shërbimit mysql:

ports:
 - 33060:3306

Kjo do të lidhë portin 33060 në kompjuterin tuaj pritës me portën 3306 të kontejnerit. Nëse nuk jeni duke përdorur Docker Compose, kaloni -p 33060:3306 te docker run kur të filloni kontejnerin tuaj. Tani do të jeni në gjendje të lidheni me localhost:33060 duke përdorur klientët MySQL që funksionojnë në hostin tuaj.

Nëse ju duhet të lidheni nga tjetër kontejner Docker, është më mirë të përdorni Docker Compose. Përcaktoni një shërbim tjetër për kontejnerin e ri. Të dy kontejnerët do të ekzistojnë në të njëjtin rrjet Docker. Ju do të jeni në gjendje të lidheni duke përdorur portën 3306 në emrin e hostit të kontejnerit MySQL (kjo përputhet me emrin e shërbimit të përcaktuar në skedarin tuaj të Përbërjes).

Krijimi automatik i një baze të dhënash dhe përdoruesi

Imazhet e MySQL Docker mbështesin variablat opsionale të mjedisit që ju lejojnë të menaxhoni konfigurimin e bazës së të dhënave të ekzekutimit të parë. Vendosni këto variabla që të ofrojnë automatikisht një bazë të dhënash të re boshe dhe llogari përdoruesi:

  • MYSQL_DATABASE – Emri i skemës së bazës së të dhënave për t'u krijuar kur serveri inicializohet për herë të parë.
  • MYSQL_USER dhe MYSQL_PASSWORD – Krijo një llogari të re fillestare të përdoruesit, veçmas nga përdoruesi root. Nëse vendosni gjithashtu variablin MYSQL_DATABASE, llogarisë tuaj të re të përdoruesit automatikisht do t'i jepen të gjitha privilegjet në bazën e të dhënave të krijuar rishtazi.
  • MYSQL_RANDOM_ROOT_PASSWORD – Vendoseni këtë variabël që MySQL të gjenerojë automatikisht një fjalëkalim të ri për përdoruesin root. Kjo zëvendëson variablin MYSQL_ROOT_PASSWORD. Fjalëkalimi i gjeneruar do të emetohet në rrjedhën standarde të daljes në ekzekutimin e parë. Për shkak të kësaj, duhet të keni kujdes kur përdorni këtë variabël në mjediset CI – fjalëkalimi mund të jetë i dukshëm për këdo që ka akses në regjistrat e punës!

Skedarët e farës së ekzekutimit të parë

Shpesh do të keni tabela dhe të dhëna që dëshironi të vendosni në bazën e të dhënave sapo të krijohet. Imazhet MySQL janë konfiguruar për të kërkuar skedarët .sh, .sql dhe .sql.gz/docker-entrypoint të kontejnerit Drejtoria -initdb.d.

Çdo skedar i gjetur do të ekzekutohet në mënyrë sekuenciale. Renditja do të jetë gjithmonë sipas alfabetit. Ju mund të aplikoni prefikset e emrave të skedarit (p.sh. 1-seed_tables.sql/2-seed_data.sql) për t'u siguruar që operacionet të përfundojnë sipas rendit të synuar.

Ky mekanizëm ju lejon të shihni me lehtësi shembullin tuaj të ri të bazës së të dhënave me të dhënat fillestare. Ju mund të shkruani skedarin tuaj Docker, duke përdorur MySQL si imazhin bazë, dhe të shtoni skedarët tuaj fillestar në /docker-entrypoint-initdb.d. Përndryshe, lidhni montimin e një drejtorie në hostin tuaj në direktorinë e kontejnerit.

MySQL do të injorojë skedarët e inicializimit nëse nuk ka asnjë bazë të dhënash në drejtorinë e të dhënave. Fshirja e përmbajtjes së drejtorisë tuaj të të dhënave do të shkaktojë një inicializim të ri kur të rinisni kontejnerin.

Rregullimi i cilësimeve të serverit

Skedarët e konfigurimit të serverit MySQL do të ngarkohen nga /etc/mysql/conf.d. Shtoni skedarët tuaj të konfigurimit në këtë direktori, duke përdorur një anulim të Dockerfile ose një montim bind, për të rregulluar cilësimet e serverit. Ju mund të merrni listën e opsioneve të disponueshme nga manuali i MySQL Server.

Përdorimi i një skedari opsionesh e bën të lehtë shikimin dhe modifikimin e konfigurimit tuaj në të ardhmen. Ju kontrolloni skedarin tuaj në kontrollin e versionit së bashku me projektin tuaj. Sidoqoftë, flamujt e linjës së komandës janë gjithashtu të disponueshëm për ndryshime dhe eksperimente të njëpasnjëshme.

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

Ky variant i docker run do të nisë MySQL me regjistrin e përgjithshëm të pyetjeve të aktivizuar. Binarja mysql është pika hyrëse e imazhit, kështu që flamujt e kaluar te docker run pas emrit të imazhit do të përcillen te mysql.

konkluzioni

Ekzekutimi i MySQL brenda Docker është shumë më i shpejtë dhe më i lehtë sesa instalimi i MySQL Server të zhveshur. Ju mund të ekzekutoni disa instanca MySQL pa rrezikun e konfliktit.

Imazhet zyrtare të Docker vijnë me opsione të dobishme konfigurimi dhe mbështetje të integruar për farat e bazës së të dhënave të ekzekutimit të parë. Kjo ju lejon të dilni shpejt nga toka, pavarësisht nëse jeni duke filluar nga e para ose duke përdorur një skemë ekzistuese.