fbpx

Baza Danych w Dockerze

Jak uruchomić popularne silniki bazy danych za pomocą Dockera? Ktoś powie, że to nic trudnego – z tym się absolutnie zgadzam. Wystarczy wejść na Docker Hub i w wyszukiwarce wpisać nazwę interesującej nas bazy danych.

W większości przypadków dostajemy tam gotowe polecenie docker container run.

Wklejamy i DZIAŁA 🙂

A gdyby tak iść o krok dalej i chcieć na szybko uruchomić bazę danych wraz z jakimś UI? (narzędziami graficznymi do zarządzania bazą)

Przykład: MySQL i phpMyAdmin.


Jak do tego podejść?

Pierwsza sprawa.

Do czego potrzebujesz tej bazy danych?

Chcesz ją wykorzystać tylko do celów developerskich, a może powiedziano Ci, że jak wrzucisz bazę w Dockera, to cała Twoja aplikacja będzie szybsza? (tak jak z samochodami koloru czerwonego)

Prowadząc webinary, szkolenia i ogólnie rzecz biorąc „udzielając się w społecznośći” – jest to najcześciej pojawiające się pytanie:

Czy baza danych w Dockerze to dobry pomysł ?

Zajrzyj koniecznie do tego posta, gdzie mam nadzieję – znajdziesz odpowiedź. Odsyłam do niego wszystkich zadających podobne pytania.

A potem wróć tutaj i zacznij czytać dalej! ; )

Druga sprawa

Wszystkie omawiane w tym poście przykłady zostały przygotowane z myślą o zastosowaniach DEVELOPERSKICH.

W wielkim skrócie chcę ułatwić Ci życie i pokazać jak odpalić poszczególne silniki bazodanowe na potrzeby developmentu.

Nawet jeśli Twoja aplikacja nie jest skonteneryzowana – zamiast instalować bazę danych, możesz ją szybko uruchomić z poziomu Dockera (i nie zaśmiecać swojego komputera).

Potrzebujemy obrazu dla konkretnego silnika bazy danych. Jak wspominałem, wchodzimy więc na Docker Huba i szukamy tego, co nas interesuje.


Krok pierwszy: stworzenie nowej sieci

Zanim jeszcze wkleisz kod odpowiadający za uruchomienia kontenera z MySQL – zatrzymaj się na chwilę. Jeżeli Twoim celem jest uruchomienie również phpMyAdmin – zacznij od stworzenia nowej sieci.

docker network create -d bridge mysql-net

Dlaczego?

Więcej na temat sieci i komunikacji pomiędzy kontenerami możesz znaleźć w darmowej lekcji DEMO pochodzącej z kursu Docker Maestro.


Krok drugi: uruchomienie kontenera MySQL

Mając utworzoną sieć, przystępujemy do uruchomienia kontenera MySQL.

Uwaga: Jeśli korzystasz z Windowsa to usuń wszystkie „\” i wklej całość w jednej linii.

docker container run --name mysql --restart=always \
	-e MYSQL_ROOT_PASSWORD=password123 -p 3307:3306 \
    -v mysql-db-vol:/var/lib/mysql \
    --network mysql-net \
    mysql:5.7

Szybki komentarz do przekazanych w docker container run argumentów:

  • --name mysql określa nazwę kontenera
  • restart=always zapewni automatyczne uruchomienie kontenera przy każdym restarcie komputera
  • -e MY_SQL_ROOT_PASSWORD ustawia hasło dla roota
  • -p 3307:3306 baza danych będzie dostępna lokalnie na porcie 3307
  • -v mysql-db-vol:/var/lib/mysql tworzy nowy volumen mysql-db-vol i podmontowywuje go do katalogu /var/lib/mysql w kontenerze
  • --network mysql-net podłącza kontener do wcześniej utworzonej sieci

Od tej pory baza działa i możemy wykorzystać ją do naszych celów developerskich – wskazując w konfiguracji połączenia (connection string) aplikacji localhost:3307.


Krok trzeci: Uruchomienie phpMyAdmin

Czas na uruchomienie kontenera phpMyAdmin.

docker container run --name phpmyadmin --restart=always \
	-p 8081:80 --network mysql-net \
    phpmyadmin/phpmyadmin:latest
   

Podobnie jak w przypadku kontenera MySQL, dodajemy parametr –restart=always oraz podłączamy kontener do sieci mysql-net.

Dzięki parametrowi-p 8081:80 phpMyAdmin będzie działać na https://localhost:8081

UWAGA: Pomimo tego, że baza danych działa lokalnie na porcie 3307, to phpMyAdmin będzie się komunikował z MySQL na porcie 3306. Wszystko dzięki temu, że obydwa kontenery są podłączone do tej samej sieci – mysql-net.


MySQL & phpMyAdmin w docker-compose

Aby uruchomić bazę danych z pomocą docker-compose, przykładowy plik docker-compose.yml może wyglądać następująco:

Jeszcze raz podkreślam, że to wersja DEVELOPERSKA ; )

Montujemy volumen o nazwie db-vol tak, by mieć persystencję danych – inaczej mówiąc nie stracić danych, nawet po zabiciu kontenera czy ponownym uruchomieniu komputera.

MySQL docker

Teraz wystarczy wykonać polecenie docker-compose up -d. Baza danych powinna uruchomić się (w tle) i być dostępna na porcie 3307.

Czas na dodanie phpMyAdmin.

W wersji podstawowej chcemy, by phpMyAdmin mógł rozmawiać TYLKO z lokalnym MySQL i był dostępny lokalnie na porcie 8081 – http://localhost:8081

Warto wspomnieć o jeszcze jednej rzeczy:


Używanie tagu „latest” w rozwiązaniach produkcyjnych to spore ryzyko.

W pełni się z tym zgadzam. Ba, tłumaczę, dlaczego tak jest i jakie to niesie ryzyko TUTAJ.

Chcę jednak przypomnieć, że prezentowany przykład ma służyć do rozwiązań testowych / developerskich. Jak wyjdzie nowa wersja phpMyAdmin, to zwyczajnie z niej skorzystasz. Może będzie miała ciekawsze funkcje.

W związku z tym phpmyadmin/phpmyadmin:latest w tym KONKRETNYM przypadku jest OK.

Jednocześnie zachęcam, by obraz MySQL był w KONKRETNEJ wersji, nawet na potrzeby developmentu. (na prezentowanym przykładzie jest to wersja 5.7)

phpmyadmin docker

A tutaj całość (w wersji kopiowalnej)

Odpalamy całość za pomocą docker-compose up -d i przechodzimy na http://localhost:8081. Przypominam, że hasło do roota jest takie, jak podaliśmy w pliku docker-compose.yml – password123

PhpMyAdmin docker mysql

PhpMyAdmin podłączył się domyślnie do lokalnego serwera bazy danych (działającego w kontenerze).


Połączenie z phpMyAdmin do zewnętrznej bazy danych

Chcąc mieć możliwość podłączania się również do innych serwerów – należy dodać zmienną środowiskową PMA_ARBITRARY=1, tak jak zostało to opisane TUTAJ.

Po zmodyfikowaniu całości i ponownym uruchomieniu ukazuje się nam pole Server. Dzięki temu mamy możliwość podłączania się zarówno do lokalnego jak i do zewnętrznych serwerów MySQL.

Aby podłączyć się do lokalnego serwera, należy wpisać db. Wynika to z pliku docker-compose.yml, w którym tak właśnie nazwaliśmy serwis bazodanowy.

Podsumowanie

Dzisiejszy post to kolejny przykład tego, jak Docker ułatwia życie w codziennej pracy. Za pomocą kilku prostych kroków jesteśmy w stanie uruchomić bazę danych i zarządzać nią z poziomu przeglądarki.

W razie czego usuwamy tylko kontenery (i volumeny) i komputer zostaje CZYSTY.

PS. Chcesz więcej takich TUTORIALOWYCH przykładów? Napisz w komentarzu 🙂


.

Damian Naprawa

Software Architect, Docker Certified Associate, praktykujący entuzjasta konteneryzacji. Lubi dzielić się wiedzą na swoim blogu https://szkoladockera.pl oraz w podkaście "Więcej Niż Konteneryzacja". Uczestnik globalnego programu partnerskiego Docker Enablement. Od kilku lat używa kontenerów na produkcji oraz mówi w języku #docker & #kubernetes. Fan automatyzacji oraz podejścia "As a Code"

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *