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ówię polecenia związane z obrazami, aby poznać listę.
Poleceń, które są dostępne dla danego podzbioru poleceń Dockera.
Możemy po prostu wpisać dane polecenie,
czyli jeżeli wpiszemy docker oczywiście tutaj nam się wypisze cała lista
poleceń, które możemy wywoływać bezpośrednio po poleceniu docker.
Ale jeśli wpiszemy sobie docker container
to zobaczymy tutaj wszystkie polecenia związane z kontenerami.
I tak samo analogicznie docker image.
I widzimy wszystkie polecenia związane z obrazem.
Czyli mamy do dyspozycji następujące polecenia.
Polecenie Bild
pozwala nam stworzyć obraz na podstawie docker file, a
o docker file będziemy mówili już niedługo i używa się tego w ten sposób, że
po prostu uruchamiamy docker image build, podajecie kontekst i to wszystko.
Kontekst jest to kropka, czyli obecny katalog.
Jeżeli jesteście w miejscu, gdzie w danym katalogu znajduje się docker
file, to obraz zostanie zbudowany na jego podstawie.
Przy pomocy tego polecenia docker historii
pozwala pokazać historię obrazu, bo możemy mieć różne multi buildy, możemy mieć różne
tagi, więc takie informacje możemy wykorzystać.
Import to jesteśmy w stanie
zaimportować obraz z dowolnego miejsca w internecie z turbo Ola czyli z takiego po
prostu skompresowane pliku binarnego i to jest np.
przydatne jeżeli chcemy wykorzystać obraz,
który ktoś stworzył za pomocą polecenia docker commit.
Docker commit odnosi się do tworzenia
nowej warstwy na podstawie obrazu, który jest obecnie uruchomiony.
To jest bardzo przydatne polecenie i też będziemy o nim mówili.
Po prostu w sekcji o całej profilach.
Ale możemy na przykład pobrać tutaj listę obrazów docker image ls
To jest jedna z takich najpopularniejszych poleceń.
Widzimy, że jako że już w poprzednich
lekcjach tego kursu uruchamiałem te obrazy poprzez polecenie docker ra,
to znajdują się one na moim systemie operacyjnym i jesteśmy w stanie
podejrzeć sobie różne informacje na temat tych obrazów, czyli Docker powiedzmy.
Historię.
Image it.
I widzimy tutaj różne informacje o tym, co
się działo w danym obrazie, kiedy zostały naniesione na niego zmiany itd.
Tak samo możemy wykorzystać Docker
Inspector, Docker Inspector i kolejny parametr to podajemy.
Ten hash obrazu i widzimy różne informacje
na temat tego, jak ten obraz został zbudowany.
Jaka jest jego suma kontrolna, aby
sprawdzić, czy na pewno nikt nam się nie patrzył jakie porty są wystawione, przy
pomocy jakiej wersji ten obraz został zbudowany?
Jaki jest jego punkt wejściowy?
To są raczej dosyć już zaawansowane rzeczy
na potrzeby tworzenia zwykłych aplikacji internetowych.
Nie musimy tego wszystkiego analizować, ale jeżeli jesteśmy ciekawi jak dany obraz
został stworzony, to możemy to sobie poprzez Docker Inspector sprawdzić.
No i tutaj też mamy zapisane tagi, czyli
nazwy tych naszych obrazów, bo widzimy, że dany obraz ma swój własny image id i po
tych image id z reguły odnosimy się do dodanych obrazów nie po nazwach.
O tym warto pamiętać, ale jeżeli np.
uruchamiamy obraz za pomocą docker run, no to wtedy korzystamy z tagu latest,
który też przy pomocy buildu możemy określić.
No i to jest też istotne to w momencie kiedy np.
wpiszemy sobie wszystkie nasze obrazy, to możemy znaleźć się w sytuacji,
że za miesiąc okaże się, że tych obrazów jest 100 albo dwieście, a każdy z tych
obrazów, przynajmniej tych, które ja pobrałem, waży przynajmniej 100 MB.
Są obrazy, które ważą nawet 1GB, więc możecie się domyślać, że
Wasz system operacyjny może po prostu mieć coraz mniej miejsca.
No bo mimo wszystko Dockera mamy zainstalowanego lokalnie.
Te obrazy ważą swoje nie.
Pomimo tego, że są sytuowane wewnątrz Dockera, to swoje gigabajty ważą.
To warto jest po prostu też móc je usunąć.
Do tego możemy wykorzystać polecenie REM.
Czyli jeżeli chcielibyśmy np.
pozbyć się obrazu X to możemy zrobić to RM.
Nazwa obrazu, tylko musimy dodać do image
rem, bo jeżeli zrobimy docker spróbuje nam usnąć kontenery domyślnie.
No i zobaczymy, że
nie jesteśmy w stanie tego zrobić, ponieważ jest jakiś zastosowany kontener,
który z niego korzysta, więc moglibyśmy sprawdzić jaki kontener z
tego korzysta przy pomocy poleceń związanych z kontenerami, ale też możemy.
Po prostu go sforsować czy siłowo wyłączyć, usunąć.
I to też jest napisane tutaj w historii i instrukcji jak korzystać z Dockera.
Jest to po prostu flaga nasz Forth i wtedy niezależnie od tego czy jest
tworzony kontener, który jest już nawet zastosowane wyłączone.
Będziemy w stanie usunąć ten obraz i wtedy kontener też się nam usunie.
I jak widzimy on został
usunięty i możemy wpisać docker ls i widzimy, że naszego Linuksa nie ma.
Natomiast jest to też problematyczne,
jeżeli chcielibyśmy usuwać je wszystkie naraz.
A więc możemy zrobić docker run, aby usunąć wszystkie obrazy.
I tutaj możemy przekazać opcje czy chcemy usuwać obrazy, które są
używane przez zastosowane kontenery, czy nie jesteśmy w stanie po prostu
ściągnąć dany obraz z internetu bez jego uruchamiania.
Czyli jeśli chciałbym np.
pobrać sobie obraz Ubuntu docker pull Ubuntu.
Domyślne Tak, jest to latest to to zostanie pobrane i widzimy, że tutaj.
Są pobierane pojedyncze warstwy.
Każde z tych
zestawów megabajtów jest to osobna warstwa, o których też będziemy mówili
więcej przy okazji omawiania multi z tagami.
I teraz gdy wpiszemy docker ls to
zobaczymy, że Ubuntu też się tutaj u nas znajduje.
I analogicznie, jeśli chcielibyśmy
umieścić nasz obraz na zewnętrznym repozytorium, możemy je.
Możemy go tak samo wypchnąć przy pomocy
polecenia docker push, czyli jest to tutaj bardzo podobne do pracy z gettem.
I o ile praca z samymi obrazami trochę
mija się z celem, bo musimy stworzyć kontener, aby uruchomić naszą aplikację,
jest to bardzo potrzebne, aby wiedzieć, że obrazami zarządza się osobno.
I jak to robić?
Więc aby powtórzyć to szybciutko, Docker image da Wam całą ściągę ze
wszystkimi poleceniami, których możecie wywoływać.
W kontekście obrazów najczęściej używane są to build, ls, rm.
Pula raczej rzadko się używa, chyba że faktycznie chcemy tylko mieć pobrany obraz
jako źródłowy push, aby umieścić go na zdalnych repozytoriach czy historii.
Aby podejrzeć więcej informacji.
Import aby zaimportować
obraz stworzony przy pomocy polecenia docker commit czy tak aby otagować dany
obraz w momencie kiedy on już został zbudowany, a chcemy tylko dodać mu
taką nalepkę etykietkę, że ten obraz nazywa się w ten sposób.
W kolejnej lekcji omówimy polecenia związane z kontenerami.
Wejdziemy na pojedyncze kontenery, tak jak zrobiliśmy to w jednej z poprzednich
lekcji i zobaczymy, co jeszcze możemy zrobić.