tyche 001: Początki z Dockerem i Django



#tyche #docker #django

Programista stażysta

Na początku pisania tego blogu wraz z udziałem w konkursie Daj się poznać miałem na celu napisanie aplikacji automatyzującej pracę Project Managera. Aplikacji nie rozwijałem. Ograniczyłem się do napisania dwóch skryptów, które rozwiązały moje największe problemy pracy codziennej. Nie jestem z tego powodu dumny, ale podsumowanie całości było takie, że nie wróciłem do kodowania.

Robię podejście numer dwa. W trzyosobowym zespole rozpoczęliśmy prace nad aplikacją, którą roboczo nazwaliśmy tyche. Nazwa pochodzi od greckiej bogini przypadku i ślepego losu. Na bieżącym etapie nie będę opisywał przeznaczenia wytwarzanej aplikacji, ponieważ na to jeszcze przyjdzie czas. W każdym razie, celem jest przypomnienie sobie umiejętności pisania kodu.

Pierwsze kroki

Rozpoczeliśmy od stworzenia zespołowego kanału Slacka, repozytorium kodu na GitHubie wraz z podpiętym narzędziem ZenHub. Poza samym stworzeniem aplikacji każdy z nas chce poznać nowe narzędzia i technologie z którymi wcześniej nie mieliśmy do czynienia. Jako bazę użyjemy Pythona 3 (polecam artykuł Python2orPython3) i frameworku Django. Żaden z nas nie ma doświadczenia w kodowaniu w Django, więc zapowiada się dość zabawna przygoda. W celu usprawnienia stawiania pierwszych kroków w pierwszym commicie do repozytorium znalazł się Dockerfile.

Docker - podstawowe polecenia

W ramach tego artykułu nie będę opisywał procesu stawiania środowiska przy wykorzystaniu gotowego obrazu Dockerowego pobranego z Docker Huba, ponieważ takich opisów są już tysiące. Skorzystałem z oficjalnego tutoriala Quickstart: Comopse and Django. Jako mały cheat sheet dla siebie z przyszłości wylistuję elementy, które w procesie stawiania środowiska okazały się przydatne.

Pracując na Ubuntu 16.04 LTS, wykonanie tutoriala znajdującego się na oficjalnej stronie Dockera przechodzi całkiem bezproblemowo. Podczas jego realizacji przydatnych było kilka poleceń:

Przy wykorzystywaniu powyższych poleceń pojawiło się kilka ciekawostek.

docker vs docker-compose

Czym jest docker, a czym docker-compose? docker jest interfejsem CLI służącym do zarządzania poszczególnymi kontenerami. docker-compose jest pewnym API/fasadą stojącą warstwę przed interfejsem Dockera. docker-compose pozwala wykonywać operacje na wielu kontenerach i dzięki temu skraca listę komend potrzebnych do osiągnięcia określonego celu, po to wykorzystuje plik docker-compose.yml.

docker exec -it

Interesujący jest parametr -it występujący obok docker exec. Tutaj szczerze mówiąc nie wiem czy jestem w stanie to dobrze wyjaśnić, ponieważ źródła które czytałem nie były dla mnie w pełni zrozumiałe, a wyjaśnienie znajdujące się w oficjalnej dokumentacji również jest niejasne. Całość ma związek z stdin, stdout oraz tty. Parametr -t dotyczy tty, które jest pojęciem mającym swoje korzenie w historii używania terminali w starych komputerach i jest rozwinięciem skrótu jest TeleTYpewriter. W dzisiejszych czasach oznacza wirtualną tekstową konsolę do których (jest ich 6) w Ubuntu możemy wejść przez użycie jednego ze skrótów:

Parametr -i oznacza dodanie strumieniu wejściowego. W połączeniu -it mówi Dockerowi, że w ramach polecenia exec chcemy dodać silnik terminalu wraz z możliwością przekazania czegoś do wejścia, po czym wynik wykonania operacji otrzymujemy w strumieniu wyjściowym, w warstwie, w której wykonujemy polecenie docker exec -it <command>.

Volumes

W pliku konfiguracyjnym definiujemy volumes. Wykorzystywane są one w celu skopiowania naszego kodu źródłowego z lokalnego hosta (do którego mamy podpięte repozytorium) w głąb kontenera. Innymi słowy, przekazujemy aktualny kod źródłowy nad którym pracujemy do kontenera, aby mógł on zostać uruchomiony wewnątrz kontenera. Nie musimy go kopiować ręcznie.

Podsumowanie

Wykorzystywanie Dockera jest przydatne nie tylko w środowisku produkcyjnym do łatwego skalowania aplikacji, ale też jest wygodnym rozwiązaniem umożliwiającym prace w środowisku developerskim. Po przygotowaniu kilku plików możemy umieścić je w repozytorium, aby ułatwić życie naszym kolegom, których zadanie ograniczy się do pobrania kodu z repozytorium i uruchomienia kontenerów przez docker-compose.


Źródła i pojęcia

comments powered by Disqus