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ść!
Z tej lekcji opowiem o architekturze Dockera, czyli o tym jak Docker zarządza
wewnętrznie kontenerami i innymi mechanizmami, które ma w zanadrzu.
No i cały proces tego
co się dzieje w momencie wysyłania polecenia przez nas w naszym terminalu.
Do tego aż tworzone jest kontener.
Oczywiście nie będziemy tego omawiali w bardzo szczegółowym aspekcie,
ponieważ nie jesteśmy tutaj developerami Dockera, tylko po prostu chcemy zrozumieć
jak on działa, ale myślę, że to będzie po prostu przydatna część do omówienia.
Czyli jeśli założymy sobie.
Że z pewnego miejsca dowolnego może to być mój komputer.
To znaczy mój osobisty laptop.
Może to być serwer gdzieś w internecie.
Mamy dostęp do sieci.
Czyli do tego naszego.
Tych poleceń, które są wywoływane z poziomu terminala i z tego serwera.
A my tworzymy np.
polecenie docker run it engines.
Bash to jest to polecenie, które wywołaliśmy w poprzedniej lekcji.
I w momencie kiedy to polecenie jest
wywoływane to docker spróbuje tutaj wysłać to polecenie do innego.
Mechanizmu i tym mechanizmem czy sekcją aplikacji jest host.
Czyli w naszym przykładzie gdzie my pracujemy na lokalnej instalacji Dockera.
Nasze ALA jest zawarte w hoście, ale
możemy wywołać też polecenia na zewnętrzny hosta.
Czyli Docker może być zainstalowany gdzieś w internecie.
Nie możemy za pomocą
interfejsu linii poleceń wywoływać te polecenia dla zewnętrznych maszyn.
To Docker będzie miał dostęp do swoich
lokalnych obrazów lokalnych kontenerów, ale będzie nimi zarządzał poprzez tzw.
docker demona.
Czyli jeśli tutaj sobie zainstalujemy powiedzmy docker daemon, to jest to taki
program, który faktycznie zarządza tłumaczeniem tych poleceń na wewnętrzne
API Dockera, ponieważ Docker jest tak naprawdę API.
Te polecenia, które wywołał wywołujemy.
On tworzy po prostu odpowiednie IDE, które jest w stanie zinterpretować i
zrozumieć co my jako użytkownicy Dockera chcieliśmy osiągnąć.
Czyli on spróbuje poszukać obrazu Engines albo w swoim wewnętrznym rejestrze.
Czyli jeżeli tutaj nie mieliśmy zainstalowanego Linuxa powiedzmy, że nie
mieliśmy, to od razu poleci nam do jakiegoś zewnętrznego rejestru.
I tym rejestrem jest np. Docker hub.
Jest to bardzo analogiczna sytuacja do
tego jak pracujecie z gettem, że w momencie kiedy robicie np.
git clone to wasz lokalny system
operacyjny wasz git robi zapytanie do jakiegoś rejestru w
internecie, aby pobrać informacje o to o co prosiliście.
Czyli jeżeli chcielibyście pobrać kod źródłowy np.
Web Paka to dostaniecie zwrotkę z kodem
źródłowym poprzez polecenie git pull web repozytorium kolwiek jest tam link.
Czyli tutaj odwołujemy się do jakiegoś rejestru.
Oczywiście możemy mieć własne registry, ale w naszym przykładzie w naszym
przypadku będzie to po prostu docker, bo też po prostu będziemy z niego
korzystali w dalszych częściach tego kursu.
I jeżeli nie znalazł sobie docker
linuxa tutaj u nas lokalnie to on go poszuka na docker hubie.
Domyślnie jest to do crab.
Może to być też inne repozytorium.
Tutaj założymy, że ten indeks jest.
Więc jeżeli on wykrył tego engine CSA to registry odpowie naszemu hosta
z informacjami na temat tego obrazu i zainstaluje go lokalnie.
Czyli w tym momencie gdy uruchamiamy Docker it and next.
W poprzedniej lekcji była taka informacja, że cena time and next latest to ok.
I właśnie to się wydarzyło, czyli w momencie gdy nasz host otrzymał
informację, że powinien uruchomić obraz next on się na naszym systemie operacyjnym
nie znajdował, to wtedy docker daemon zlecił pobranie obrazu
z zewnętrznego rejestru i wtedy tam się te takie paski postępu z informacją o
plik images layers, czyli zaciąganie obrazów czy zaciąganie warstw.
Tutaj tak naprawdę ta sekcja była widoczna
w momencie kiedy te paski postępu były widoczne.
No i tutaj jeżeli sobie wpiszemy
next, bo już zostało to pobrane, wtedy docker daemon będzie mógł przejść do
następnej części interpretacji naszego zapytania.
Jak już znalazł obraz end next no to jest w stanie uruchomić ten obraz, czyli
stworzyć kontener na podstawie tego obrazu.
I to właśnie dzieje się na tym etapie.
Tutaj tworzony jest pojedynczy obraz albo kontener.
Możemy napisać.
Czyli jeśli byśmy to podpisali, to tutaj są nasze kontenery.
Tutaj mamy nasze obrazy.
Docker demon, czyli taki interpreter naszych zapytań, a to może być
nasz terminal, z którego uruchamiamy polecenia.
No i oczywiście jeżeli byśmy stworzyli jakieś inne polecenie np.
docker ram entity wtedy.
Czyli obraz, który instaluje nam Apache.
To sytuacja byłaby analogiczna.
Tutaj byłoby docker.
IT activity bash docker.
Spróbowałby znaleźć ten obraz lokalnie.
Jeśliby go nie znalazł, spróbowałby go pobrać z danego rejestru.
Jeżeli by go znaleźć, to by go pobrał do naszego systemu operacyjnego i dopiero z
niego stworzył pojedynczy kontener, na który możemy wejść i na którym możemy
zobaczyć, że mamy inne komendy i pliki do dyspozycji.
Oczywiście jeżeli by go nie znalazł.
To.
W takiej sytuacji po prostu powie nam o błędzie, że nie mógł znaleźć
tego obrazu i po prostu zakończy swoją pracę z błędem.
Jak go rozwiążemy, to już zależy od nas.
Możemy zbudować taki obraz lokalnie.
Jeżeli mamy chwilę,
czyli właśnie ten plik źródłowy, z którego obrazy są budowane, albo możemy dodać inny
rejestr, z którego chcemy pobrać dany obraz.
Więc właśnie w ten sposób wygląda cała nasza architektura Dockera.
I tak naprawdę to będzie chyba jedna z ostatnich takich ściśle teoretycznych
lekcji i przejdziemy po prostu do pracy z kontenerami, z obrazami i z tworzeniem
naszych pierwszych aplikacji internetowych, które będą uruchamiane na.