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 lekcji omówimy różnice między hostem a kontenerem.
Omówiliśmy już różnicę między obrazem a kontenerem, czyli wiemy, że.
Obraz.
Jest to taki wzór tego, jak nasze kontenery powinny być tworzone.
Ale jest jeszcze oczywiście pojęcie hosta,
czyli naszego głównego systemu operacyjnego.
Jeżeli spojrzymy na naszą poprzednią notatkę co do tego, jak wygląda nasz
system operacyjny wraz z Jokerem, to w tej analogii tutaj
naszym systemem operacyjnym jest Windows czy macOS i to jest nasz host.
Czyli jeżeli macie np.
dwie Skoda, to możemy go sobie np.
dopisać do listy programów
i uruchamiać polecenia z terminala w Skodzie, albo po prostu też terminal.
To wy macie te polecenia na hoście.
A może polecenia również wywoływać z poziomu kontenerów.
Czyli tak naprawdę tutaj z tego poziomu,
nie z poziomu Dockera nie wchodzimy w kontekst docelowy,
tylko wchodzimy w kontekst pojedynczego kontenera, czyli np.
jesteśmy w stanie z naszego terminala tutaj wejść sobie
do kontenera MySQL i wywołać tam polecenia, które nie są dostępne domyślnie
na naszym hoście, w tym tutaj naszym scope naszego systemu operacyjnego.
No i oczywiście możemy zalogować się
równolegle do kilku kontenerów i wywołać polecenia między nimi.
Ale to co warto pamiętać to że w kontekście kontenera mamy dostępne różne
polecenia, bo jest to różny inny system operacyjny, inne serwery.
No i na naszym systemie operacyjnym też mamy inne polecenia, czyli np.
tutaj mamy polecenia związane z do CRM
docker run, który też za chwilkę uruchomimy,
ale wewnątrz kontenera już nie będziemy mieli poleceń związanych z Dockera,
bo jesteśmy w tym obrazie już wewnątrz dockera.
Nie da się zagnieździć dockera w Doktorze,
a jeżeli się da to nie wiem jaki jest tego cel, w związku z czym
myślę, że nie ma się co przejmować, ale warto o tym pamiętać, że
część poleceń wydajemy na hoście, część poleceń wydajemy w kontenerze,
gdzie host jest po prostu naszym systemem operacyjnym i np.
terminalem na naszym Windowsie albo wewnątrz Wieśka.
Czyli jeśli ja to sobie zapiszę tylko.
I wyłączymy to.
Jeśli mielibyśmy zrobić przekład, to ja zrobię z nich plik do następnych lekcji.
Oczywiście będziemy to omawiali dalej.
Jak te polecenia działają w konkretnych lekcjach poświęconych właśnie temu?
Ale jeśli na przykład sobie
sprawdzimy, czy ja mam zainstalowanego engine X'a na moim systemie operacyjnym,
czyli możemy zrobić LS, żeby wypisać listę.
Katalogów i plików w danym katalogu.
Czy jeśli wpiszemy sobie EDC
engines to zobaczymy, że na moim systemie operacyjnym tego engine nie ma?
Ale jeśli uruchomimy sobie Dockera. To zobaczymy tutaj.
To jest polecenie do uruchamiania kontenera z danego obrazu, czyli docker.
Uruchom interaktywne obraz
i tutaj to jest polecenie, które on zostanie on wywoła
i on w tym momencie spróbuje pobrać nam ten obraz, bo nie mamy go zainstalowanego
lokalnie i potem jak to się już pobierze znajdujemy się nagle w innym miejscu.
Widzimy, że tutaj jest nazwa użytkownika w Command prompt
ustawiona na roota i mamy inną nazwę hosta, gdzie w przypadku
tego jak uruchamiam to na moim systemie operacyjnym mam w ogóle inną powłokę.
Zauważcie, że tutaj jestem na flashu
i w momencie kiedy wchodzę w dockera no to wszedłem w basha engines.
Nie ma np. fisha, więc nie mógłbym tutaj wpisać sobie
wpisz fish, żeby mieć dokładnie taką samą liczbę poleceń.
I wracając do tego testu, który chcieliśmy zrobić.
Jeżeli wywołam dokładnie to samo polecenie
wewnątrz kontenera, to zobaczymy, że te pliki tutaj są.
To znaczy każdy kontener ma oddzielny system plików, oddzielne polecenia
i oddzielne rzeczy, które możemy na nich zrobić.
Czyli jeśli chcielibyśmy skonfigurować tego tak samo, to oczywiście
możemy to zrobić, ale na moim systemie operacyjnym Linuxa nie ma.
I to daje nam tą właśnie czystość implementacji.
Tak jak mówiłem nie zaśmiecanie naszego systemu operacyjnego też.
Jeżeli korzystamy z naszego systemu po prostu żeby przeglądać internet, to
jest mniejsze ryzyko, że jeżeli złapiemy jakieś
malware, to że te pliki zostaną wykryte, bo po prostu nie ma ich w systemie
operacyjnym wewnątrz Dockera, więc ktoś musiałby się najpierw dostać do Dockera,
aby zobaczyć jakie mamy pliki w naszych kontenerach.
Więc to co warto zapamiętać.
Host Jest to po prostu nasz system operacyjny i cokolwiek wywołujemy na
naszym systemie operacyjnym, czyli nie z kontenera.
I najłatwiej to poznać, że po prostu są
tutaj takie hasła, że będzie miało inny dostęp do poleceń, np.
do poleceń docelowych.
Jeżeli tutaj wpiszemy docker no to
zobaczymy, że command not found pomimo tego, że jesteśmy w że jesteśmy w
kontenerze docelowym, ale po prostu to polecenie nie jest tutaj dostępne.
O tym po prostu warto pamiętać, bo łatwo się po prostu jest zgubić.
Które polecenia trzeba czasami wywołać na hoście, a które wewnątrz kontenera?
W następnej lekcji opowiem troszkę o samej architekturze Dockera.
Jak on wewnętrznie rozwiązuje różne problemy?
Na podstawie grafu.