Bardzo opornie albo powiedziałbym, że topornie idzie mi przygotowanie tego artykułu. Na początku nie wiedziałem jak zabrać się do tego tematu przez to, że nie wychodziły mi żadne testy, a skończywszy na tym, że materiału mam aż za dużo. Powiem szczerze że śniły mi się już wieloryby dockera i miałem ochotę rzucić to w diabły i zająć się czymś innym. Nie chciałem także pisać tutorialu jaki można znaleźć prawie na każdej stronie i zająć się ogólnie bazami danych na Dockerze.

Dlaczego Docker?

Bo mogę, ale tak poważniej to odpowiedź brzmi, że to co daje nam Docker daje wielkie ułatwienia dla nas administratorów, programistów, a co za tym idzie końcowych administratorów. W tej chwili kontenery znajdziemy wszędzie, czy to będzie AWS, Microsoft Azure czy też IBM Cloud, wszystko oparte jest na kontenerach. Nie wiem czy jest to chwilowa moda, czy długofalowy trend, ale warto się zainteresować tematem. Pierwszy raz o kontenerach dockera dowiedziałem się gdzieś przypadkiem na jakiejś konferencji, ale jakoś nie przykuło to mojej uwagi. Owszem usłyszałem przeleciało przez głowę i szczerze mówiąc zapomniałem. Po raz drugi do spotkania doszło przy corocznych zakupach książek. Była promocja na książkę Docker. Praktyczne zastosowania. Kupiłem, ale tak szczerze mówiąc nie sądziłem, że kiedykolwiek sięgnę po ten tytuł. Jak to mawiają do trzech razy sztuka. Ostatecznie jak przeczytałem na jednym z blogów że można zainstalować bazę danych na dokerze wtedy powiedziałem sobie, że muszę się przyjrzeć tematowi. Właśnie, trzeba to przećwiczyć.

Co to jest Docker?

Co to jest ten Docker? Przeczytałem sporo artykułów na ten temat, ale nie znalazłem tak prostej definicji, którą chciałbym tutaj przedstawić Docker to jest po prostu taka platforma, która pozwoli hostować odseparowane aplikacje, bazy danych na jednym hoście. Uporządkowanie jest poprzez tworzenie dla danej aplikacji w poszczególnych kontenerach, które łatwiej jest administrować. Pojedynczy kontener jest swojego rodzaju odrębnym systemem. Jest to jak dla mnie bardzo ciekawe rozwiązanie ponieważ nie ma tutaj samej warstwy systemu. W przypadku Dockera nie mamy takiego problemu jak instalacja i utrzymanie systemów operacyjnych dla każdej sytuacji.

Instalacja Dockera

Tutaj nic odkrywczego nie napiszę, ale po moich testach sam Docker dobrze działa na systemie Linux i tam bym sugerował próbować cokolwiek robić. Owszem można zainstalować na systemie Windows, ale do tego potrzebny jest Hypervisor, który nie wszędzie jest poprawnie obsługiwany i nie koniecznie będzie działać jako kontener Linuxowy.  Z kontenerami Windowsa dałem sobie spokój, a że będę bawił się tutaj bazami danych więc chyba nie będę płakał. Wszelkie koleje testy będę przeprowadzał na kontenerach Linuxowych na Hyper-V. W przypadku Dockera działającego w systemie Windows jest to maszyna wirtualna z systemem Linux.

Bazy Danych na Dockerze

W testach postanowiłem, że nie będę się ograniczał do jednego producenta. Wykorzystam do tego trzy dość popularne silniki baz danych Microsoft SQL Server, Oracle i IBM DB2.

Możemy więc zaczynać.

Przed przystąpieniem do zabawy musimy upewnić się, że mamy poprawnie zainstalowany Docker i przełączony na kontenery linuxowe (jest to bardzo ważne dla wszystkich baz danych).

Uruchamiamy więc Dockera.

Dla samego SQL Servera tak naprawdę należy podać jedno polecenie.

Owszem mówią i piszą wszędzie, że należy najpierw zrobić pull i pobrać obraz, ale tak naprawdę jeśli nie będzie pobranego na komputer lub serwer obrazu to właśnie to polecenie najpierw pobierze, a następnie uruchomi kontener.

W przypadku SQL Servera bardzo ważnymi elementami jest parametr

hasło nie może być trywialne, musi mieć przynajmniej 6 znaków duże, małe litery i znaki specjalne. Ja chciałem sobie iść na łatwiznę i przez dwie godziny nie wiedziałem dlaczego nie chce mi się uruchomić serwer, a to o czym napisałem wcześniej było tym właśnie problemem. Dla ułatwienia warto znać polecenie, które pomogło rozwiązać problem, a które każdy powinien znać.

Drugim ważnym parametrem jest przełącznik -p należy zapamiętać, że pierwsza liczba to port, który jest widoczny z zewnątrz kontenera i nie może być już wcześniej przydzielony do innej usługi.

Po zainstalowaniu należy pamiętać żeby hasełko jeszcze zmienić ale to już po zalogowaniu się do samej instancji.

Utworzyłem sobie kilka instancji podziałałem, potestowałem nic szczególnego, zwykły SQL postawiony na linuxie.

Czas zabrać się za coś bardziej ambitniejszego. Postanowiłem zabrać się za  bazę Oracle (pomijam tutaj samego MySQL ponieważ uznałem to za trywialne). Tutaj nie poszło już tak fajnie jak wcześniej. Polecenie podobne, pobierany jest obraz, a następnie tworzona jest instancja.

W odróżnieniu od poprzedniej instalacji nie ma wpisanego hasła, hasło sys można odczytać z dokumentacji instalacji i  jest Oradoc_db1 :). Niestety tutaj pierwsza próba uruchomienia instalacji na moim komputerze nie udała się, ale to z powodu braku zasobów. Musiałem dodać kilka GB do Dockera i ponowić próbę, tym razem udaną. Praca jednak z samą bazą danych była dość ciężka, bo jak wiemy baza danych Oracle jest zasobo-żerna i niestety samo uruchamianie trwa dość długo i  trwało to u mnie 4 min!

No i na sam koniec dochodzę już do ostatniej bazy DB2 z którą osobiście miałem najwięcej problemów. Może nie przez fakt trudnej instalacji ale to że w porównaniu do poprzedników trzeba było zmienić trochę parametrów, które nie były dość oczywiste dla mnie ale to z powodu braku wiedzy na temat silnika. Ostatecznie po 4 dniach walki i DB2 nie sprawia mi już wielu problemów. Ostatecznie polecenie do utworzenia bazy wygląda następująco

Analizując to co udało mi się zrobić nie było tak trywialne. Ważne jednak, że jest to do wykonania. Teraz Docker na mojej stacji wgląda mniej więcej tak:

Do czego więc można tego użyć?

Właściwie nie ma tutaj jednoznacznej odpowiedzi ponieważ tak naprawdę nie ma tutaj żadnych ograniczeń. Kontenery są wszędzie i są na tyle przenaszalne że rozwiązań jest naprawdę wiele. Tak zastanawiając się to ogólnie Dockera na dzień dzisiejszy można użyć do szybkiego budowania systemów, do budowania środowisk do szybkiego przetestowania naszego pomysłu.

Zalety:

  • Jest szybki instancje działają tak jak byśmy uruchomili to w standardowy sposób
  • Przenaszalny, tworzymy image naszego całego systemu, robimy synchronizację z naszym systemem wersji i możemy utworzyć kopię na drugim dockerze.
  • Łatwy w obsłudze, mamy tak naprawdę niewiele poleceń i jeśli chcemy skupić się na programowaniu z użyciem już istniejących baz danych na kontenerach to wystarczy nam podstawowa wiedze na temat Dockera
  • Lekki, no tak nie mamy do każdego kontenera oddzielnego systemu więc możemy postawić na swoim środowisku więcej instancji

Wady:

  • Bak możliwości aktualizacji oprogramowania, a w każdym razie ja nie wiem jeszcze jak miałbym to zrobić
  • Koszt licencji, jeśli korzystamy z licencji Developerskiej w SQL Server lub DB2 to nie mamy takiego problemu, jednakże kiedy mamy Oracle lub chcemy przekazać naszą pracę do testów musimy zaopatrzyć się w licencje, a te nie są już takie tanie. Licencjonowanie wszystkich trzech produktów jest tak jakbyśmy instalowali to na maszynie fizycznej.