Ausführen mehrerer Anwendungen in einem docker-container
Diese Frage ist Teil meines anhaltenden exploration von Docker und in gewisser Weise folgt bis auf eine meiner frühere Fragen. Ich habe jetzt verstanden, wie man einen full application stack " (effektiv eine mini-VPS) arbeiten durch die Verknüpfung einer Reihe von Docker-Containern. Zum Beispiel könnte man erstellen Sie einen Stapel, bietet Apache + PHP5 mit einem Bündel von Erweiterungen + Redis + MemCached + MySQL laufen alle auf top von Ubuntu mit oder ohne zusätzliche Daten-container, um es einfach zu serialisieren, die user-Daten.
Alles sehr schön und elegant. Aber ich kann mir nicht helfen, aber Frage mich,... . 5 Container zu laufen, dass kleinen VPS (ich zähle 5 nicht 6 seit Apache + PHP5 gehen in einen container). Also angenommen ich habe 100 solche VPS laufen? Das bedeutet, dass ich 500 Container läuft!!! Ich verstehe die Argumente hier - es ist einfach zu neu erstellen app-stacks, aktualisieren Sie eine Komponente des stack etc. Aber gibt es keinen unnötigen Overhead für den Betrieb dieser Weg?
Angenommen, ich habe diese
- Legte alle meine apps in einem container
-
Schreiben Sie eine kleine shell-Skript
!/bin/bash
service memcached starten
service redis-server starten
....
service apache2 start
während:
tun
:
getan
In meinem Dockerfile ich habe
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"]
Habe ich dann bekommen, dass der container bis & running
docker run -d -p 8080:80 -v /var/droidos/site:/var/www/html -v /var/droidos/logs:/var/log/apache2 droidos/minivps
und ich bin im Geschäft. Wenn ich jetzt heruntergefahren werden soll, dass der container programmgesteuert ich kann so tun, durch ausführen eines einzelnen Befehl Andockfenster.
Gibt es viele Fragen ähnlicher Art zu finden sein, wenn Sie eine Google für Sie. Abgesehen von den Argumenten, die ich haben oben wiedergegeben ist eine der häufigsten Begründungen für die one-app-pro-container-Ansatz ", das ist die Art, wie Docker ist entworfen, um zu arbeiten". Was würde ich gerne wissen,
- Was sind die Nachteile zu laufen x100 Instanzen von N-verknüpften Container - und Nachteile von Weg, Geschwindigkeit, Speichernutzung etc auf dem host?
- Was falsch ist mit dem, was ich hier getan hast?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Container ist im Grunde ein Prozess. Es gibt kein technisches Problem mit dem 500 Prozesse auf eine decent-sized Linux-system, obwohl Sie teilen sich die CPU(s) und Speicher.
Die Kosten eines Containers über einen Prozess einige zusätzliche kernel-Ressourcen zu verwalten, namespaces, file-Systeme und control-Gruppen, und einige management-Strukturen innerhalb des Docker-daemon, besonders zu behandeln
stdout
undstderr
.Den namespaces eingeführt, um isolation, so dass ein container nicht stören andere. Wenn Ihr Gruppen von 5 Behälter bilden eine Einheit, die nicht braucht diese isolation, dann können Sie teilen sich die Netzwerk-namespace verwenden
--net=container
. Es gibt keine Möglichkeit die derzeit zu teilen, cgroups, AFAIK.Was falsch ist mit dem, was Sie vorschlagen:
stdout
undstderr
werden vermischt, für die fünf Prozesse--net=another_container
Sie sind in den gleichen Netzwerk-namespace, mit dem gleichen virtuellen Ethernet-Gerät und loopback-Gerät. Sie können miteinander sprechen, aber das gilt auch für--net=bridge
die bekommen Sie standardmäßig. Das spürbar, was über die gemeinsame Nutzung im Netzwerk ist Sie zu teilen, IP-Adressen und ports. Und ein bisschen weniger system-Ressourcen zu, was Sie gefragt haben.@Bryan ' s Antwort ist solide, vor allem in Bezug auf die Gemeinkosten für einen container, der gerade läuft ein Prozess niedrig.
Sagte, Sie sollten zumindest Lesen Sie die Argumente auf https://phusion.github.io/baseimage-docker/, wodurch ein Fall für Behälter mit mehreren Prozessen. Ohne Sie, Andockfenster Licht auf die Bereitstellung für:
baseimage-docker läuft der init-Prozess, feuert ein paar Prozesse neben der Haupt-und eines in den Behälter.
Für einige Zwecke ist dies eine gute Idee, aber auch bewusst sein, dass zum Beispiel mit einem cron-daemon und einen syslog-daemon pro container fügt ein wenig mehr overhead. Ich davon aus, dass das docker-ökosystem reift, sehen wir bessere Lösungen, die nicht brauchen, dieses.