Docker umożliwia serwerom z wielu kontenerów łączenie się ze sobą za pośrednictwem łączy i odnajdywania usług . Jednak z tego, co widzę, to wykrywanie usług odbywa się lokalnie. Chciałbym wdrożyć usługę, która korzysta z innych usług hostowanych na innym komputerze.
Było kilka podejść do rozwiązania tego problemu w Dockerzejumpers
, takich jak CoreOS , lokalne usługi hosta, które zasadniczo proxy dla innej maszyny oraz cała masa projektów github do zarządzania wdrożeniami Dockera, które wydają się próbować wspierać ten przypadek użycia .
Biorąc pod uwagę tempo rozwoju, trudno jest śledzić aktualne najlepsze praktyki. Dlatego moje pytanie brzmi zasadniczo:
- Jaka (jeśli istnieje) jest obecnie dominująca metoda łączenia między hostami w Dockerze i
- Czy są jakieś plany dotyczące obsługi tej funkcjonalności bezpośrednio w systemie Docker?
AKTUALIZACJA 3
Libswarm został przemianowany na swarm i jest teraz oddzielną aplikacją.
Oto demo strony github do wykorzystania jako punkt wyjścia:
AKTUALIZACJA 2
Oficjalnym podejściem jest teraz użycie libswarm, zobacz demo tutaj
AKTUALIZACJA
Jest całkiem niezłe sedno komunikacji hostów openvswitch w dockerze przy użyciu tego samego podejścia.
Aby umożliwić wykrywanie usług, istnieje interesujące podejście oparte na DNS o nazwie skydock .
Jest też screencast .
To także fajny artykuł wykorzystujący te same elementy układanki, ale dodający również vlany na wierzchu:
http://fbevmware.blogspot.it/2013/12/coupling-docker-and-open-vswitch.html
Patchowanie nie ma nic wspólnego z solidnością rozwiązania. Docker jest właściwie tylko rodzajem DSL w kontenerach Linuksa, a oba rozwiązania w tych artykułach po prostu omijają niektóre automatyczne ustawienia Dockera i wracają bezpośrednio do kontenerów Linuksa.
Możesz więc bezpiecznie korzystać z rozwiązań i poczekać, aż będziesz mógł to zrobić w prostszy sposób, gdy Docker je zaimplementuje.
źródło
Weave to nowa technologia sieci wirtualnej Docker, która działa jako wirtualny przełącznik Ethernet przez TCP / UDP - wszystko, czego potrzebujesz, to kontener Docker z uruchomionym Weave na hoście.
Co tu jest interesujące
Prowadzi to do ciekawych scenariuszy, takich jak
Na przykład istnieje przykładowy przewodnik dotyczący tworzenia wielowęzłowego klastra Cassandra na laptopie i kilku hostach w chmurze (EC2) z dwoma poleceniami na host. Uruchomiłem klaster CoreOS z AWS CloudFormation, zainstalowałem splot na każdym z elementów / home / core, a także moją maszynę wirtualną z laptopem vagrant docker i utworzyłem klaster w niecałą godzinę. Mój laptop ma zaporę ogniową, ale Weave wydawał się być w porządku, po prostu łączy się ze swoimi rówieśnikami EC2.
źródło
Aktualizacja
Docker 1.12 zawiera tak zwany tryb roju, a także dodaje
service
abstrakcję. Prawdopodobnie nie są wystarczająco dojrzałe dla każdego przypadku użycia, ale sugeruję, abyś je obserwował. Tryb roju pomaga przynajmniej w konfiguracji wielu hostów, co niekoniecznie ułatwia łączenie. Wewnętrzny serwer DNS platformy Docker (od wersji 1.11) powinien pomóc ci uzyskać dostęp do nazw kontenerów, jeśli są dobrze znane - co oznacza, że wygenerowane nazwy w kontekście Swarm nie będą tak łatwe do zaadresowania.Wraz z wydaniem Docker 1.9 uzyskasz wbudowaną obsługę wielu hostów . Dostarczają również przykładowego skryptu ułatwiającego obsługę działającego klastra.
Będziesz potrzebował sklepu K / V (np. Consul), który umożliwia udostępnianie stanu w różnych silnikach Docker na każdym hoście. Każdy silnik Dockera musi być skonfigurowany z tym sklepem K / V, a następnie możesz użyć Swarm do połączenia swoich hostów.
Następnie utwórz nową sieć nakładek w następujący sposób:
Kontenery można teraz uruchamiać z nazwą sieci jako parametrem uruchamiania:
Można je również podłączyć do sieci, gdy są już uruchomione:
Więcej szczegółów znajduje się w dokumentacji .
źródło
Poniższy artykuł opisuje ładnie jak połączyć kontenery dockerowe na wielu hostach: http://goldmann.pl/blog/2014/01/21/connecting-docker-containers-on-multiple-hosts/
źródło
Możliwe jest połączenie kilku podsieci Dockera razem za pomocą Open vSwitch lub Tinc. Przygotowałem Gists, aby pokazać, jak to zrobić:
Zaletą, jaką widzę stosując to rozwiązanie zamiast
--link
opcji i wzorca ambasadora, jest to, że uważam je za bardziej przejrzyste: nie ma potrzeby posiadania dodatkowych kontenerów, a co ważniejsze, nie ma potrzeby eksponowania portów na hoście. Właściwie myślę o--link
opcji bycia tymczasowym hackiem, zanim Docker uzyska ładniejszą historię o konfiguracjach z wieloma hostami (lub wieloma demonami).Uwaga: wiem, że istnieje inna odpowiedź wskazująca na moje pierwsze streszczenie, ale nie mam wystarczającej karmy, aby edytować lub komentować tę odpowiedź.
źródło
Jak wspomniano powyżej, Weave jest zdecydowanie realnym rozwiązaniem do łączenia kontenerów Docker między hostami. Opierając się na moim własnym doświadczeniu z nim, skonfigurowanie go jest dość proste. Ma teraz również usługę DNS, do której można adresować kontenera za pomocą jego nazw DNS.
Z drugiej strony istnieje Flannel firmy CoreOS i Opencontrail firmy Juniper do okablowania kontenerów na hostach.
źródło
Wygląda na to, że docker swarm
1.14
umożliwia:przypisanie nazwy hosta do kontenera za pomocą
--hostname
tagu, ale nie udało mi się to zrobić, kontenery nie są w stanie pingować się nawzajem przez przypisane nazwy hostów.przypisywanie usług do korzystania z maszyny
--constraint 'node.hostname == <host>'
źródło