‫Wymagania dotyczące tej sekcji obejmują zrozumienie sposobu uruchamiania kontenera. Następnie podstawowe koncepcje sieciowe TCP /
‫IP, takie jak podsieci i adresy IP oraz porty i zapory.
‫Nie musisz tego wszystkiego wiedzieć, ale z pewnością ułatwi ci
‫to zrozumienie tej części, która skupia się
‫na rzeczach konceptualnych, zanim w następnym wykładzie wejdziemy w garść elementów linii poleceń.
‫Chcę ci tylko przypomnieć o opcji -p na poleceniach uruchamiania kontenera, która ujawnia
‫port na twoim komputerze.
‫W tle sieci Docker jest dużo więcej rzeczy, o których będziemy mówić.
‫Docker ma koncepcję baterii w zestawie, ale wymienna, co w zasadzie oznacza, że domyślne ustawienia są
‫dość łatwe i powszechne w pracy, ale można zmienić wiele opcji pod maską.
‫Szybko sprawdzimy w tym wykładzie polecenie portu kontenera, które daje szybkie wyjście z
‫tego, które porty są otwarte dla tego kontenera w sieci.
‫Następnie podzielimy niektóre koncepcje sieci Docker i sieci wirtualnych oraz sposób, w
‫jaki pakiety przepływają po sieci.
‫Skończymy z diagramem sieci pokazującym, w jaki sposób kontenery rozmawiają między sobą i
‫jak różni się od -p wystawiania ich na fizyczną sieć.
‫Kiedy faktycznie uruchamiasz kontener, naprawdę jesteś w tle, łącząc się z
‫określoną siecią Docker. Domyślnie jest to sieć mostów, ponieważ sprawdzimy to za minutę. Następnie każda z tych
‫sieci, z którymi chcesz się połączyć, faktycznie kieruje się przez zaporę NAT, która jest demonem
‫Docker, konfigurującym adres IP hosta na domyślnym interfejsie, dzięki czemu Twoje kontenery mogą dostać
‫się do Internetu lub reszty twojego sieć, a następnie wróć.
‫Ale tak naprawdę nie musimy używać -p, gdy mamy określone kontenery, które chcą
‫ze sobą rozmawiać wewnątrz naszego hosta.
‫Na przykład, jeśli masz aplikację, która ma serwer sequel i kontener PHP Apache, te dwa kontenery powinny znajdować
‫się w tej samej sieci i mogą ze sobą rozmawiać bez faktycznego otwierania
‫portów do reszty fizycznej sieci .
‫Jeśli miałeś inną aplikację, która nie była powiązana, powiedzmy, że korzystaliśmy z Mongo i Node. js, możesz utworzyć sieć, aby
‫mogli ze sobą rozmawiać bez użycia opcji -p, aby
‫udostępnić je sieci. Ale nie mogli rozmawiać z inną siecią,
‫w której mogłaby działać niepowiązana aplikacja.
‫Ale chodzi o to, że prawie wszystkie opisane przeze mnie ustawienia są w rzeczywistości zmienne.
‫I to przynosi dobre powiedzenie, że Docker lubi używać ... to znaczy baterie w zestawie, ale wyjmowane.
‫Zobaczysz, że podczas tego kursu wiele razy są domyślne, które działają tylko po wyjęciu z
‫pudełka.
‫Nawet nie musisz ich określać. Po prostu zauważasz, że rzeczy są skonfigurowane w pewien
‫standardowy sposób.
‫Ale wiele z tych opcji można konfigurować w czasie wykonywania lub nawet zmieniać po fakcie. Zobaczymy, że niektóre z nich mają miejsce
‫tutaj, kiedy bawimy się sieciami.
‫Niektóre rzeczy, które możesz zmienić, to tworzenie wielu sieci wirtualnych, może
‫jednej na aplikację, lub różnych opartych na różnych wymaganiach bezpieczeństwa.
‫W rzeczywistości możesz, podobnie jak w świecie fizycznym, mieć dwie fizyczne karty sieciowe na prawdziwym komputerze. W rzeczywistości możesz mieć dwie
‫wirtualne sieci podłączone do jednego kontenera lub możesz faktycznie rozmawiać przez kontener
‫z żadną siecią.
‫Możesz pominąć dowolną konfigurację sieci wirtualnej, która wychodzi z pudełka i faktycznie używa
‫-
‫net = host, a stracisz część korzyści związanych z kontenerowaniem.
‫Ale w niektórych przypadkach może być wymagane.
‫Później wejdziemy do sterowników sieciowych Docker. Istnieje cały ekosystem
‫wtyczek wokół Dockera, który rozszerza możliwości Dockera na wiele narzędzi innych firm.
‫Ale w tym przypadku przyjrzymy się kilku różnym sterownikom sieciowym Dockera i tym, jak mogą
‫one zmienić naszą sieć i dać nam nowe możliwości.
‫To naprawdę tylko drapanie powierzchni.
‫W tym kursie pojawiają się koncepcje dotyczące sieci, podczas których będziemy rozmawiać o
‫bardziej zaawansowanych tematach sieci prywatnych z wieloma hostami i pojęciach, takich jak interfejsy podrzędne i tak dalej.
‫Ale na razie zanurzmy się w niektóre elementy linii poleceń.
‫Jako szybki
‫przegląd, spójrzmy na -p naszych komend uruchamiania kontenerów ... uruchom kontener kontenera.
‫Jeśli pamiętasz, kiedy po raz pierwszy uruchomiliśmy kontener, użyliśmy -p, aby odsłonić port 80 naszego Nginx.
‫To zajęło lewą stronę, która jest portem hosta, i przekazuje ruch z tego portu do portu
‫80 kontenera.
‫Jeśli zrobiliśmy webhost port kontenerowy dokera, to pokazuje to w ładnym, łatwym formacie, który porty przekazują
‫ruch do tego kontenera z hosta do samego kontenera.
‫Nie rozmawialiśmy o adresie IP kontenera.
‫Możesz więc założyć, że kontener używa tego samego IP co host. Ale domyślnie to
‫nieprawda.
‫Możemy łatwo uzyskać adres IP Dockera tego kontenera, sprawdzając go, a
‫my użyjemy polecenia formatowania lub opcji, co, jak zauważysz, ma dość specyficzny format do
‫filtrowania przychodzących rzeczy.
‫Zawsze możesz użyć polecenia grep, którego użyliśmy wcześniej, aby odfiltrować wyjście tekstowe, ale
‫format, --format, jest w rzeczywistości trochę czystszy i spójniejszy. Robisz dwa nawiasy klamrowe, a kiedy już
‫przyzwyczaimy się do formatu pliku konfiguracyjnego, wiemy, że ustawienia sieciowe. Adres IP jest rzeczywistym węzłem
‫tego wyjścia JSON, na które chcemy spojrzeć.
‫A potem webhost. Ups, to znaczy, że nie pisałem tego poprawnie.
‫I P A d d.
‫I nie tego oczekiwałem.
‫Gdybym miał użyć adresu IP mojego hosta, ponieważ znam moje komputery Mac w sieci lokalnej, a jeśli wykonam ifconfig
‫na moim komputerze Mac, wiem tylko, że adres IP jest w mojej sieci domowej lub 1 9 2 1 6 8 Podsieć.
‫To ciekawe, że nie są tą samą siecią.
‫Dlaczego tak jest?
‫Zobaczmy, czy to będzie bardziej sensowne, jeśli go wyciągnę.
‫Jeśli mój system operacyjny hosta jest podłączony do mojej sieci ... to jest moja sieć ... sieć fizyczna. To jest interfejs
‫Ethernet na moim komputerze hosta, w moim przypadku to mój Mac.
‫Jest tam mała zapora ogniowa, która robi kilka rzeczy. Blokuje cały przychodzący ruch przychodzący z sieci, dzięki czemu
‫wszystko jest domyślnie blokowane. Nazwałbym to zaporą ogniową. Każdy ruch
‫wychodzący z moich kontenerów będzie domyślnie NATowany.
‫Działa jak całkiem popularna zapora sieciowa w sieci.
‫Istnieje jednak koncepcja sieci wirtualnych i domyślnie zobaczysz sieć
‫o nazwie bridge lub docker0.
‫Kiedy uruchomisz nowy kontener, nazwiemy go C1, ten kontener jest dołączony do tej sieci, tej wirtualnej sieci
‫i ta wirtualna sieć jest automatycznie dołączana do twojego interfejsu Ethernet na twoim hoście, aby mógł
‫się wydostać.
‫W naszym przypadku, kiedy właśnie uruchomiliśmy Nginx, daliśmy mu -p 80:80. To powiedziało, żeby otworzyć port 80 w moim
‫interfejsie Ethernet na moim Macu i przekazać wszystko, co przychodzi do portu 80 przez tę
‫wirtualną sieć do portu 80 w
‫tym kontenerze.
‫Domyślnie, gdy tworzę drugi kontener, jest on umieszczany w tej samej sieci mostów.
‫Te dwa pojemniki mogą swobodnie rozmawiać tam iz powrotem na ich odsłoniętych portach.
‫Jeśli nie podam -p, ruch przychodzący do moich sieci wewnętrznych nie dotrze do
‫moich kontenerów.
‫Mogę stworzyć więcej wirtualnych sieci i nazwać je tym, czego chcę. Nazywam to jedną
‫z moich aplikacji sieciowych, powiedzmy. I powiedzmy, że podłączam tutaj dwa pojemniki ... Mam MySQL.
‫Potem dostałem Apache.
‫W MySQL nie
‫otworzyłem żadnych portów i nigdy nie podałem -p. Ale w przypadku
‫Apache dałem mu -p-8080: 80.
‫To oznaczałoby, że po prawej stronie, w moim interfejsie Ethernet na moim hoście, zacznie nasłuchiwać
‫na porcie 8080.
‫Gdy tylko ruch przyjdzie do mojego hosta na porcie 8080, będzie on kierował go do nowej
‫sieci wirtualnej, którą stworzyłem, i do tego serwera Apache na porcie 80.
‫Wewnątrz tej wirtualnej sieci serwer Apache może swobodnie rozmawiać z serwerem MySQL przez
‫port nasłuchiwania.
‫Kiedy myślisz o sieciach wirtualnych w Docker i tam, gdzie należą kontenery, zastanów się, jak umieścić
‫różne kontenery w pobliżu siebie, ponieważ są one powiązane w ich aplikacji.
‫Jak widzisz, te dwa przykłady, gdybym miał pojemnik jeden i pojemnik dwa w górę
‫rangi coś innego, Jeśli nie zamierzają rozmawiać z usługami w tej sieci poniżej, to miałoby
‫sens zachować w oddzielnych sieciach wirtualnych.
‫Gdyby kiedykolwiek musieli ze sobą rozmawiać, musieliby przechodzić przez swoje opublikowane
‫porty przez całą drogę powrotną.
‫Przypominamy, że na dowolnym interfejsie hosta nie można słuchać na więcej niż jednym porcie wielu kontenerów.
‫Tak więc nie można mieć dwóch kontenerów nasłuchujących na porcie 80 na poziomie hosta.
‫Tylko jeden może to zrobić.
‫Jeśli spróbujesz uruchomić inny kontener, to faktycznie popełni błąd i powie, że w
‫tym porcie jest już coś innego. To nie jest ograniczenie Dockera; to tylko ograniczenie sposobu
‫działania sieci IP.
‫Krótkie podsumowanie tej sekcji. W rzeczywistości spędziliśmy dużo czasu na koncepcjach sieci Docker,
‫w tym na udostępnianiu portów na hoście sieci fizycznej za pomocą -p. Idea Dockera skupiająca się na rozsądnych
‫wartościach domyślnych, w których nazywa się to bateriami, ale wymiennymi.
‫Jak w przypadku lokalnych dev i testów, prawdopodobnie możesz sobie poradzić z ustawieniami domyślnymi, ale wszystko jest zmienne.
‫Następnie dowiedzieliśmy się o poleceniu portu kontenera, który jest szybkim sposobem sprawdzenia
‫portów odsłoniętych dla poszczególnych kontenerów.
‫Następnie zepsuliśmy pakiety poruszające się po sieciach wirtualnych i ich relacje z innymi sieciami wirtualnymi
‫oraz sposób, w jaki wchodzą i wychodzą z komputera Docker.
‫Są to więc naprawdę dobre koncepcje do zrozumienia, gdy w następnym wykładzie wskakujemy do rzeczywistych elementów
‫CLI.