Questa domanda è parte della mia continua esplorazione di Docker e in qualche modo segue uno dei miei earlier questions. Ora ho capito come si possa ottenere uno stack completo di applicazioni (in pratica un mini VPS) lavorando collegando tra loro una serie di container Docker. Ad esempio, è possibile creare uno stack che fornisce Apache + PHP5 con un fascio di estensioni + Redis + MemCached + MySQL tutti in esecuzione su Ubuntu con o senza un contenitore dati aggiuntivo per semplificare la serializzazione dei dati utente.Esecuzione di più applicazioni in un contenitore finestra mobile
Tutto molto bello ed elegante. Tuttavia, non posso fare a meno di chiedermi ... 5 contenitori per eseguire quel piccolo VPS (ne conto 5 non 6 poiché Apache + PHP5 va in un contenitore). Quindi supponiamo di avere 100 VPS di questo tipo in esecuzione? Ciò significa che ho 500 contenitori in esecuzione! Capisco gli argomenti qui - è facile comporre nuovi stack di app, aggiornare un componente dello stack ecc. Ma non ci sono inutili spese generali per operare in questo modo?
Supponiamo che ho fatto questo
- Mettere tutte le mie applicazioni all'interno di un contenitore
Scrivi un piccolo script di shell
!/Bin/bash servizio memcached iniziare Redis-server del servizio di avvio .... servizio apache2 start mentre: do : terminato
Nel mio Dockerfile devo
ADD start.sh /usr/local/bin/start.sh
RUN chmod +x /usr/local/bin/start.sh
....
ENTRYPOINT ["/bin/bash"]
CMD ["/usr/local/bin/start.sh"]
Allora ottengo quel contenitore fino & esecuzione
docker run -d -p 8080:80 -v /var/droidos/site:/var/www/html -v /var/droidos/logs:/var/log/apache2 droidos/minivps
e io sono nel mondo degli affari. Ora, quando voglio chiudere il contenitore a livello di codice, posso farlo eseguendo un singolo comando di finestra mobile.
Ci sono molte domande di natura simile da trovare quando un Google è per loro. Oltre agli argomenti che ho riprodotto sopra, uno dei motivi più comuni indicati per l'approccio one-app-per-container è "questo è il modo in cui Docker è progettato per funzionare". Cosa mi piacerebbe sapere
- Quali sono gli svantaggi di eseguire istanze x100 di N contenitori collegati - compromessi a titolo di velocità, utilizzo della memoria ecc sull'host?
- Cosa c'è di sbagliato in ciò che ho fatto qui?
grazie per la risposta. Mi chiedo se è possibile chiarire due cose: 1. I documenti dicono "Dice Docker di mettere i processi di questo contenitore dentro ... ei processi sui due contenitori saranno in grado di connettersi tra loro attraverso l'interfaccia di loopback." Questo significa che con --net apache sarò in grado di accedere, ad esempio, memcached in esecuzione in un altro contenitore su localhost? Con la rotta del contenitore one-app-per-hai ancora bisogno di script per avviare e collegare i contenitori + uno script per spegnere e rimuovere tutti i contenitori. Quindi sei di una e mezza dozzina di altre? – DroidOS
1. Sì, quando si utilizza '--net = another_container' vengono inseriti nello stesso spazio dei nomi di rete, con lo stesso dispositivo Ethernet virtuale e il dispositivo di loopback. Possono parlare tra loro, ma questo vale anche per '--net = bridge' che si ottiene di default. La cosa evidente della condivisione della rete è che condividono gli indirizzi IP e le porte. E usa un po 'meno risorse di sistema, che è quello che hai chiesto. – Bryan
2. Ci sono un sacco di strumenti per controllare i contenitori Docker dall'esterno - vedere http://stackoverflow.com/a/18287169/448734. Quindi non devi fare molto dello scripting da solo. Si noti che questo è un ambiente in rapida evoluzione. – Bryan