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 przejdziemy przez najczęściej używane polecenia.
Prawdopodobnie możesz już zgadnąć, o które
chodzi, bo faktycznie dużo tych poleceń wydawaliśmy na przełomie tego kursu.
No i myślę, że jednym z takich najbardziej.
Popularnych poleceń jest oczywiście docker run, który pozwala nam uruchomić dany
kontener niezależnie od tego, czy jest on zainstalowany u nas lokalnie czy nie.
Czyli docker run np.
z flagą, która wystawia wszystkie. Wyeksportowane.
Porty z naszego i meczu z naszego docker file
do naszego systemu operacyjnego pod portem, który Docker uzna za stosowne.
Możemy też oczywiście użyć tutaj flagi małej P i tutaj podać te porty bez
konieczności posiadania tej logiki klauzuli expose w pliku do krwi.
Czyli po prostu możemy.
Sobie dowolny port wstawić z kontenera do naszego hosta.
I oczywiście to też nie musi być ten sam port.
Jeżeli chcielibyśmy aby port 8080 z
kontenera został wystawiony na naszym hoście 80 81.
Nie ma problemu. Oczywiście też to zadziała.
Kolejną taką flagą do rana jest oczywiście D czyli uruchomienie kontenera w trybie D.
Czy. Flaga i T, czyli interakcji Y,
która pozwoli nam wejść do kontenera w momencie odpalenia tego polecenia.
Kolejnym jest oczywiście docker.
Build i tutaj możemy przekazać kontekst, czyli z reguły jest to kropka
jeżeli pracujemy w obrębie tego samego katalogu.
Ja z reguły tak pracuję. Po prostu wchodzę w kontener czy w
katalog, w którym znajduje się dany docker file.
Robię tak i jakoś tak mi jest po prostu wygodniej.
Jeżeli preferujecie inny styl, to
oczywiście możecie tutaj wstawić inną ścieżkę, czy też dać flagę f bodajże.
Zobaczymy czy się da.
Help!
I powinno być tutaj.
Informacja o pliku.
Tak, możemy wskazać po prostu plik
docker file, w którym się znajdujemy, czyli docker build aby.
Zbudować obraz lokalnie.
Docker aby uruchomić kontener z danego
obrazu, niekoniecznie, który znajduje się na naszym systemie operacyjnym.
Docker pull jeżeli. Chcemy tylko.
Pobrać dany obraz na nasz system operacyjny bez.
Uruchamiania kontenera.
Z tego raczej rzadko korzystam osobiście i wszystkie polecenia powiązane z samymi.
Obrazami, czyli docker image ls.
Aby zobaczyć jakie mamy tutaj obrazy np.
docker image ram aby usunąć dany obraz.
I to jest w sumie akurat.
Ciekawe i też spróbuję to Wam tutaj zaprezentować.
Ja z reguły tutaj do tej pory w kursie korzystałem z takiej funkcjonalności.
Że po prostu klikam dwa razy na nazwę
i terminal po prostu podkreśla cały cały hash i w ten sposób usuwam dany obraz
i muszę go sobie tutaj wymusić, bo jeszcze jest uruchomiony jakiś kontener w tle.
Ale nie musimy tego w ten sposób robić.
Jesteśmy w stanie wykorzystać pierwsze
dwie trzy literki haha, aby wskazać o których.
Czyli jeżeli np.
nie lubimy kopiować i wklejać, a wiemy, że chcemy pozbyć.
Się tutaj tego kontenera git rekord netto.
To zamiast kopiować.
To C0 możemy po prostu wpisać C0.
I w tym momencie ten obraz zostanie usunięty.
Oczywiście jeżeli by się tak zdarzyło.
Że ten hash.
Się powtórzył, no to wtedy.
Ten Docker nam powie, że jest błąd i z dwóch obrazów powinien usunąć.
Więc po prostu musimy dać bardziej
specyficzny image ID, bo oczywiście usuwamy tutaj obrazy a nie kontenery.
Więc jeśli np. .
Nie wiem. Ja tylko idę po trzech literkach, jeżeli.
Akurat korzystam z tej funkcjonalności.
Ale myślę, że bezpiecznie. Może być też np.
dać po prostu 4, czyli CF 25.
No i tutaj ten Docker nauczy się od instaluje jeżeli go na siłę wyłączymy.
Ten Forth też jest dosyć przydatna.
Docker stop.
Aby zatrzymać kontener jeżeli chcemy go później wystartować ponownie.
No i jest jeszcze taka jedna rzecz o docker cpp no i oczywiście jest.
Jeszcze docker commit, ale o tym. Później.
Czyli docker cp
pozwala nam skopiować informacje z kontenera do hosta albo odwrotnie.
To jest bardzo przydatne, jeżeli na
przykład mamy kontener, który buduje nam jakieś sety.
Mieli nam aplikacje, zmienia formaty.
I my chcemy na naszym hoście.
Mieć ten plik wynikowy, który zostanie wypluty przez tą aplikację, a nie.
Chcemy po.
Prostu wchodzić na kontener i kopiować tego wszystkiego,
bo czasami pliki potrafią być ogromne, czasem są to pliki binarne,
a więc po prostu też nie da się ich skopiować w taki sposób.
Więc do tego można wykorzystać.
Polecenie docker cp.
I ja to zaprezentuję w ten sposób, że po prostu uruchomię sobie.
Docker run wystawiając indeks.
Zobaczymy na jakim porcie. 5/5 08.
Super!
I ja akurat skopiuję sobie coś do kontenera.
Możemy kopiować, w drugą stronę również, ale ja skopiuję.
Tutaj do kontenera.
Czyli jak możesz zobaczyć w lekcji 8.
W katalogu numer 8 znajduje się plik index.
HTML i to co możemy zrobić to skopiować sobie.
I tutaj mi się nawet podpowiada dany plik.
Oczywiście musi być to ścieżka absolutna, dlatego tutaj mamy pwd na przodzie.
W sumie możemy podpowiedzieć.
Pwd na przodzie aby pobrać.
Naszą obecną ścieżkę na hoście i dodajemy wtedy ten plik index.
HTML. Następnie musimy podać
hash kontenera z którego bądź do którego chcemy przekazać informacje.
Czyli ja tutaj miałem jakiś stary kontener.
Prawdopodobnie testowałem to sobie lokalnie.
Więc mogę po prostu tutaj to.
Przekopiować i widzimy, że z naszego hosta kopiujemy sobie plik index.
HTML do kontenera. O takiej nazwie.
Jest tam po prostu next w taką. Lokalizację.
I ta lokalizacja to jest domyślne miejsce.
Gdzie znajduje się ta wiadomość powitalna nginx a, którą widzieliśmy.
Tutaj.
Jeżeli dalej tam ten kontener chodzi to oczywiście dają widzimy.
I w momencie kiedy ja to zapisuję
i odświeżę stronę to widzimy, że plik z naszego lokalu został przerzucony.
Tutaj do tej ścieżki absolutnej wewnątrz.
Kontenera podmieniając.
Wiadomość powitalną. Naszej strony www.
No i oczywiście to jest taka też troszkę
alternatywa, jeżeli nie chcemy koniecznie podpinać wolumenu.
Chociaż jest to według mnie o wiele mniej wygodne niż podpięcie wolumenu.
To możemy sobie tutaj.
Podmienić kod Works na 1 wykrzyknik.
Zobaczmy gdzie to w ogóle się wyświetla.
Tutaj w nagłówku mamy trzy wykrzykniki. Odświeżamy.
Dalej są trzy wykrzykniki.
Więc zapisujemy tę zmianę.
Wywołujemy ponownie tą samą.
Komendę tak naprawdę, bo
nazwa pliku się nie zmieniła, ani adres docelowy też się nie zmienił, więc
wpisujemy to i w tym momencie mamy tylko jeden wykrzyknik.
Więc to jest docker tp.
Takie polecenie, które też jest dosyć przydatne, a nie wspomniałem wcześniej.
I warto też o tym pamiętać, że jeżeli
teraz zastępujemy ten kontener, to startując ponownie.
Tutaj widzimy, że sygnały nie są poprawnie
zinterpretowane, ponieważ czekamy 10 sekund.
Więc jeżeli wystartujemy ponownie ten.
Kontener Zen Green Exa, no to oczywiście będzie to strona tytułowa.
Nie zmodyfikowana przez nas, więc możemy ją sobie tutaj nawet zamknąć.
Kill powiedzmy.
Żeby już to troszkę szybciej.
Poszło, ale jeżeli sobie wystartujemy to zobaczmy czy wystartujemy.
Ten obraz do którego wcześniej.
Kupowaliśmy plik przy pomocy docker cp.
Zobaczymy co się stanie.
On nam wystartował. Zobaczmy na.
Jakim porcie nam wystartował. Na dziesiątce.
Czyli znowu się zwiększyło.
No to widzimy. Że ten plik dalej tam jest.
Czyli te informacje.
Zostały w tym danym obrazie, ponieważ go zastosowaliśmy.
Ale każdy nowy obraz tworzony z.
Tego obrazu, tej zmiany mieć nie będzie.
Oczywiście to można jeszcze bardziej.
Zapisać, tak aby.
Utworzyć nowy obraz z tego stanu.
Kontenera, który aktualnie jest. Uruchomiony.
I do tego właśnie. Służy docker commit.
I o tym będziemy mówili w kolejnych częściach tego kursu.
W związku z czym to są.
Komendy, które są najczęściej używane w. Doktorze?
Według mnie oczywiście.
Pomijając wszystkie Docker, kompozyt, Hibernate i inne rozwiązania typu Swarm.