Distribuere mysql ved hjelp av docker-komponering

Distribuere mysql ved hjelp av docker-komponering
MySQL er et av de mest populære databasestyringssystemene der ute. Mange applikasjoner bruker det for deres backend -behov. MySQL har i hovedsak to komponenter en er MySQL -databaseserveren som administrerer dataene og samhandler med omverdenen, og gir applikasjoner dataene de ønsker, samt, oppdatering av poster når ny informasjon kommer inn. MySQL -klient kan være hvilken som helst ekstern applikasjon som phpmyadmin eller den tilpassede webappen din eller MySQLs egen kommandolinjeklient som også heter Just MySQL.

Å sette opp MySQL -serveren er ofte kjedelig, du må sette opp brukerkonto, åpne porter, angi passord, lage databaser og tabeller osv. I dette innlegget vil jeg prøve å minimere noen av elendighetene dine ved å lage en enkel MySQL-distribusjon ved hjelp av Docker-Compose.

Ansvarsfraskrivelse: På ingen måte er denne komponeringsfilen “Produksjonsklar”. Hvis du vil kjøre en MySQL -database i produksjonen, må du stramme opp sikkerheten ganske mye mer. Dette vil omfatte å låse rotkontoen, sette opp TLS og sette strengere tillatelser på forskjellige databaser for forskjellige databasebrukere, etc.

Et enkelt eksempel

Forsikre deg først om at Docker er installert på arbeidsstasjonen eller serveren din. For å kjøre en enkel MySQL -tjeneste, oppretter du først en ny mappe på Docker -verten din. Navn det mysqlcompose:

$ mkdir mysqlcompose

Opprett en fildocker-komponering.YML i den ved hjelp av din favoritt tekstredigerer, og skriv følgende:

Versjon: '3.1'
tjenester:
DB:
Bilde: MySQL
Kommando:--Default-Authentication-plugin = mysql_native_password
Start på nytt: Alltid
miljø:
Mysql_root_password: useadifferentpassword
Administrator:
Bilde: Administrator
Start på nytt: Alltid
Porter:
- 8080: 8080

Kjør deretter følgende kommando fra den samme katalogen:

$ docker -compose up -d

Dette med ovennevnte komponeringsfil vil det opprettes to nye containere, vil først være databasetjenesten, og den andre vil være en administratorbeholder som vil fungere som en frontend for databasestyring.

Selv om kommunikasjonen mellom administrasjonsbeholderen og MySQL -tjenesten er over TCP ved hjelp av port 3306, trenger vi ikke å åpne noen porter i databasen vår. Dette er fordi Docker -containere på et bronettverk kan snakke med hverandre på hvilken som helst port (bortsett fra på standard Bridge -nettverket til en Docker -vert). Du kan liste opp Docker -nettverket ved å bruke kommandoen Docker Network LS, og det vil vise deg at et nytt nettverk faktisk er opprettet.

Besøk http: // localhost: 8080 og logg inn som root ved å bruke passordet useadifferentpassword, og du vil få et veldig enkelt brukergrensesnitt for å samhandle med mysql. MySQL kan konfigureres til å bli autentisert på en rekke måter, men vi har valgt å bruke bare mysql_native_password som en autentiseringsmetode. Du kan passere MySQL Root -passordet ved hjelp av en miljøvariabel, som vist i selve YML -filen.

Merk: For klarhetens skyld nevnte jeg viktige legitimasjoner som MySQL Root -passordet og andre brukerpassord i ren tekst, her. Dette er åpenbart en sikkerhetsrisiko. Den riktige måten å gjøre dette på ville være å bruke Docker -hemmeligheter, men det er et tema for en annen dag.

Distribusjon av WordPress

WordPress er kanskje det klassiske eksemplet for å fremheve styrkene og nyansene til Docker-Compose. Som de fleste vanlige installasjoner av WordPress, bruker Docker -varianten også MySQL for backend -databasen. Databasen kjøres imidlertid som en annen beholder der webserveren (sammen med applikasjonen WordPress) kjører på en annen container.

Her er et utdrag fra den offisielle dokumentasjonen av Docker-Compose angående oppsettet.

Versjon: '3'
tjenester:
DB:
Bilde: MySQL: 5.7
Volum:
- db_data:/var/lib/mysql
Start på nytt: Alltid
miljø:
Mysql_root_password: SomewordPress
Mysql_database: WordPress
Mysql_user: WordPress
Mysql_password: createenewpasswordpleieontcopythis
WordPress:
kommer an på:
- db
Bilde: WordPress: Siste
Porter:
- "8000: 80"
Start på nytt: Alltid
miljø:
WordPress_DB_HOST: DB: 3306
WordPress_DB_USER: WordPress
WordPress_DB_Password: CreateenewPasswordPLEATEDOnCopythis
WordPress_DB_NAME: WordPress
Volum:
db_data:

Dette vil opprette et WordPress -nettsted som er åpent på Port 8000 av Docker -verten din. Du kan se at tjenesteseksjonen definerer to tjenester under den:

Først MySQL -databasen med et navngitt volum for å lagre vedvarende data og noen miljøvariabler for å konfigurere MySQL -bruker, database og passord.

For det andre, WordPress -beholderen som har en webserver, PHP og WordPress, alle installert med den. Den må snakke med databasen (tilgjengelig på DB: 3306 internt), den utsetter Port 80 internt for resten av verden via Docker -vertens port 8000. Den har også noen få miljøvariabler som definerer hvor du finner databasen (DB: 3306), sammen med databasenavnet, brukernavn og passord som vi definerte på MySQL -tjenesten.

Konklusjon

Forhåpentligvis illustrerer de ovennevnte eksemplene hvordan du konfigurerer en MySQL -beholder. Den underliggende ideen er at du passerer databasenavnet og andre konfigurasjonsdetaljer som miljøvariabler. Du kan alltid henvise til beskrivelsen som er gitt på Docker Hub, og så kan du konfigurere MySQL for din egen applikasjon.