2015-04-17 10 views
5

Mam trudności z ustaleniem, jak połączyć kontenery należące do różnych projektów składających się na komponenty dokowane uruchomionych na tym samym hoście.Jak połączyć kontenery dokowane w osobnych instalacjach na tym samym komputerze hosta za pomocą funkcji dokowania?

Powiedzmy, mam zestaw pojemników w Deployment:

[email protected]:~# docker ps | awk '{print $2}' | grep "cl" 
cl-worker:latest 
cl-nginx:latest 
cl-app:latest 
cl-rabbitmq:latest 
cl-memcached:latest 
cl-db:latest 

Wszystkie te pojemniki, gdzie uruchamiane z osobnym pliku konfiguracyjnego deployment-a.yml. Teraz mamy też inną Deployment B, z własnym `rozmieszczania-b.yml:

[email protected]:~# docker ps | awk '{print $2}' | grep "stockagents" 
stockagents-app:latest 

to możliwe, aby uzyskać dostęp do bazy danych (cl-db kontenera) z stockagents-app jakimś specyficznej konfiguracji w deployment-b.yml i/lub deployment-a.yml?

UWAGA: wiem jak to zrobić za pomocą polecenia czystego docker i łączenie pojemników poprzez --link, ale czy istnieje sposób, aby osiągnąć ten sam problem przy użyciu tylko docker-compose i jego pliki konfiguracyjne?

+0

możesz użyć skydnów i regulatora do automatycznej rejestracji dns po utworzeniu kontenera w doku. to jest całkiem fajne. wtedy twoje kontenery mogą odnosić się do siebie po imieniu. – Greg

+0

@Greg fast googling pokazuje, że skydns wymaga 'etcd' do uruchomienia, co z kolei wymaga własnej konfiguracji. Co więcej, mam uruchomiony ubuntu, który domyślnie nie ma włączonego etcd :(Wydaje mi się to wyrafinowanym rozwiązaniem dla ogólnych przypadków komunikacji między hostami między kontenerami –

+0

jest to wyrafinowany problem, ale masz rację? kompozycje, które chcesz "odkryć" nawzajem, czy jest tam tylko jedna instancja dockera, czy też istnieje potencjalnie wiele (rój, flota, k8 itd.)? brzmi to tak, jakbyś chciał czegoś lekkiego .Jeśli jest to pojedynczy doker, być może co potrzebujesz woluminu, z którym każda kompilacja może się połączyć, wiesz, może katalog, który pisze "jestem pod adresem X", a drugi to czyta? – Greg

Odpowiedz

2

Wygląda na to, że najnowsze wersje docker-compose (przynajmniej 1.5.2) mają wsparcie dla pliku "external_links" option w pliku docker-compose.yml, który umożliwia określenie kontenerów uruchomionych poza bieżącą konfiguracją.

Jest to dokładnie funkcja, której szukałem, próbując udostępniać wspólne usługi (na przykład MySQL) między kontenerami w osobnych wdrożeniach.

0

Wygląda na to, że Twoje żądania przerastają możliwości związane z dokowaniem. Musisz zadzierać z narzędziem orkiestracji (mniej lub bardziej złożonym). Używamy również Ubuntu, a dla naszego środowiska SkyDNS + SkyDock wydaje się być dobrym i prostym rozwiązaniem (oczywiście nr etcd). Wdrożenie obejmuje trzy etapy: wystarczy pobrać obrazy, ponownie skonfigurować demon stacji dokującej i uruchomić SkyDNS i SkyDock. Jeśli znasz język rosyjski, możesz znaleźć niezły przewodnik wdrażania here.

Główną zaletą tego rozwiązania jest nowa strefa DNS dostępna w środowisku Docker. Kontenery mogą wywoływać się nawzajem według nazwy. Ale ponieważ wstecznego brakuje SkyDNS, musisz zdać hostów wyraźnie:

web: 
    image: django 
    hostname: web.django.dev.skydns.local 
    build: ./webapp 
    ports: 
    - "8000:8000" 
    environment: 
    - DEBUG=true 
    - SEND_EMAILS=false 

W ten sposób Twój pojemnik będzie dostępny przez nazwę web.django.dev.skydns.local od wewnątrz dowolnego pojemnika.

+0

Czy to prawda, że ​​'SkyDNS' nie wymaga' etcd'? Pierwsze linie sekcji "' Setup/Install' na ich stronie głównej "(https://github.com/skynetservices/skydns#setup-install) wyraźnie wspominają o konfiguracji użycia' etcd'. Poza tym szybko przejrzałem artykuł, o którym wspomniałeś, a dostarczone tam rozwiązanie wymaga uruchomienia dwóch różnych kontenerów wraz z istniejącą konfiguracją. W każdym razie, dziękuję za wzmiankę o tych usługach, prawdopodobnie spojrzę dalej w tym kierunku 'autoadministracji usług' –

+0

@AndrewDruchenko co wskazałeś to' '' SkyDNS2'''. Ale proponuję najpierw wypróbować starszą wersję '' 'SkyDNS''' (tak naprawdę opisano ją w artykule). Nie wymaga 'etcd'. –

Powiązane problemy