Docker komponuj sieci mostów

Docker komponuj sieci mostów
Docker Compose to łatwy sposób na wdrożenie aplikacji wielokrotnego. Automatyzuje wiele przechowywania rezerwacji, tworzenia sieci i zarządzania zasobami aplikacji w jednym zgrabnym kompozycie dokera.plik YML. Możesz podnieść aplikację, uruchamiając w górę Docker-Compose i odwrócić ją za pomocą Docker-Compose.

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 Bridge Network

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 Network
$ Docker Inspect My-Network

Zobaczysz między innymi maskę podsieci i domyślną bramę.


„Config”: [

„Podsieć”: „172.18.0.0/16 ",
„Gateway”: „172.18.0.1 "

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: najnowszy
$ Docker Run -dit --Name Container2 --Network my -Network Ubuntu: najnowszy

Jeśli teraz uruchomisz, sprawdź My-Network.

$ Docker Inspect My-Network

„Kontenery”:
„8CE5CD67E6AED180B5D0B6B0FCD597175D6154C9208DAA9DE304AEC94757E99B”:
„Nazwa”: „Container1”,
„Endpointid”: „93D020D22172D6C98A0B88E78A7A01F6D1A3D44B983E7454FBA7C1F1BE5FAE9D”,
„Macaddress”: „02: 42: AC: 12: 00: 02”,
„IPv4address”: „172.18.0.2/16 ",
„IPv6address”: „”
,
„AF1434DF6F86D2DF96ACA1D7348DD6C815A4989EC07FB0F3CFEA95D4A38B4F74”:
„Nazwa”: „Container2”,
„Endpointid”: „3A5F57639C71685A10584FD392C20ABC5AE693684860BEF486404D26B332395A”,
„Macaddress”: „02: 42: AC: 12: 00: 03”,
„IPv4address”: „172.18.0.3/16 ",
„IPv6address”: „”

Jeś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-app
$ CD MY-App
$ vim Docker-Compose.yml

I dodaj następujące treści do kompozycji dokera.plik YML:

Wersja: „3”
Usługi:
My-Nginx:
Zdjęcie: nginx: najnowszy

Zauważ, że nie ujawniliśmy żadnych portów. Wdrażajmy tę aplikację:

$ Docker -Compose Up -d

Tworzy 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: najnowszy
$ Docker Exec -it Container4 Bash
root@a32acdf15a97:/# curl http: // my -pp_my-nginx_1

To 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”
Usługi:
My-Nginx:
Zdjęcie: nginx: najnowszy
Port:
- „8080: 80”

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 Down

Ta 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”
Sieci:
moja sieć:
Kierowca: most

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”
Usługi:
My-Nginx:
Zdjęcie: nginx: najnowszy
Sieci:
- moja sieć
- jakiś inny sieć # to kolejna sieć, którą mogłeś stworzyć.

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”
Usługi:
My-Nginx:
Zdjęcie: nginx: najnowszy
Sieci:
- moja sieć
Sieci:
moja sieć:
Kierowca: most

Dalsza informacja

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.