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 tym dziale, czyli w szybkim starcie.
Spróbujemy stworzyć wszystkie pojedyncze kroki, które są.
Potrzebne do tego, aby uruchomić naszą aplikację.
Poprzez budowanie.
Uruchamianie, montowanie wolumenów, wystawianie portów
tak aby nasza aplikacja faktycznie działała.
I była. Zlokalizowana.
Więc musimy zacząć od budowania naszego obrazu.
I tak jak wspomniałem wcześniej.
Obrazy budowane są.
Na podstawie plików źródłowych templates zwanych docker filmami.
I docker file.
Oczywiście jest to tylko zwykła nazwa pliku, ona.
Może być dowolna. Ale jeżeli np.
nazwiemy. Go docker file to np.
scout.
Jeżeli zainstalujemy sobie tutaj rozszerzenie docker z.
A ze sklepu wie Skoda, no to wtedy mamy dodatkowo podpowiadanie składni.
I najprostszy do krwi jaki może. Być.
To po prostu pobranie innego obrazu i zbudowanie go ponownie.
Czyli robimy powiedzmy kopię obrazu, który
już istnieje w internecie, ale budujemy go samodzielnie.
Oczywiście tutaj tych poleceń do krwią
jest bardzo dużo, ale takim podstawowym, który zawsze jest na samej górze docker.
File jest polecenie from.
I from Pozwala nam stwierdzić na podstawie czego chcemy nasz.
Obraz bazować.
Czyli nie musimy tworzyć całego systemu.
Operacyjnego od samego początku, czy w ogóle instalować noda czy PHP apacza
samodzielnie, tak jak musielibyśmy to zrobić, gdybyśmy nie mieli Dockera np.
chcąc zainstalować je na Windowsie musimy faktycznie pobrać.
Instalator, zainstalować to.
Tutaj tego nie trzeba robić, ponieważ są już gotowe obrazy.
Do tego. Tylko korzystamy.
Więc poleceniem from.
Możemy wybrać obraz bazowy na którym będziemy się wzorować.
No i jeżeli zrobimy sobie from nod to tak naprawdę.
Może być koniec naszego docker file.
Więc zakładając, że to jest cały nasz docker file, co możemy.
Dalej z nim zrobić?
Otóż możemy go zbudować czyli poleceniem docker image build.
Albo docker build. Po prostu możemy zbudować dowolny obraz.
I tutaj jeżeli podamy sobie
kropeczki to znaczy, że chcemy wykorzystać obecny kontekst.
Obecny katalog to.
Pochodzi generalnie z basha i innych powłok.
Jedna kropka to jest obecny katalog.
Dwie kropki to jest katalog wyżej względem naszego.
Czyli jeśli sobie wpiszemy po prostu docker build.
Kropka to zobaczymy, że ten build trwał bardzo krótko.
Musimy być oczywiście w dobrym katalogu.
Więc tutaj w lekcji drugiej znajduje się nasz docker file.
Więc.
Uruchomiłem to ponownie.
I to nie powinno trwać już tak krótko,
ponieważ ten obraz musi zostać najpierw pobrany.
Z. Zewnętrznego repozytorium.
Tak jak wspominałem w poprzednich lekcjach.
Jeżeli dany obraz nie znajduje się na naszej maszynie lokalnej, to wtedy.
Silnik. Dockera spróbuje odczytać.
Zdalny rejestr o.
To czy taki obraz istnieje w rejestrze. Jeśli tak, to.
Zostanie on pobrany na nasz system operacyjny, więc.
Pierwsza instalacja.
Pierwsze build.
Będzie trwał tak długo jak.
Nasz obraz będzie się pobierał. On się już powinien kończyć.
Z reguły nie.
Trwa aż tak długo, ale widzimy, że już 30 sekund proces trwa i.
To co istotne.
Jeżeli ponownie wywołamy to polecenie docker build.
Kropka.
To tego czasu, który tutaj czekamy, w tym momencie już nie będziemy.
Musieli ponownie wyczekiwać.
Ponieważ ten obraz zostanie już pobrany.
Na naszą maszynę.
W związku z czym kolejne polecenia.
Będą wywoływały się szybciej.
Więc jeśli chcemy wpiszemy docker image ls to zobaczymy.
Że nasz obraz już się zbudował.
Tak się zastanawiam który to.
Jest docker a?
Nie widzę go tutaj.
Ale on się na pewno już zbudował. I zobaczmy.
Jeżeli uruchomimy ponownie.
Tego Docker Bilda.
No to widzimy, że.
Ten Bild trwał zamiast 40 sekund. Półtorej sekundy.
Tak, to było 40 50 sekund i prawie minuta.
Więc kolejne uruchomienia tego samego polecenia, gdzie mamy taką samą warstwę.
O warstwach też będę mówił troszkę w późniejszych częściach tego kursu.
Generalnie każde polecenie to jest jedna
warstwa, więc from tworzy nam jedną warstwę.
To już jest skasowane.
Obraz znajduje się na naszym systemie operacyjnym.
No i po prostu te buildy przechodzą szybciej.
Jeszcze raz sobie zróbmy docker i LS.
Wydaje mi się, że to jest nasz obraz, ponieważ nie jest on podpisany.
Zastanawiam się tylko czemu to jest 8 dni
temu, a podejrzewam, że wynika to z tego, że po prostu główny.
Obraz został zbudowany 8 dni temu.
Czyli ten o tagu latest.
Ponieważ domyślnie wszystkie obrazy
bez tagów, które podajemy po dwukropkiem są oznaczane tagiem latest.
Czyli co teraz możemy.
Z tym zrobić?
Jak widzimy, że Bill uruchomił się szybciej, to możemy też wymusić.
Aby te. Warstwy.
Które są obecne w naszym docker failure.
Aby po prostu je zignorować.
Jeśli jest jakikolwiek powód, że
na przykład nasz kod źródłowy się zmienił, a wiemy, że.
Jest tam polecenie do dodawania zasobów i.
Chcemy mieć 100% pewności, że
zmiany, które wprowadziliśmy zostaną zawarte w tym dotrwają, to możemy.
Zrobić docker build kropka.
I tutaj dać flagę.
No cóż.
I w tym momencie to będzie trwało ciutkę szybciej.
Akurat ta warstwa
tak czy siak będzie ładowała się szybko, ponieważ mamy pobrany obraz.
Więc jeśli np. byśmy usunęli obraz node czyli jest to.
Obraz o tym haśle.
I ponownie to uruchomili.
To będzie trwało szybciej.
Flaga na pewno będzie.
Potrzebna w dalszych częściach tego kursu.
Ja się tylko zastanawiam dlaczego to dalej nam idzie tak szybko.
Docker image ls.
Jak sobie zrobimy do image rem.
Usuniemy i ponownie. Widzimy, że tego.
Obrazu już tutaj nie ma.
I ponownie.
Wybudujemy ten obraz.
No to faktycznie bardzo szybko musiało się
w takim razie coś skasować jeszcze gdzieś głębiej.
Spróbujmy zrobić jeszcze jedną próbę z usunięciem tego kesza.
Czyli docker build. Kropka.
No cóż, w momencie kiedy nie mamy obrazu.
I w tym momencie powinno to iść troszkę dłużej.
Natomiast wydaje mi się, że coś się
musiało w takim razie jeszcze głębiej skasować.
Nie jest to jakiś problem.
Po prostu mamy szybciej.
Dostępny ten obraz.
Ale jestem ciekawy na jakim.
Etapie to się skasowało.
W każdym razie jak zwrócimy uwagę.
Na nasze.
Obrazy Dockera, to zobaczymy, że ten
obraz, którego zbudowaliśmy nie ma żadnego.
Taga.
Więc możemy zrobić dwie różne rzeczy albo ponownie.
Wywołać komendę docker build z poleceniem tak i tutaj na przykład napisać
docker node to będzie nasz własny obraz z własnym tagiem.
I zobaczymy, że teraz przy. Docker image.
Less.
Widzimy, że w naszym repozytorium,
które oczywiście w tym momencie nie istnieje docker cloud mamy nowy obraz o ID
bez konieczności przebudowania całego obrazu.
Czyli jeżeli zbudowaliśmy obraz. Który.
Początkowo nie miał taga, no to możemy dodać ten.
Tag po prostu wywołując ponownie docker
build z flagą dasz dasz tag czy myślnik myślnik tak i
tutaj nazwa tagu, który chcemy dać na naszą na nasz przykładowy obraz.
Więc tak wygląda budowanie.
Jak widzicie cóż troszkę ułatwia nam pracę i sprawia, że nie musimy czekać tak długo
przy każdym przebudowanie tego samego obrazu.
Chociaż jeżeli będziemy dodawali kolejne
elementy tutaj do tego docker file to oczywiście.
Tak więc to będzie trwało troszkę dłużej.
O tym na pewno w następnej lekcji.
I w następnej lekcji spróbujemy sobie uruchomić.
Ten obraz, uruchomić jakiś plik na nim,
zobaczyć czy ten obraz w ogóle nam wystartuje, czy on od razu się zamknie.
Po czym. Podepniemy do niego odpowiednie.
Wolumeny i.
Wystawimy porty tak abyśmy mogli się do niego dobrać.
Stan końcowy dockerfile · 9 min
FROM node