Tworzenie sieci
Konfiguracja sieci Dockera
Sieci Dockera służą do kontrolowania sposobu, w jaki kontenery komunikują się między sobą. Prawidłowe zaprojektowanie sieci jest jednym z kluczowych elementów bezpiecznego i przewidywalnego środowiska kontenerowego.
Stosowanie co najmniej dwóch oddzielnych sieci pozwala na:
- logiczną separację ruchu publicznego i wewnętrznego
- ograniczenie ekspozycji usług wrażliwych (np. baz danych)
- spójne i powtarzalne wdrażanie aplikacji
- łatwiejsze utrzymanie i debugowanie środowiska
W tym modelu wykorzystujemy dwa typy sieci:
proxy– sieć zewnętrzna przeznaczona dla reverse proxy (Caddy) oraz aplikacji wystawianych publicznieinternal– sieć wewnętrzna przeznaczona wyłącznie do komunikacji pomiędzy kontenerami (np. aplikacja ↔ baza danych)
Takie podejście zapewnia bezpieczne i spójne korzystanie z Dockera w środowisku produkcyjnym.
Sprawdzenie istniejących sieci
Wyświetlamy listę dostępnych sieci Dockera:
docker network ls
Tworzenie sieci proxy
Jeśli sieć proxy nie istnieje, tworzymy ją:
docker network create proxy
Sieć proxy służy do komunikacji kontenera Caddy z aplikacjami webowymi, które mają być wystawione na zewnątrz.
Tworzenie sieci internal
Jeśli sieć internal nie istnieje, tworzymy ją:
docker network create internal
Sieć internal służy do komunikacji wewnętrznej pomiędzy kontenerami i nie powinna być używana do ekspozycji usług publicznych.
Weryfikacja utworzonych sieci
Sprawdzamy, czy obie sieci są dostępne:
docker network ls | egrep 'proxy|internal'
Deklarowanie sieci w Docker Compose
W plikach compose.yaml deklarujemy sieci jako zewnętrzne:
networks:
proxy:
external: true
internal:
external: true
Podpinanie kontenerów do sieci
Przykład aplikacji webowej wystawianej przez Caddy i komunikującej się z bazą danych:
services:
app:
image: example/app:latest
networks:
- proxy
- internal
db:
image: postgres:17
networks:
- internal
networks:
proxy:
external: true
internal:
external: true
Zasady projektowe
- Kontener Caddy podpinamy do sieci
proxy - Aplikacje publiczne podpinamy do
proxy - Usługi bazodanowe i pomocnicze podpinamy wyłącznie do
internal - Komunikację aplikacja ↔ baza realizujemy przez sieć
internal - Do reverse proxy używamy nazw serwisów Dockera jako hostów
Takie podejście minimalizuje powierzchnię ataku i upraszcza utrzymanie infrastruktury.