Dużo dodaje się do naszego środowiska Docker, które zostaje pomijane, a następnie usunięte z ostatniego polecenia. Jednym z najważniejszych obiektów jest sieć mostu. Na tym będziemy się skupić. Mówiąc dokładniej, sieci mostów.
Docker ma wiele sterowników związanych z sieciami. Dwa z najważniejszych to kierowca sieciowy i nakładka jeden. Ten ostatni jest używany do trybu Docker Swarm, w którym pojemniki działające nad różnymi węzłami mogą nadal być częścią pojedynczej abstrakcyjnej podsieci. Networking mostów jest jednak tym, który nas tutaj interesuje.
Aby utworzyć nową sieć Docker o nazwie My Network i sprawdzić ją, uruchom:
$ Docker Network Utwórz -d most My NetworkZobaczysz między innymi maskę podsieci i domyślną bramę.
…Każdy kontener, który jest połączony z tą siecią, otrzyma adres IP w zakresie od 172.18.0.2 do 172.18.255.254. Spróbujmy utworzyć kilka kontenerów w tej sieci:
$ Docker Run -dit --Name Container1 --Network my -Network Ubuntu: najnowszyJeśli teraz uruchomisz, sprawdź My-Network.
$ Docker Inspect My-NetworkJeśli utworzysz inną sieć My-Network2, będzie miała inną maskę podsieciową taką jak 172.19.0.0/16 i pojemniki na nim zostaną odizolowane z pojemników w innych sieciach. Idealnie, chcesz jednej sieci na aplikację, więc każda aplikacja jest bezpieczna i odizolowana od siebie.
Jak Compose tworzy sieć
Docker komponuje pomysł uruchamiania usług dla jednej aplikacji w jednej sieci. Po wdrożeniu aplikacji za pomocą pliku komponują Docker, nawet jeśli nie ma wzmianki o określonych parametrach sieciowych, Docker Compose utworzy nową sieć mostu i wdroży kontener na tej sieci.
Jeśli kompozycja dokera.YML jest w katalogu MY-App, nazwa katalogu zostanie użyta do nazwy sieci, a także kontenerów zamontowanych na niej. Na przykład, jeśli utworzę katalog:
$ mkdir my-appI dodaj następujące treści do kompozycji dokera.plik YML:
Wersja: „3”Zauważ, że nie ujawniliśmy żadnych portów. Wdrażajmy tę aplikację:
$ Docker -Compose Up -dTworzy to nową sieć o nazwie My-App_default za pomocą sterownika sieciowego Bridge, który omówiliśmy wcześniej.Możesz wymienić wszystkie sieci w swojej osobistej konfiguracji za pomocą Docker Network LS, a następnie wybrać interfejs sieciowy, który pasuje do nazwy katalogu. Po uzyskaniu nazwy sieci możesz dokować sprawdzić, aby zobaczyć wszystkie kontenery, które są częścią tej sieci wraz z ich indywidualnymi adresami IP i maską podsieci.
Jeśli utworzymy inny kontener, używając bezpośrednio CLI (nie jest to zalecane dla rzeczywistych przypadków użycia) w tej sieci, możemy faktycznie porozmawiać z naszą usługą My-Nginx.
$ Docker Run -dit --Name Container4 --Network My -App_Default Ubuntu: najnowszyTo wydrukuje plik HTML ze znanymi fragmentami, takimi jak „Welcome to Nginx” widoczny. Serwer WWW Nginx jest osiągalny z sieci bez konieczności publikowania jakichkolwiek portów! Co ważniejsze, nie musisz nawet do niego dotrzeć za pomocą prywatnego adresu IP, możesz po prostu nazwać go nazwą hosta (to nazwa kontenera, jak pokazano w Docker PS).
Podczas uruchamiania bazy danych i podłączania jej z frontendą, nie będziesz musiał w ogóle publikować portu bazy danych. Zamiast tego możesz dotrzeć do DB z serwera WWW, wywołując jego przewidywalną nazwę hosta. Nawet gdy Docker Compose jest uruchamiany gdzie indziej, a IP i podsieć mogą się teraz różnić, kontenery nadal będą mogły ze sobą rozmawiać.
Oczywiście, aby opublikować port w świecie zewnętrznym, napisalibyśmy coś w rodzaju następujących:
Wersja: „3”Teraz ludzie mogą uzyskać dostęp do serwera WWW z portu 8080 w IP twojego hosta Docker. Może to być na przykład publiczny adres IP twojego VPS lub po prostu LocalHost, jeśli prowadzisz Docker na komputerze stacjonarnym. Po raz kolejny naciskam, nie musisz wystawiać żadnych portów dla kontenera bazy danych, ponieważ serwer WWW może z nim rozmawiać, a tym samym zmniejsza ryzyko narażania baz danych na Internet.
Kiedy sprowadzasz aplikację, używając:
$ Docker-Compose DownTa niestandardowa sieć mostów wraz ze wszystkimi efemerycznymi pojemnikami, które zostały utworzone i dołączone do niej, używając kompozycji dokera.plik YML zostanie usunięty. Pozostawienie środowiska dokera w czystym stanie.
Definiowanie własnej sieci
Komponowanie pozwala zdefiniować własną definicję sieci. Obejmowałoby to opcje maski podsieci, adresy IPv6, między innymi. To, co się dzieje, polega na tym, że mamy sieci najwyższego poziomu, takie jak usługi lub wersja. Ten klucz nie ma niepodzielnego. W kluczu sieci możemy teraz zdefiniować różne atrybuty sieci, na razie zapewnimy to proste i po prostu wspomnieć, że powinno używać kierowcy mostu.
Wersja: „3”Teraz każdy kontener może łączyć się z wieloma sieciami, więc w sekcji Usług wspominamy nazwę tej niestandardowej sieci. Klucz sieci tutaj oczekuje listy sieci.
Wersja: „3”Na koniec kolejność definiowania sieci, a następnie używanej w definicji usługi, jest istotna. Więc cały plik YML będzie wyglądał mniej więcej tak:
Wersja: „3”Pisząc własne definicje sieciowe, możesz odnieść się do oficjalnej dokumentacji. Szybkie spojrzenie na najwyższym poziomie sieci klucza odwiedź ten link i aby uzyskać klucz do sieci usług.
Możesz także spróbować określić podsieci w definicji sieci najwyższego poziomu, aby usługi mogły mieć z góry określony zakres adresów IP.