w Praktyce
4 godz. 33 min · Docker · Full-stack i Programowanie
Wojciech PołowniakSr. Fullstack EngineerW początkowych sekcjach kursu, zrozumiesz czym jest Docker i jakie ma zalety wobec rozwiązań oferujących pracę z serwerami lokalnymi, np. XAMPP - poznasz jego architekturę, założenia oraz najważniejsze pojęcia, których nieznajomość często spędza sen z powiek nawet doświadczonym programistom.
Jako że Docker jest to narzędzie dla programistów i administratorów systemów operacyjnych, lwia część pracy z tym narzędziem odbywa się w konsoli. Przedstawię Ci najważniejsze polecenia powiązane z tą technologią oraz zestaw dobrych praktyk i protipów które zawstydzą niejednego inżyniera oprogramowania.
W tej sekcji tego kursu przejdziemy przez najważniejsze punkty tworzenia skonteneryzowanych aplikacji z perspektywy programisty aplikacji internetowych - jeśli chcesz szybko rozpocząć swoją przygodę z Dockerem, ponieważ znasz już podstawy teorii i czujesz się wystarczająco pewnie - możesz zacząć z tego miejsca! A jeśli tempo będzie zbyt szybkie - zawsze możesz wrócić do części teoretycznej pracy z Dockerem
Przebudowywanie zasobów na żywo, dynamiczne odczytywanie zawartości plików... To podstawowe koncepty które współcześni programiści sieci web biorą za pewnik. Przy nieznajomości Dockera, łatwo jest strzelić sobie w stopę i utrudnić swoją pracę, zabierając sobie możliwość korzystania z powyższych funkcjonalności. W tym kursie, pokażę Ci jak wygodnie pracować z Dockerem w środowisku developerskim.
Jedną z wielu zalet Dockera jest niewątpliwie proste przenoszenie zmian konfiguracji i infrastruktury ze środowiska developerskiego na produkcyjne. W tym kursie, poza przyswojeniem podstawowej wiedzy na temat Dockera poznasz szereg dobrych praktyk w kontekście bezpieczeństwa oraz przygotowywania Twoich aplikacji pod środowisko, na którym będzie uruchomiona Twoja aplikacja gdy uznasz że jest gotowa by ujrzeć światło dzienne.
Ten kurs to zestaw kompleksowej wiedzy dzięki której dowiesz się jak od zera, na żywo, stworzyć aplikację na Twoim lokalnym środowisku - i jakie kroki należy podjąć, aby móc zobaczyć ją w internecie - wszystko w kontekście Dockera, wysokiej skalowalności i bezpieczeństwa. W jednej z ostatnich lekcji kursu zobaczysz jak robię deploy na serwery DigitalOcean by uzyskać link do swojej nowo zbudowanej aplikacji internetowej.
Ten kurs jest kierowany do webdeveloperów, bądź zaawansowanych programistów którzy nie pracowali jeszcze z Dockerem. Przydatne może być zrozumienie interfejsu linii poleceń czyli tzw. konsoli, oraz podstawowa wiedza na temat web developmentu czy systemów operacyjnych. Jeśli potrafisz korzystać z systemu kontroli wersji git, na pewno ułatwi to Tobie zrozumienie konceptu pracy z poleceniami dockera. Niemniej, każde zagadnienie staram się tłumaczyć na bieżąco.
Cześć!
W tej sekcji tego kursu omówię różne dobre praktyki związane ze środowiskiem
produkcyjnym i pod koniec tego działu też zdefiniujemy naszą aplikację faktycznie do
internetu, tak aby nasz obraz Dockera, z którego korzystaliśmy do tej pory tylko i
wyłącznie na naszych maszynach lokalnych, pojawił się w internecie, w związku z czym
jako wstęp do tego działu chciałbym opowiedzieć troszkę więcej o dobrze
wychowanych kontenerach w Jamesie czy ogólnie w pokerze.
Bo to co jest najważniejsze to oczywiście już wspominałem o tym troszkę na przełomie
poprzednich lekcji, ale są różne funkcjonalności Dockera, które
może nie są tak oczywiste dla większości web developerów, takie jak na przykład
standardowe wyjście dla logów czy standardowe wyjście błędów.
I tak jak sobie np. zrobimy docker logs.
Na tej naszej aplikacji z dynamicznym przygotowywaniem zasobów.
Ona oczywiście faktycznie działa z follow me.
Czyli jeżeli np. zrobimy zmianę z jakiegoś powodu,
oczywiście na środowiskach produkcyjnych takiej sytuacji by nie było,
to ona się przepisze i w logach będziemy mieli informację o tym.
Trzeba też pamiętać o tym, aby nasze kontenery reagowały na sygnały wejścia,
czyli w momencie kiedy ja robię docker stop czy docker down czy docker kill.
Sposobów na wyłączenie dockera jest naprawdę dużo.
Te aplikacje też powinny wyłączać się
z gracją, tzn ewentualnie sprzątać coś po sobie, wyłączać komunikację z bazą danych
i przede wszystkim nie czekać tych 10 sekund.
Bo o ile to jest po prostu irytujące na
naszym środowisku lokalnym, o tyle na produkcji jeżeli jest jakiś
problem z danym kontenerem i trzeba zastąpić go jakimś nowym,
to tak naprawdę każda sekunda może się liczyć w tym jaki user experience jest
serwowany naszym użytkownikom, naszym klientom stron www.
W związku z czym po prostu ten czas tranzycji z jednej wersji obrazu, z jednej
wersji kodu źródłowego do drugiej powinien być jak najkrótszy.
Aby to osiągnąć, z reguły wystarczy podążać jedną dobrą praktyką.
Czyli jeżeli sobie zrobimy docker a, możemy docker composer exec bash
i tutaj sobie zrobimy configuration file not provided.
Ciekawe, ale musimy przejść do katalogu 13.
Przepraszam.
Tak jak widzimy musimy być w katalogu, w którym znajduje się tokarka.
W przeciwnym razie trzeba przekazać po
prostu flagę, w którym miejscu się znajduje.
Więc jesteśmy teraz w naszym kontenerze i
to co możemy zrobić to wpisać sobie PS a fix.
To jest oczywiście unikatowa komenda,
która sprawdza nam uruchomione procesy i krytyczne w Doktorze.
Jest tutaj ten proces id 1.
Jak to sobie troszkę odpalę zobaczymy.
Proces ID 1 to jest ten proces, który
wypycha nam informację do standardowego wyjścia błędu czy po prostu do auta.
I tak samo ten proces jest procesem, który
pozwala nam poprawnie obsługiwać sygnały wejścia.
Każdy kolejny proces, który zostanie
uruchomiony czy to przez chip process, czy po prostu przez jakieś
inne aplikacje, które zostaną uruchomione one już nie mają takiej mocy, aby po
prostu zabić kontener Dockera i zareagować na te sygnały.
Więc to co zawsze warto patrzeć w Waszych
kontenerach, które już są budowane z myślą o produkcji, to aby
ten proces IT był nieważne jaki jest, nieważne jaki program go obsługuje,
żeby obsługiwał sygnały wyjścia, żeby dawał poprawne inside out
oraz żeby w sytuacji gdy nasza aplikacja się faktycznie np.
crashuje, żeby poprawny dawał kod błędu wyjściowego, bo wtedy agregatory treści
czy orkiestra tory bardziej będą w stanie wykryć ten błąd i stworzyć
nową instancję danego kontenera naszej aplikacji na jego miejsce.
Gdzie w przypadku jeżeli nasza aplikacja
nie wyłączy się w momencie gdy jest błąd, czyli np.
na nie obsłużony wyjątek,
nasza aplikacja się nie wyłącza, tylko dalej chodzi,
to jest to zła praktyka produkcyjnie, ponieważ powinna nasza aplikacja się
prawdopodobnie wywrócić jeżeli jest jakiś nie obsłużony wyjątek tak aby
można było ją podmienić jakąś inną instancją tego samego kontenera.
Chociaż to oczywiście zależy i powinniśmy
wszystkie nasze wyjątki poprawnie obsługiwać.
Więc w kolejnych lekcjach tego kursu
powiem o tym jak obsługiwać sygnały wejścia.
Powiem o tym, jak
alternatywnie dostarczać informacji na standardowe wyjście błędu
bądź informacji oraz zbudujemy nasz przykładowy obraz
produkcyjny, który później deploy do internetu.
To wszystko w tej lekcji. Dzięki za uwagę.