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 podsumujemy to wszystko.
Co omówiliśmy w tej części kursu.
Jako, że był to szybki.
Start, to oczywiście było tutaj bardzo dużo treści.
Mam nadzieję, że udało Ci się wynieść z tego jak najwięcej.
W tej lekcji postaramy się troszkę podszlifować te.
Wszystkie rzeczy, które omówiliśmy w poprzednich lekcjach.
Czyli np. jeżeli uruchamiamy naszą.
Aplikację przy pomocy Dockera
i tutaj cała ta komenda z portami to możemy ją przepisać 8080.
Tutaj wpisujemy.
PWD jako obecny katalog i oczywiście musimy to zrobić dla naszego yuma.
Podpinamy serwer jest na wewnątrz kontenera również pliku serwer jest.
Oczywiście może to być inna nazwa jeżeli nam na tym zależy
i tutaj uruchomimy to tym razem w trybie start i uruchomimy nasz pliki.
Serwer jest oczywiście tej składni nie musicie pamiętać.
To też jest jedna z ważniejszych rzeczy, o której chciałem powiedzieć.
W tej części kursu.
Z reguły nie pracuje się.
Tak bardzo na samych komendach.
W środowiskach developerskich korzysta.
Się z tak zwanego Docker Composer, o
którym będzie w kolejnych sekcjach związanych ze środowiskiem developerskim.
Natomiast dobrze jest. Po prostu to znać, zwłaszcza jeżeli
pracujecie na legacy systemach i trzeba coś czasem reagować.
Nie ma dobrego posta.
Tak się czasami zdarza.
Więc zobaczmy co się stanie jak ja to uruchomię.
Oczywiście teraz jest w trybie data, więc on.
Faktycznie mamy wolną konsolę i po
odświeżeniu faktycznie widzimy port 80 80 nam chodzi.
Więc to co możemy teraz zrobić to usunąć tego, usunąć ten kontener.
Mamy już.
Możemy. Powinniśmy tak naprawdę najpierw
zastopować ten kontrakt, dopiero później go usunąć, ale możemy to też sforsować.
I to co chciałem. Zrobić teraz, to.
Podpiąć również plik index.
HTML i serwować ten plik index.
HTML tutaj w JavaScript.
Jeśli pobierzemy szybko moduł File system require fs i tutaj mamy property i.
Jeżeli korzystamy z odpowiednio nowej wersji noda, tutaj bodajże docker file
jest na o to jest latest, więc prawdopodobnie będzie to 17 kropka.
6. Na czas nagrywania tego kursu więc możemy
korzystać z modułu File System w wersji Promise, więc jest to bardzo wygodne.
No i. Tutaj jeżeli sobie.
Dodamy asynchroniczne funkcje.
Która będzie obsługiwać nam te wiadomości.
I pobierzemy sobie plik index.
HTML, czyli const data.
Tu ser.
To będzie news.
Read fail.
Czyli mamy asynchroniczne API, z którego korzystamy synchronicznie poprzez async.
Na pewno kurs dotyczący zaawansowanego
JavaScriptu też znajdzie się na platformie.
I chcemy podać jakąś ścieżkę, na której nam zależy.
My będziemy po prostu czytali.
Index.html.
I zobaczymy czy są jakieś dodatkowe opcje.
Nie zwracane jest po prostu promise. I to co możemy.
Zrobić to na tym ciągu znaków binarnym na sferze.
Możemy wywołać metodę toString.
UTF 8.
I w ten sposób.
Odczytamy zawartość tego pliku, który też
zamontujemy za pomocą docelowych woluminów.
I jeśli wpiszemy tutaj data to server jako
coś co zostanie wysyłane do naszego klienta,
to jeżeli nie popełnimy jakiegoś błędu po drodze powinno nam to zadziałać.
Tylko, że musimy pamiętać, że ten indeks HTML też musi być.
Umieszczony wewnątrz tej komendy, która uruchamia nam serwer.
Czyli możemy. Sobie.
Przekopiować tą część związaną z volume mi.
Czyli nic nie przeszkadza nam, aby
umieścić kilka wolumenów do tego samego kontenera.
I tutaj wpisujemy indeks.
HTML.
Na i indeks.
HTML.
Natomiast oczywiście jeżeli mielibyśmy tych plików tysiące.
To nie ma sensu dodawać osobnego wolumenu do każdego z tych plików.
Lepiej po prostu zamknąć cały kod źródłowy w jakimś katalogu.
Source.
I ten source po prostu dodać jako jeden katalog.
Co też ma czasami swoje. Problemy, bo nie możemy wtedy
wyeksportować, czyli wyłączyć pojedynczych plików.
Jeżeli dodajemy cały katalog możemy je
jakoś tam nadpisać innym wolumenem, który jest po prostu pusty, ale to też nie jest
optymalne rozwiązanie, więc zobaczmy czy to nam zadziała.
Aplikacja wystartowała w trybie dead i teraz jeżeli nie popełniłem błędu,
po odświeżeniu widzimy naszą aplikację zamontowaną i tutaj.
Jest to jakiś prosty HTML, który korzysta
z tej winda i widzimy, że tutaj Docker jest jedną z lepszych sposobów do pracy.
Więc to co chciałem jeszcze Wam pokazać przez to, że mieliśmy ten plik index.
HTML jako volume, jako volume czy wolumen
to zmieniając tu powiedzmy jakąkolwiek część
nie wiem czy może po prostu zmienimy jakąś część tekstu.
Poszukajmy sobie tego dockera, dodamy sobie OMG i zapiszemy.
I teraz nawet bez żadnego lay.
Bo nie potrzebujemy listy, ponieważ za
każdym razem gdy jest request do serwera odczytujemy plik na nowo.
Odświeżamy i widzimy, że nasze zmiany się zaaplikowane.
Więc gdybyśmy spróbowali dodać sobie ten plik index.
HTML przez chwilę, no to wtedy już
musielibyśmy przebudowywać cały plik ponownie.
Jeżeli dodamy jakąś zmianę tutaj do naszego pliku index.
HTML. A tak to mamy wygodne.
Na środowisku developerskim.
Sposób pracy z systemami operacyjnymi,
zwłaszcza jeżeli dodamy sobie w kolejnych lekcjach inne rozwiązania, takie jak np.
na odmian czy różnie to ludzie wymawiają, który pozwoli nam restartować serwer
w momencie kiedy nastąpi zmiana w dowolnym jego zakresie.
Więc to wszystko w tej sekcji kursu.
W kolejnej sekcji omówimy tego docker
file, bo raczej też docelowo nie pracuje się z nim tylko na zasadzie, że się go
buduje pustego, bo moglibyśmy go po prostu pobrać poprzez docker pull
i moglibyśmy w ogóle pominąć tego maila w tej części kursu, ale chciałem poruszyć
kwestię budowania obrazów, w związku z czym do zobaczenia w kolejnej lekcji.
Dzięki.
server.js · 6 min
const http = require('http');
const fs = require('fs').promises;
const requestListener = async function (req, res) {
const dataToServe = (await fs.readFile('/index.html')).toString('utf-8');
res.writeHead(200);
res.end(dataToServe);
}
const server = http.createServer(requestListener);
server.listen(8080);