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 opowiem Wam o różnicach
między obrazami a kontenerami i jak najlepiej to wytłumaczyć.
Dla developerów jak poprzez kod.
Więc robimy tutaj analogię do.
Klas w JavaScripcie.
Oczywiście te klasy są podobne do
klas w innych językach programowania, więc jeżeli JavaScript nie jest Twoim głównym
językiem programowania, to mam nadzieję, że będzie to czytelne.
Więc jeśli stworzymy sobie klasę container.
I stworzymy jakiś konstruktor.
W momencie tego, gdy tworzymy nową instancję kontenera oczywiście.
Coś się będzie działo w przypadku kontenerów.
Kontener to jest tak, jakby ten duży box.
O którym mówiliśmy już wcześniej, który pozwala nam.
Na uruchomienie różnych serwerów.
Wewnątrz po prostu danego boxa.
Jeżeli tutaj sobie stworzymy container.
To w naszym kontenerze jesteśmy w stanie uruchomić tak naprawdę.
Mini system operacyjny, o czym też będę mówił.
Że różne obrazy są budowane na różnych systemach operacyjnych.
Czyli np. jeśli chcielibyśmy stworzyć kontener.
Powiedzmy.
To w momencie gdy tworzymy nową instancję tego kontenera
to po prostu serwer będzie się uruchamiał i on może być uruchomiony, ale my możemy
nie mieć do niego bezpośredniego dostępu z naszego systemu.
Operacyjnego, jeżeli o to jawnie nie poprosimy.
Więc jeśli na razie to wyłączę.
Tutaj tak naprawdę może być Create.
VR Web Application.
Kreatywne albo bardziej nawet trafne.
Czyli tutaj w momencie gdy stworzymy sobie nowy container, to powiedzmy.
Że to będzie ppp container.
To wtedy możemy na nim robić jakieś operacje.
Oczywiście tutaj moglibyśmy to doprecyzować.
Że jest to. Kontener, ale generalnie chodzi o.
To, że kontenery uruchamiają nasze aplikacje.
I teraz jak tworzyć nowe kontenery?
My nie jesteśmy w stanie stworzyć ich w taki sposób.
Musimy wykorzystać do tego obraz.
Czyli jeśli stworzymy klasę Image.
W momencie, gdy robimy sobie konstruktor.
To my tworzymy nowy obraz dla. Np.
uruchamiania naszej aplikacji internetowej, która jest php.
Create template czyli obrazy są takie jakby templatki.
Dla.
Tego jak nasz serwer powinien się uruchamiać.
Ale to co też mogą robić obrazy to możemy z nich tworzyć kontenery,
czyli z tych wzorców, które sobie stworzymy i je się tworzy poprzez.
Tak zwane budowanie.
Czyli jest po prostu polecenie do tego docker build, które buduje nam
obrazy na podstawie specjalnych plików, które nazywają się docker file.
I gdy mamy już ten obraz zbudowany, jesteśmy w stanie zrobić.
Z niego kontener.
Czyli moglibyśmy sobie tutaj tak napisać create container.
Z różnymi danymi. No i powiedzmy.
Że on będzie nam stwarzał nowy container z danymi.
Moglibyśmy tutaj nawet przekazać DISA,
jeżeli byśmy byli zainteresowani, bo kontenery są.
Tworzone z obrazów, więc teoretycznie mamy dostęp do wszystkich warstw.
Czyli takich operacji, które zostały
wytworzone na etapie budowania tego obrazu.
Czyli zamiast tworzyć coś takiego, prawdopodobnie musielibyśmy bardziej.
Napisać sytuację, że mamy PMT.
I najpierw.
Tworzymy nowy obraz, z którego to obrazu.
Robimy sobie create container.
Oczywiście tutaj tych danych może nie być.
Jest to analogia do zmiennych
środowiskowych, o których zaraz też powiem.
Z tym, że też nie jesteśmy w stanie zrobić po prostu nowego obrazu w ten sposób.
Tak jak wspomniałem, obrazy buduje się na podstawie pewnych plików źródłowych.
Które będziemy pisali w kolejnych lekcjach.
Oczywiście tutaj jest to tylko analogia do klasy.
Pamiętajcie, że nie tak się pracuje z Jokerem.
Będziemy pracowali nad tym przy pomocy komendy linii poleceń.
Interfejs.
Więc aby stworzyć nasz obraz, my tak naprawdę musimy najpierw stworzyć ten.
Plik źródłowy, który nazywa się docker file.
Jest to zwykły plik tekstowy.
Czyli powiedzmy, że zrobimy trzecią klasę.
Chwilę.
No i powiedzmy, że to będzie statyczny plik.
Ciężko powiedzieć.
Statyczna klasa.
I ona może mieć metodę WILD.
I to co się dzieje w tym momencie to
oczywiście tutaj są różne operacje pobieranie zależności z internetu.
Kompilowanie jakiś plików binarnych.
Więc generalnie ustalanie wszystkich tych
zależności, które są potrzebne aby nasz serwer chodził, czyli powiedzmy install.
And setting a dependency sis.
No i w momencie gdy to się skończy.
To oczywiście będzie troszkę trwało.
Nasz nowy obraz zostanie stworzony z jakimiś tam danymi kontaktowymi.
I znów tutaj moglibyśmy powiedzmy zrobić
analogię do tego, że to jest przekazywany dysk.
Więc w momencie gdy mamy jakiś docker file.
Dla naszego pliku php.
To jesteśmy w stanie z niego dopiero stworzyć obraz.
Czyli jeśli chcielibyśmy stworzyć.
Powiedzmy nowy obraz.
To zamiast New Image.
Bezpośrednio.
Moglibyśmy zrobić.
New docker file?
Albo jakby to była statyczna klasa.
Po prostu bez tutaj tego.
Słowa kluczowe gonią.
Bild.
I w tym momencie będziemy mieli nowy
obraz, który został zbudowany według tego, co się znajdowało w naszym filmie.
A tworząc same kontenery, czyli nasze
serwery aplikacji, po prostu z tego obrazu tworzymy nowe kontenery.
I co jest istotne, to oczywiście możemy zbudować kilka obrazów z tego samego.
Docker files, tego samego pliku źródłowego z tej samej templatki.
Natomiast one będą identyczne. Możemy je po.
Prostu inaczej nazwać, czyli np.
dwa miałby dokładnie.
Takie same treści.
Ale moglibyśmy się do niego osobno odwoływać.
Ale co jest istotne, to.
Jesteśmy w stanie zrobić to samo dla kontenerów.
Czyli tutaj można już powoli zacząć myśleć o tym, że mając taki obraz stworzony,
gdzie uruchamiamy serwer PHP jesteśmy w stanie dodawać więcej instancji
w zależności od tego jak dużo jest ruchu i z tych np.
. Konceptów korzysta też Hibernate czy Swarm
czy inne agregatory tego jak nasza infrastruktura działa.
Czyli w prosty sposób. W.
Dolarze jesteśmy w stanie zwiększyć ilość instancji tej samej aplikacji.
Większy ruch, więcej kontenerów, mniejszy ruch, mniej kontenerów.
Logika aplikacji jest dokładnie ta sama i w zależności od tego,
który użytkownik przychodzi, możemy zostać przekierowani albo do tego kontenera.
Albo do tego. I to jest tzw.
load passing.
Więc tak wygląda analogia klas do.
Dockera i obrazów i kontenerów.
Więc to co warto zapamiętać z lekcji to to, że obrazy są to takie jakby
klasy, na podstawie których my tworzymy kolejne instancje naszych serwerów.
Www albo dowolnych. Innych.
I z jednego obrazu możemy stworzyć dowolną ilość kontenerów.
No i oczywiście same obrazy tworzymy.
Na podstawie docker file.
W kolejnej lekcji opowiem troszkę o tym,
jak działa wewnętrzna infrastruktura Dockera i będziemy powoli zmierzali do
tego, aby faktycznie zacząć pisać nasze pierwsze file.
Żeby poznać polecenia docelowe i tworzyć pierwsze nasze.
Aplikacje wewnątrz infrastruktury Dockera.
Stan końcowy lekcji · 8 min
class Container {
constructor() {
// run our web application
}
}
class Image {
constructor() {
// create a template
}
createContainer(data) {
return new Container(data, this);
}
}
class Dockerfile {
build() {
// installing and setting up the dependencies
// ...
return new Image();
}
}
const phpImage = new Dockerfile.build();
const phpContainer = phpImage.createContainer();
const phpContainer2 = phpImage.createContainer();