Docker Maestro → Dołącz już dziś! »»

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 🙂


Dołącz do newslettera

Już ponad 900 osób zapisało się na mój newsletter (zero spamu! - tylko informacje o nowych artykułach oraz ciekawe nowinki ze świata konteneryzacji).

Zapisując się, jako bonus prześlę Ci "21 Praktycznych Przykładów Użycia Dockera Dla Developerów" oraz zbiór "10 Najlepszych Praktyk Tworzenia Dockerfile"



Damian Naprawa

Praktykujący pasjonat konteneryzacji. Lubi dzielić się wiedzą, prowadząc warsztaty i szkolenia. Chętnie występuje również w roli prelegenta na meetupach i konferencjach. Uczestnik globalnego programu partnerskiego Docker Enablement. Pracuje z Dockerem na co dzień od kilku lat. Odpowiedzialny za tworzenie i utrzymanie systemów działających w oparciu o kontenery. 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 *