Docker

Narzędzia wykorzystywane w Droptica cz. II

W pierwszej części wpisu opisaliśmy narzędzia do wspomagania zarządzania projektami, komunikacji oraz środowisko programistyczne. W tym poście znajdzie się opis naszego sposobu na pracę z lokalną wersją serwisu internetowego.

Lokalna kopia serwisu internetowego

W Droptica każdy z programistów ma u siebie na komputerze kopię serwisu internetowego. Zadania programistyczne wykonuje lokalnie, a po wykonaniu zadania dodaje zmienione pliki do repozytorium GIT. Na komputerach w firmie używamy systemu Ubuntu. W większości serwisów internetowych do pracy lokalnej wystarczy serwer www Apache, baza danych MySQL i PHP. Jeśli serwis internetowy nie jest skomplikowany, to można Apache i MySQL zainstalować bezpośrednio na komputerze programisty. Jednak z czasem zaczęliśmy robić bardziej złożone serwisy internetowe, które potrzebowały dodatkowego oprogramowania do poprawnego działania (np. Apache Solr, Elasticsearch, Memcache, ffmpeg converted). Pojawiła się też wersja PHP 7, a wraz z nią konieczność uruchamiania niektórych serwisów na PHP 7, a niektórych na PHP 5. To wszystko sprawiło, że lokalna praca nad wieloma serwisami internetowymi stała się utrudniona ze względu na konieczność instalowania dodatkowego oprogramowania.

Docker

Trudności te pomógł nam rozwiązać Docker. Docker w skrócie to aplikacja, która pozwala na uruchamianie innych aplikacji w tzw. kontenerach. Można lokalnie uruchomić np. kontener za Apache i PHP5 oraz jednocześnie Apache z PHP7.  Więcej informacji o samym Dockerze można znaleźć na oficjalnej stronie projektu https://www.docker.com/

Jednak sam Docker nie jest wygodny w użyciu, ponieważ wymaga znajomości wielu komend w konsoli, aby go sprawnie używać. To utrudnienie rozwiązuje częściowo Docker Compose. Jest to narzędzie do uruchamiania wielu kontenerów jednocześnie. O tym, jakie kontenery uruchomić i jakie mają mieć parametry decydujemy przez utworzenie specjalnego pliku w formacie YML. Przykłady użycia Docker Compose można zobaczyć na stronie https://docs.docker.com/compose/overview/

Sam Docker Compose nie był jednak idealnym rozwiązaniem. Tworzenie lokalnej kopii serwisu było szybsze, ale widzieliśmy możliwości dalszego przyśpieszenia tego procesu. Dlatego napisaliśmy aplikację Docker Drupal, która jest dostępna na Github https://github.com/droptica/docker-drupal
Jest to aplikacja napisana w języku Python. Po jej instalacji użytkownik ma dostęp do nowego polecenia w konsoli "docker-drupal". Dzięki tej aplikacji postawienie lokalnej wersji serwisu jest bardzo szybkie, nawet jeśli mamy serwis korzystający z kilku baz danych, dodatkowych serwerów (np. Apache Solr) czy specjalnych konfiguracji. W tej chwili, jeśli programista w Droptica chce rozpocząć prace na projekcie, na którym jeszcze nie pracował, to wykonuje następujące kroki:

  • klonuje repozytorium i pobiera zrzut bazy danych
  • uruchamia komendy: docker-drupal up && docker-drupal build

Po tych krokach developer może rozpoczynać wykonywanie zadań programistycznych. Środowisko lokalne każdego programisty będzie identyczne, takie same jak na zdalnych serwerach (dev, test, live).

Rozpoczęcie pracy z dockerem może być czasochłonne. Sami napotkaliśmy wiele trudności w trakcie wdrażania Dockera na kolejne projekty. Jednak z perspektywy czasu (już prawie rok od pierwszych prób z dockerem) widzimy wiele korzyści i zachęcamy do przetestowania Dockera na swoich projektach.

Aplikacja Docker-Drupal została napisana głównie przez Tomasza Wodzikowskiego i Damiana Sikorę. Ich wideo prezentacja od aplikacji dostępna jest w serwisie youtube https://www.youtube.com/watch?v=MUINiGuIPrg

Podsumowanie

Docker wraz z dodatkowymi aplikacjami to u nas podstawowe narzędzie pracy. Zajmując się Drupal developmentem nie korzystamy już z innych sposobów przygotowywania środowiska serwerowego. Uważam, że jest to bardzo dobre i elastyczne rozwiązanie, które oszczędza nam setki godzin w skali roku.

3. Najlepsze praktyki zespołów programistycznych