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 MySQL, PostgreSQL, 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:
$ 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 naammy-mysql
toe aan je container voor eenvoudige verwijzing.-e MYSQL_ROOT_PASSWORD=my-secret-pw
stelt het rootwachtwoord voor MySQL in opmy-secret-pw
. Vervangmy-secret-pw
door een veilig wachtwoord naar keuze.-e MYSQL_DATABASE=mydb
maakt optioneel een database genaamdmydb
aan. Je kuntmydb
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:
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.
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.
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.
Mysql -u root -p
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 genaamdmy-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.
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.
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.
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.
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.
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.
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.
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:
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