2015-04-19 12 views
34

Ecco la mia comprensione della finestra mobile composizione:Come funzionano i collegamenti e il ridimensionamento nella finestra mobile?

  • È possibile "scala", un servizio per l'esecuzione in più contenitori in una sola volta.
  • Se si collega il servizio da A a servizio di B, servizio di A ha l'accesso a un servizio in esecuzione container B.

la mia comprensione corretta, e se sì, da dove viene un collegamento collegare se ci sono più contenitori che gestiscono il servizio?

risposta

29

Prima di tutto chiarirei che, per impostazione predefinita, con o senza il collegamento di un contenitore con un altro, tutto il contenitore ha visibilità su altri contenitori in esecuzione nello stesso host (utilizzando l'IP del contenitore). È possibile modificare questo comportamento utilizzando il flag icc=true nel daemon docker.

Per quanto riguarda i collegamenti con la finestra mobile-compose, questi vengono generati quando viene creato il contenitore con i collegamenti. Vediamolo con un esempio. Utilizzando questa finestra mobile-compose.yml

web: 
    build: . 
    command: python app.py 
    ports: 
    - "5000:5000" 
    volumes: 
    - .:/code 
    links: 
    - redis 
redis: 
    image: redis 

Dopo aver eseguito docker-compose up -d il contenitore web_1 è collegata con il contenitore con redis_1:

 (...) 
     "Links": [ 
     "/compose_redis_1:/compose_web_1/compose_redis_1", 
     "/compose_redis_1:/compose_web_1/redis", 
     "/compose_redis_1:/compose_web_1/redis_1" 
    ], (...) 

Ora vogliamo scalare il servizio redis utilizzando docker-compose scale redis=2. Dopo averlo eseguito (e creato un nuovo contenitore redis_2), i collegamenti in web_1 rimangono invariati.

 (...) 
     "Links": [ 
     "/compose_redis_1:/compose_web_1/compose_redis_1", 
     "/compose_redis_1:/compose_web_1/redis", 
     "/compose_redis_1:/compose_web_1/redis_1" 
    ], (...) 

E 'necessario fermarsi, rimuovere e correre web_1 per vedere questi collegamenti creati:

docker-compose stop web 
docker-compose rm web 
docker-compose run -d web 
docker inspect compose_web_run_2 
(...)  "Links": [ 
     "/compose_redis_1:/compose_web_run_2/compose_redis_1", 
     "/compose_redis_2:/compose_web_run_2/compose_redis_2", 
     "/compose_redis_1:/compose_web_run_2/redis", 
     "/compose_redis_1:/compose_web_run_2/redis_1", 
     "/compose_redis_2:/compose_web_run_2/redis_2" 
    ],(...) 

E la /etc/hosts di web_1 contenitore:

172.17.0.24 7be2dabea910 
127.0.0.1 localhost 
::1 localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
172.17.0.21 compose_redis_1 8a1297a5b3e4 
172.17.0.23 compose_redis_2 069dd46836aa 
172.17.0.21 redis 8a1297a5b3e4 compose_redis_1 
172.17.0.21 redis_1 8a1297a5b3e4 compose_redis_1 
172.17.0.23 redis_2 069dd46836aa compose_redis_2 

Quindi, per generare il nuovo collegamenti, è necessario arrestare, rimuovere ed eseguire nuovamente il contenitore.

+0

Quindi se il servizio A è collegato al servizio B, il servizio A ha accesso a TUTTE le istanze del servizio B? – Gaelan

+0

L'accesso agli IP del contenitore ha sempre accesso, ma se si accede come con l'opzione '--link' (cioè con le voci in/etc/hosts, le variabili di ambiente globali ...) sarà necessario ricreare il contenitore di servizio A. –

+1

Questa non è la mia domanda. Il servizio A è collegato a TUTTE le istanze del servizio B o UNA istanza del servizio B? – Gaelan

Problemi correlati