Tworzenie sieci bridge i komunikacja między kontenerami Docker
Wprowadzenie
Docker umożliwia uruchamianie aplikacji w izolowanych środowiskach zwanych kontenerami.
Aby kontenery mogły się ze sobą komunikować, należy je podłączyć do wspólnej sieci – najczęściej typu bridge.
Tworzenie własnej sieci bridge
Domyślnie Docker tworzy sieć bridge
, ale możesz stworzyć własną, nazwijmy ją np. moja_siec
:
docker network create \
--driver bridge \
moja_siec
Teraz możesz uruchamiać kontenery, podłączając je do tej sieci:
docker run -d --name kontener1 --network moja_siec alpine sleep infinity
docker run -d --name kontener2 --network moja_siec alpine sleep infinity
Kontenery w tej samej sieci mogą komunikować się po nazwie hosta (np. ping kontener2
z poziomu kontener1
).
Komunikacja i instalacja narzędzi w kontenerze
Czasami potrzebujemy zainstalować dodatkowe narzędzia w kontenerze, aby umożliwić np. wykonywanie komend Dockera z jego wnętrza (np. w przypadku użycia Docker-in-Docker).
Przykład komendy instalującej Dockera i OpenRC w kontenerze jdownloader-2
(opartym na Alpine Linux):
docker exec jdownloader-2 apk add --update docker openrc
Uwaga: To działa tylko jeśli kontener jest oparty na Alpine. W innych przypadkach użyj odpowiedniego menedżera pakietów, np. apt
w Ubuntu/Debian.
Przykład komunikacji między kontenerami
Jeśli chcesz, aby kontener A uruchamiał polecenia w kontenerze B, możesz zamontować gniazdo Dockera:
docker run -v /var/run/docker.sock:/var/run/docker.sock \
-it --network moja_siec \
--name zarzadzacz \
alpine sh
Wewnątrz kontenera zarzadzacz
możesz teraz uruchamiać komendy typu:
docker exec jdownloader-2 apk add --update curl
czyli komunikować się z innymi kontenerami poprzez wspólne gniazdo Dockera.
Podsumowanie
- Twórz własne sieci bridge dla lepszej kontroli.
- Korzystaj z nazw kontenerów jako hostów w jednej sieci.
- Zachowaj ostrożność przy uruchamianiu Dockera w Dockerze (DinD).
- Zawsze dobieraj odpowiedni menedżer pakietów do systemu bazowego kontenera.