‫Teraz, gdy rozumiesz podstawy tworzenia roju w wielu węzłach i tworzenia sieci nakładek oraz usług Docker,
‫omówimy następną, naprawdę fajną rzecz dotyczącą Swarm, czyli stosów. Nie stosy naleśników, ale
‫stosy usług. W 1. 13, Docker dodał tę naprawdę wspaniałą
‫funkcję, która dodaje kolejną warstwę abstrakcji na szczycie stosów. Zasadniczo jest to tworzenie plików do produkcji Swarm. Teraz stosy akceptują
‫tworzenie plików.
‫Wewnątrz jest to, co nazwalibyśmy definicją deklaratywną, w której stwierdzamy, że chcę
‫osiągnąć końcowy rezultat.
‫A zadaniem roju jest rozgryzienie wszystkiego. Teraz to nie tylko usługi; to także sieci
‫i wolumeny.
‫I trochę zajrzeć.
‫W rzeczywistości będzie zawierał sekrety, o których powiemy w następnych kilku wykładach.
‫Używamy nowego polecenia, które jest wdrażane w stosach dokowych, aby zaimportować ten plik tworzenia i uruchomić polecenie, które w
‫nim umieszczamy.
‫Stertą zarządza to wszystko.
‫Nie potrzebujemy, abyśmy szli, najpierw tworzyli sieci lub najpierw tworzyli wolumeny, ale możemy to całkowicie zrobić.
‫Możemy użyć czegoś, co nazywa się Zewnętrzne w naszym pliku tworzenia, aby powiedzieć: hej, to są już rzeczy, które
‫istnieją w moim roju. Śmiało i używaj tych, nie przejmuj się tworzeniem ich.
‫Ale zwykle kończy się to tym, że twoje stosy robią to wszystko dla ciebie, ponieważ jest to łatwiejsze w ten sposób.
‫Zamierzamy uzyskać nowe funkcje w pliku tworzenia wiadomości, więc zaczniemy od tych, które
‫wyglądają bardzo podobnie do tego, co mieliśmy wcześniej. Ale dostaniemy tam ten nowy wdrożony klucz
‫lub słownik, który pozwala nam określić rzeczy specyficzne dla Roju.
‫Ile replik chcemy?
‫Co chcemy zrobić po przełączeniu awaryjnym? W jaki sposób chcemy robić uaktualnienia
‫i wszystkie te rzeczy, których nie obchodzimy na naszej maszynie programistycznej.
‫Ale to ma swoją cenę, a mianowicie, że nie możemy jeszcze wykonać polecenia budowania. To może być coś, co nigdy nie
‫zdarzy się w Swarm, ponieważ w tym przypadku chodzi o to, że budowanie nie powinno odbywać się w
‫rój twojej produkcji. Budowanie to coś, co powinien zrobić twój system CI.
‫Może Jenkins lub coś innego jak Codeship.
‫Po utworzeniu obrazów i umieszczeniu ich w repozytorium, ten stos będzie w rzeczywistości tym,
‫który je zrzuci i wdroży za pomocą opcji wdrażania.
‫Jednak dobrą wiadomością jest to, że naprawdę się dogadują.
‫Na komputerze lokalnym kompozycja zostanie zignorowana po uruchomieniu komendy docker-compose.
‫Zignoruje on wszystkie informacje dotyczące wdrażania.
‫W rzeczywistości powie "hej, masz tutaj wdrożone informacje.
‫Nie mogę tego naprawdę użyć, więc zamierzam to zignorować. "Podobnie, gdy
‫jesteś w Swarm i instalujesz nowy stos lub aktualizację stosu, to faktycznie powie"
‫hej, masz tu polecenia kompilacji.
‫Nie robię buildów, więc zamierzam je zignorować i kontynuować. "Fajną rzeczą jest
‫to, że nie musisz zmieniać pliku. Zobaczymy później, jak faktycznie możemy mieć pojedynczy
‫plik redagowania, który robi wszystko, co jest potrzebne do wykonania po stronie programistycznej i po
‫stronie wdrożenia produkcyjnego.
‫To całkiem fajne.
‫W końcu nie potrzebujesz interfejsu Docker Compose CLI, pliku binarnego. To nie musi być
‫w twoim roju. Ponownie skomponuj, rzeczywiste polecenie, nie jest narzędziem produkcyjnym.
‫Nie został zaprojektowany do produkcji.
‫Został zaprojektowany, aby być programistą i narzędziem pomocniczym sysadmin.
‫To jest naprawdę najlepsze do lokalnej pracy na naszych maszynach.
‫Rój, który jest w zasadzie Dockerem. Silnik Docker może teraz akceptować
‫tworzenie plików przy użyciu tego polecenia stosu. Czyta pliki Compose bez potrzeby Docker Compose w dowolnym miejscu na serwerze.
‫Przyjrzyjmy się bardzo szybko, gdy spojrzymy na nasze usługi.
‫Tak wyglądałaby nasza usługa.
‫Stworzymy usługę ...
‫załóżmy, że to Nginx. Powiedzmy, że wybraliśmy trzy jego repliki.
‫Tak więc, to pójdzie i utworzy trzy zadania w orkiestratorze, a te zadania znajdą pewne serwery
‫lub węzły, aby je założyć i utworzą pojemniki.
‫W nowych stosach mówimy o wielu usługach, jednym lub więcej, prawda. Możesz mieć tam dziesiątki
‫usług. W tym pojedynczym pliku YAML.
‫Działają tak, jak usługi, które mieliśmy wcześniej, dopiero teraz możemy robić woluminy i nakładać sieci w
‫tym pliku tworzenia. I to
‫skutkuje tym, co nazwalibyśmy stosem. Stos kontroluje wszystkie te rzeczy.
‫I rzeczywiście umieszcza swoją nazwę we wszystkich obiektach, dzięki czemu można łatwo określić, które z
‫nich są powiązane z tym stosem. Będzie tam również umieszczać etykiety, które omówimy
‫później, co jest bardziej metadane, abyś mógł określić, z jakiego stosu pochodzi ta konkretna rzecz.
‫To jest naprawdę świetne.
‫Teraz możemy użyć pliku YAML, aby rzeczywiście zrobić wszystkie te rzeczy, których nie chcieliśmy
‫wpisywać poleceń serwisowych. Ponieważ polecenia serwisowe były już dość nieporęczne i długie. A potem skończyliśmy tworzyć
‫skrypty Bash w celu uruchomienia tych poleceń, a potem stało się to nudne, prawda.
‫Teraz, gdy mamy już Swarm od ośmiu miesięcy, otrzymujemy teraz funkcję tego stosu, która zarządza
‫tymi usługami.
‫Zauważ, że stos jest tylko dla jednego roju.
‫Dobrze? Nie może wykonywać wielu rojów.
‫Będzie działał tylko na jednym roju, aby mógł kontrolować wszystkie węzły i wdrażać wszystkie
‫te usługi, sieci i wolumeny.
‫Powinienem powiedzieć, że ten diagram może mieć w sobie jeszcze jedną rzecz, która jest tajemnicą,
‫ponieważ stos może również kontrolować te elementy. Zobaczymy to na późniejszym wykładzie w tej sekcji. DOBRZE.
‫Spójrzmy na stosy i ich działanie.
‫Jestem z powrotem w moim 3-węzłowym roju, który zbudowaliśmy wcześniej. Zamierzam zmaksymalizować okno na węźle 1, ponieważ tak
‫naprawdę nie potrzebuję dwóch pozostałych węzłów.
‫Przynajmniej nie potrzebuję ich linii poleceń ssh.
‫Zamierzamy użyć przykładu głosowania, jaki zrobiliśmy na poprzednich wykładach w tej sekcji.
‫Jeśli pamiętasz o tym nasz projekt, to było pięć różnych usług i wszystkie one miały zależności od
‫siebie.
‫I ostatecznie dało nam dwie różne strony internetowe.
‫Przeszliście i jestem pewien, że stworzyliście listę najlepszych usług z wszystkimi wartościami i opcjami, których
‫potrzebowali i było idealnie, prawda?
‫Jestem tu, aby ci to powiedzieć, teraz nie jest to już potrzebne.
‫To było naprawdę ważne, abyśmy z nich korzystali i nie wszystko będzie wymagało pliku stosu.
‫Ale teraz mam plik stosu.
‫Przyjrzyjmy się temu naprawdę szybko, ponieważ zauważysz, że wygląda bardzo
‫podobnie do pliku redagowania, ponieważ tak jest. Jedyną kluczową rzeczą, którą musisz zmienić, musi być co najmniej wersja 3
‫lub wyższa.
‫Najnowsza wersja w tej chwili to wersja 3. 1, ale jestem pewien, że to się zmieni, ponieważ nadal
‫się zmienia i dojrzewa.
‫Ale potrzebujesz wersji 3, aby użyć stosów.
‫Zauważysz, że mamy nasz redis, nasze db, i nasz głos, i wszystkie te rzeczy, które prawdopodobnie są
‫bardzo podobne do ciebie z twojej własnej pracy. Prawdopodobnie jesteś bardzo zaznajomiony z tymi i potrzebnymi obrazami, a także
‫z portami, które potrzebują otworzyć i tak dalej.
‫Ale w tym przypadku zauważysz wdrożenie.
‫Wdróż tutaj, jest nowa opcja. Zobaczysz tutaj, że określałem, ile replik chcę, czyli
‫ile kopii tego obrazu musi być uruchomionych w tym samym czasie.
‫A co się stanie, gdy zrobię aktualizację.
‫Tak więc, gdy wykonuję aktualizację stosu, która następnie będzie aktualizować usługi.
‫Jak mam to wdrożyć?
‫Dobrze?
‫Czy chcę, aby wszyscy upadli w tym samym czasie? Czy chcę tylko jeden na raz?
‫Ile opóźnienia między nimi?
‫Tutaj są różne opcje.
‫Po prostu narysujemy powierzchnię, ale widać, że mam tutaj zasadę restartu, że jeśli kontener
‫się nie powiedzie, automatycznie uruchomi się ponownie.
‫Możesz zobaczyć tutaj w
‫bazie danych, faktycznie miałem ograniczenia wprowadzone, aby upewnić się, że jest on na określonym węźle.
‫Nie rozmawialiśmy jeszcze bardzo dużo o ograniczeniach, ale są sposoby, aby nam
‫etykietować obiekty, to znaczy pojemniki lub obrazy, lub naprawdę wszystko, co możemy stworzyć lub zniszczyć w Swarm lub w samym Dockerze.
‫Możemy faktycznie przypisać etykiety do każdego z nich, w tym do węzłów, a węzeł będący menedżerem otrzymuje
‫własne etykiety.
‫Jest nam bardzo łatwo zrobić, żeby powiedzieć, hej, ten kontener musi działać w węźle, który ma
‫tę szczególną rolę.
‫Świetny przykład tam. Podczas przewijania mamy kilka opcji równoległości, które widzieliśmy wcześniej.
‫Ta opcja opóźnienia jest całkiem fajna. Jeśli masz trochę czasu na rozgrzewkę, gdy
‫masz pojemniki, które się obracają. Może zaczęli, ale tak naprawdę nie zaczynają żyć przez jakieś 60 sekund.
‫Możesz dodać tam opóźnienia. Będziemy patrzeć na te
‫później podczas produkcji niebiesko-zielone wdrożenia. Na razie widać, że wszystkie są dość standardowe.
‫Tutaj mamy jeszcze więcej opcji. Możesz zobaczyć, że przypisuję tę konkretną etykietę.
‫Mam okno i maksymalną próbę ponownego uruchomienia zasad.
‫Więc jeśli spróbuje uruchomić się ponownie i nadal będzie się nie udać, nie będzie próbował więcej niż trzy razy.
‫Sprawdźmy to.
‫Wszystko, co muszę zrobić, to zrobić stos stosu dockera -c do komponowania. Więc zamierzam użyć pliku Compose.
‫Teraz mam zamiar nazwać to voteapp. I oto idziemy. W rzeczywistości nie tworzył wszystkiego i nie kręcił
‫tak szybko.
‫Wszystko, co robił, to tworzenie tych obiektów w harmonogramie, który następnie przechodzi przez proces
‫tworzenia usług, które następnie tworzą zadania, które następnie tworzą kontenery.
‫Musi także tworzyć sieci, jak zobaczysz tutaj. Pamiętajmy, że mieliśmy frontend i
‫backend, więc utworzyliśmy te, a także domyślną sieć, którą ten konkretny plik stosu użyłem
‫w domyślnej sieci.
‫A potem zobaczysz tę opcję dla wizualizatora, która jest nowa, z której wcześniej nie korzystaliśmy.
‫Zobaczymy to za chwilę.
‫Rzućmy okiem na komendę stosu doków.
‫Zobaczysz, że możemy wdrożyć. Już to zrobiliśmy.
‫Następnie
‫mamy ls, ps, rm i usługi.
‫Tak więc to polecenie nie ma wielu funkcji.
‫Jest to dość proste, ponieważ cała funkcjonalność jest naprawdę w pliku tworzenia i naprawdę w
‫obiektach, które tworzy.
‫Ponieważ zrobiliśmy już to wszystko, możemy robić rzeczy takie jak ls, które pokazują nam wszystkie nasze stosy.
‫To dość podstawowe polecenie. Mamy tylko jeden. Więc jeśli zrobię ps, to faktycznie pokazuje mi ... oops
‫Muszę podać nazwę.
‫głosować.
‫Nazywa się voteapp.
‫Muszę to naprawić.
‫DOBRZE.
‫Pozwólcie mi to powtórzyć, abyście mogli zobaczyć to trochę lepiej. Tam.
‫To są rzeczywiste zadania. Następnie możesz zobaczyć, w którym węźle działają.
‫To w rzeczywistości nie są pojemniki. To jest właśnie zadanie, które tutaj widzimy. Ponieważ gdyby to był
‫faktyczny pojemnik, zobaczylibyśmy dużą, długą nazwę. Ponieważ, jeśli pamiętasz, usługi, które stworzyliśmy wcześniej, miały naprawdę długie
‫nazwy, jeśli faktycznie poszłyśmy
‫i zrobiliśmy to w psie doker. Dobrze? Jeśli zrobiłem kontener dokera
‫ls, lub okno dokowane ps, otrzymasz te naprawdę długie nazwy. A to dlatego, że wszyscy otrzymują GUID, ponieważ każdy
‫kontener musi być unikalnie nazwany.
‫W ten sposób gwarantują, że są zawsze wyjątkowe i nigdy się nie zderzają.
‫W takim razie ostatnią
‫z nich jest aplikacja do głosowania dockapp.
‫Najbardziej podoba mi się ten, ponieważ pokazuje mi moje repliki.
‫To trochę
‫jak robienie usługi ls. Pokazuje mi, ile rozpoczęłam replik, więc wiem, czy
‫mam już odpowiednią liczbę kontenerów. Następnie, jeśli chcę zanurkować
‫głębiej, mógłbym zrobić pakiet doków ps. Otrzymujemy tutaj nazwy zadań i widzimy, na których węzłach działają.
‫Te dwa elementy razem dają pełny obraz tego, jak działa ta cała aplikacja.
‫Gdybym chciał zanurzyć się w sieci, mógłbym zrobić sieć
‫dokerów, tak jak zwykle.
‫Możesz zobaczyć te trzy nowe sieci nakładek, które zostały utworzone dla tej aplikacji. Zauważ, że nazwa
‫aplikacji jest zawsze na początku. Stos zawsze poprzedza nazwę usługi.
‫Tak więc każdy stos upewni się, że jego nazwa znajduje się na pierwszym planie.
‫A potem sprawdźmy to.
‫Pozwól mi otworzyć moją przeglądarkę.
‫W porządku.
‫Możemy je zobaczyć na porcie 5000.
‫Mam uruchomioną witrynę do głosowania.
‫Idę do 5001.
‫Mam stronę wyników, więc mogę ją kliknąć, a następnie zobaczyć wynik.
‫Wtedy ten nowy, który mamy, nazywa się Wizualizatorem.
‫Jest na 8080. Wizualizator jest całkiem miłym narzędziem do celów demonstracyjnych.
‫To jest w rzeczywistości ... wszystko to robi Docker, a tak na
‫marginesie, wszystko to jest repozytorium open source, które można zobaczyć w sekcji Zasoby tej sekcji.
‫Mamy więc różne kolory dla każdej usługi.
‫Wynik głosowania jest zielony.
‫A potem Redis to rodzaj musztardy, a głos jest różowy. Widać, że są dwa głosy i są dwa
‫powtórki.
‫Wspaniale jest pokazywać, co się dzieje, gdy rzeczy krążą wokół roju.
‫Jeśli faktycznie wszedłem do mojego pliku i dokonałem zmiany.
‫Przejdźmy do aplikacji do głosowania i załóżmy, że chcemy zmienić repliki na pięć.
‫Moglibyśmy przejść i zaktualizować usługę. Ale to jest rodzaj AntiPattern. Jeśli wchodzimy i wpisujemy ręcznie,
‫polecenia do usługi, takie jak aktualizacja
‫usługi dokowania, oznaczają, że następnym razem, gdy ponownie zastosuję ten plik YAML, nadpisze on te zmiany.
‫Jeśli kiedykolwiek tworzyłeś chmurę w AWS lub innym zarządzaniu konfiguracją, wiesz, że gdy używasz
‫pliku konfiguracyjnego takiego jak ten do zarządzania infrastrukturą, naprawdę zawsze będziesz chciał użyć tego
‫pliku, ponieważ będzie on źródłem prawdy.
‫Prawdopodobnie podczas produkcji będzie jakiś plik, który przechowujesz w repozytorium Git, w którym
‫masz kontrolę wersji, i kontrolujesz zmiany, dzięki czemu możesz cofnąć zmiany.
‫W tym przypadku po prostu zmienię ten plik naprawdę szybko i będziemy uruchamiać to samo polecenie, wdrożenie
‫stosu doków.
‫Zauważ, że nie mamy aktualizacji. Ponieważ zamierzamy wdrożyć do tego samego stosu i
‫będzie to rozpoznawać, że istnieje, i że będziemy go aktualizować w oparciu o te zmiany.
‫Aby go zaktualizować, musimy upewnić się, że używamy poprawnej nazwy.
‫Więc to jest głosowanie. A potem zauważ, że chodzi o aktualizowanie usług, ale zdaje sobie sprawę, że musi je zmienić.
‫Następnie, jeśli przejdziemy do naszego wizualizatora, widać, że już go mamy.
‫Dzisiaj jesteśmy po prostu zbyt powolni, prawda?
‫Nie jesteśmy w stanie nadążyć za rojem. Mamy już pięć z tych aplikacji do głosowania, które już działają.
‫Jeśli zabrakło czasu, aby uruchomić i uruchomić, zobaczylibyśmy, że ich stany zmieniają się tutaj, gdy
‫są online.
‫Ale to prosta aplikacja internetowa, więc zacznie się dość szybko.
‫W porządku.
‫To stosy.
‫Teraz dodajmy sekrety do naszych stosów.