Hoe een MySQL-database in een Docker-container te draaien

Het gebruik van een lokale gecontaineriseerde database biedt flexibiliteit en vereenvoudigt de installatie. Het maakt het mogelijk om productieomgevingen nauwkeurig te repliceren zonder de complexiteit van traditionele database-installaties. Docker stroomlijnt dit proces, waardoor het eenvoudig is om databases in geïsoleerde containers te deployen, beheren en schalen met slechts enkele opdrachten.

In deze handleiding leer je hoe je:

  • Een lokale gecontaineriseerde database uitvoert
  • De shell van een gecontaineriseerde database toegang geeft
  • Verbindt met een gecontaineriseerde database vanaf je host
  • Databasegegevens in een volume persistent maakt
  • De labruimte opruimt

Prerequisites

Om deze handleiding te volgen, moet je Docker geïnstalleerd hebben. Voor installatie-instructies, raadpleeg de Docker-website.

Stapsgewijze handleiding voor het instellen van gecontaineriseerde databases

1. Voer een lokale gecontaineriseerde database uit

De meeste populaire databasesystemen, zoals MySQLPostgreSQL, en MongoDB, hebben officiële Docker-afbeeldingen beschikbaar op Docker Hub. Deze gecurateerde afbeeldingen houden zich aan de beste praktijken, waardoor je toegang hebt tot de nieuwste functies en beveiligingsupdates. 

Om aan de slag te gaan, bezoek Docker Hub en zoek naar de database die je interesseert. Elke afbeeldingspagina biedt gedetailleerde instructies over hoe je de container kunt uitvoeren, je instellingen kunt aanpassen en de database kunt configureren om aan je behoeften te voldoen. Voor meer informatie over de MySQL-afbeelding die in deze gids wordt aangeboden, verwijs naar de MySQL-afbeeldingspagina op Docker Hub.

Om een databasecontainer uit te voeren, kun je zowel de Docker Desktop GUI als de CLI gebruiken. Om een container uit te voeren met behulp van de CLI, voer het volgende commando uit in een terminal:

Shell

 

$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

 

In dit commando:

  • --name my-mysql wijs je de naam my-mysql toe aan je container voor eenvoudige verwijzing.
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw stelt het rootwachtwoord voor MySQL in op my-secret-pw. Vervang my-secret-pw door een veilig wachtwoord naar keuze.
  • -e MYSQL_DATABASE=mydb maakt optioneel een database genaamd mydb aan. Je kunt mydb wijzigen in de gewenste databasenaam.
  • -d start de container in losgekoppelde modus, wat betekent dat deze op de achtergrond draait.
  • mysql:latest specificeert dat je de nieuwste versie van de MySQL-image wilt gebruiken.

Om te verifiëren dat je container draait, voer je docker ps uit in een terminal:

Shell

 

run docker ps

Je kunt dit ook controleren in de Docker Desktop console:

2. Toegang tot de Shell van een Containerized Database

Wanneer een database draait binnen een Docker-container, kun je mogelijk de shell ervan moeten benaderen om de database te beheren, opdrachten uit te voeren of administratieve taken uit te voeren. Docker biedt een eenvoudige manier om dit te doen met behulp van de docker exec opdracht. Bovendien kun je de GUI van Docker Desktop gebruiken als je een grafische interface prefereert.

Als je nog geen database-container hebt draaien, verwijs dan naar Run a Local Containerized Database. Om de terminal van een MySQL-container te benaderen via de CLI, kun je de volgende docker exec opdracht gebruiken.

Shell

docker exec -it my-mysql bash 

In deze opdracht:

  • docker exec informeert Docker dat je een opdracht wilt uitvoeren in een draaiende container.
  • -it zorgt ervoor dat de terminal die je benadert interactief is, zodat je opdrachten kunt intypen.
  • my-mysql is de naam van uw MySQL-container. Als u uw container een andere naam heeft gegeven toen u deze startte, gebruik dan die naam in plaats daarvan.
  • Het commando dat u binnen de container wilt uitvoeren is bash. Het opent een Bash-shell waarmee u kunt communiceren met het bestandssysteem van de container en geïnstalleerde applicaties.
  • Na het uitvoeren van dit commando, krijgt u toegang tot de bash-shell binnen uw MySQL-container, van waaruit u uw MySQL-server direct kunt beheren. U kunt Exit uitvoeren om terug te keren naar uw terminal.

Controleer of de Docker-container actief is.

Shell

 

run docker ps

Zodra u toegang heeft tot de terminal van de container, kunt u alle beschikbare tools in die container uitvoeren. Het volgende (Image) voorbeeld laat zien dat MySQL wordt gebruikt in de container om de databases weer te geven.

Shell

Mysql -u root -p

MySQL

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> create database testdb;

Query OK, 1 row affected (0.11 sec)

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

| testdb             |

+--------------------+

6 rows in set (0.00 sec)

 

mysql> connect testdb;

Connection id:    12

Current database: testdb

 

mysql> SHOW TABLES;

Empty set (0.02 sec)

 

mysql> create table test (id numeric,fname varchar(20));

Query OK, 0 rows affected (0.10 sec)

 

mysql> SHOW TABLES;

+------------------+

| Tables_in_testdb |

+------------------+

| test             |

+------------------+

1 row in set (0.00 sec)

 

mysql> insert into test values (1,'arvind');

Query OK, 1 row affected (0.08 sec)

 

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from test;

+------+--------+

| id   | fname  |

+------+--------+

|    1 | arvind |

+------+--------+

1 row in set (0.00 sec)

De tabel die we hebben aangemaakt en de gegevens die we in de testtabel hebben opgeslagen, zijn slechts persistent totdat we dezelfde container gebruiken; alle gegevens gaan verloren zodra we de container opnieuw maken of een nieuwe container bouwen.

U kunt valideren door de container te verlaten en opnieuw in te loggen op de containerdatabase om te zien of de gegevens bestaan. U zult dan zien dat de gegevens nog steeds aanwezig zijn in de database zolang de container actief is.

3. Maak verbinding met een gecontaineriseerde database vanaf uw host

Het verbinden met een gecontaineriseerde database vanaf uw hostmachine vereist het koppelen van een poort binnen de container naar een poort op uw hostmachine. Dit proces zorgt ervoor dat de database binnen de container toegankelijk is via het netwerk van de hostmachine. Voor MySQL is de standaardpoort 3306. Door deze poort bloot te geven, kunt u verschillende databasebeheerhulpmiddelen of toepassingen op uw hostmachine gebruiken om met uw MySQL database te interacteren.

Voor u begint, moet u alle containers die u eerder voor deze gids hebt uitgevoerd verwijderen. Om een container te stoppen en te verwijderen, kunt u:

  • In een terminal, docker remove --force my-mysql uitvoeren om de container genaamd my-mysql te verwijderen;
  • Of, in het Docker Dashboard, het Delete-pictogram naast uw container in het Containers-overzicht selecteren.

Vervolgens kunt u de Docker Desktop GUI of CLI gebruiken om de container met de gekoppelde poort uit te voeren.

Shell

 

docker run -p 3307:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

In deze opdracht, -p 3307:3306 koppelt poort 3307 op de host naar poort 3306 in de container.

4. Databasegegevens persistent opslaan in een Volume

Het persistent opslaan van databasegegevens in een Docker-volume is nodig om ervoor te zorgen dat uw gegevens overleven bij het herstarten en verwijderen van containers. Een Docker-volume laat u databasebestanden opslaan buiten de schrijfbaar laag van de container, waardoor het mogelijk is om de container te upgraden, basis te wisselen en gegevens te delen zonder deze te verliezen. U kunt een volume aan uw databasecontainer koppelen via de Docker CLI of de Docker Desktop GUI.

Let op: Net als eerder gedaan in het gedeelte Verbinden met een Containerized Database, moet u voordat u begint, alle containers die u eerder voor deze handleiding hebt uitgevoerd, verwijderen.

Vervolgens kunt u de Docker Desktop GUI of CLI gebruiken om de container met een volume te runnen.

Om uw databasecontainer met een aangehecht volume te runnen, voegt u de optie —v toe aan uw docker run opdracht. Dit specificeert een volumenaam en het pad waar de database zijn gegevens opslaat binnen de container. Als het volume niet bestaat, maakt Docker het automatisch voor u aan.

Om een databasecontainer met een aangehecht volume te runnen, verifieer dat de gegevens persistent zijn. Start de container en hecht het volume aan.

Shell

docker run –name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -v my-db-volume:/var/lib/mysql -d mysql:latest

Deze opdracht monteert het volume genaamd my-db-volume naar de /var/lib/mysql map in de container.

Maak enkele gegevens in de database aan. Gebruik de docker exec opdracht om MySQL binnen de container uit te voeren en een tabel te maken.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "CREATE TABLE IF NOT EXISTS mydb.mytable (column_name VARCHAR(255)); INSERT INTO mydb.mytable (column_name) VALUES ('value');"

 

Deze opdracht gebruikt het MySQL-hulpmiddel in de container om een tabel genaamd mytable met een kolom genaamd column_name te maken, en voegt tenslotte een waarde in.

Stop en verwijder de container. Zonder een volume zal de tabel die u hebt gemaakt verloren gaan wanneer u de container verwijdert.

Shell

docker remove --force my-mysql

Start een nieuwe container met het aangehechte volume. Deze keer hoeft u geen omgevingsvariabelen op te geven, omdat de configuratie in het volume is opgeslagen.

Shell

docker run --name my-mysql -v my-db-volume:/var/lib/mysql -d mysql:latest

Verifieer dat de tabel die u hebt gemaakt nog steeds bestaat. Gebruik vervolgens opnieuw de docker exec opdracht om MySQL binnen de container uit te voeren.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "SELECT * FROM mydb.mytable;"

 

Dit commando gebruikt het MySQL-hulpmiddel in de container om alle records uit de tabel table te selecteren. Je zou een uitvoer moeten zien zoals hieronder. 

SQL

 

column_name

value

5. Maak de MySQL Container Afbeelding

opschonen. Om een container te verwijderen, gebruik je het docker remove-commando met de containernamen of ID’s gescheiden door spaties. Bijvoorbeeld:

Shell

 

docker remove --force 90b8831a4b8
docker remove --force 36252896d6ff
docker remove --force d86dff3809e8

Conclusie

Ultiem, het draaien van MySQL met Docker biedt een draagbare, schaalbare en efficiënte oplossing voor databasebeheer. De geïsoleerde containers van Docker helpen bij het vereenvoudigen van de implementatie, het verminderen van compatibiliteitsproblemen en het optimaliseren van het resourcegebruik. Door het mogelijk maken van eenvoudige versiebeheer en omgevingsherstel, ondersteunt Docker snelle ontwikkeling en test. Het is ideaal voor het beheren van MySQL-databases in microservices, waardoor ze eenvoudiger te implementeren en op te schalen zijn terwijl er een sterke prestatie wordt behouden.

Source:
https://dzone.com/articles/guide-for-running-mysql-database-in-docker-container