Hallo Community,
ich bin vor einiger Zeit auf http://www.docker.com gestoßen. Ich
verstehe noch nicht ganz im Detail, wie Docker Container funktionieren,
habe aber den Eindruck, dass sie ein sinnvolles Tool sein könnten, um
z.B. zwischen verschiedenen Entwicklungsumgebungen hin und her zu
schalten, die sonst wegen strikter Annahmen über ihren Verzeichnisbaum
o.ä. nicht parallel installiert werden können.
Was ich aber noch nicht verstehe, ist das Funktionsprinzip der
Container. Ich kann das selbe Dockerfile sowohl unter Windows als auch
uner verschiedenen Linuxversionen ausführen. Woher nehmen die
Applikationen ihre gemeinsame Grundlage? Werden Systemaufrufe emuliert
(wie es Wine macht), oder installiert Docker eine Virtuelle Maschine,
die dann auf jedem Host dem Gast dasselbe System bietet?
Mir ist das Verständnis dieser Grundlagen wichtig, um den Overhead
abschätzen zu können, wenn ich 5-10 nahezu identische Docker-Apps
installiere.
Danke
Daniel
Wenn ich meine rudimentären Docker-Kenntnisse mal herauskrame:
Docker ähnelt im Prinzip mehr einer mehrlagigen chroot-Umgebung als
einer virtuellen Maschine. Der Kernel wird nicht emuliert, sondern
bleibt nativ. Es wird "nur" dafür gesorgt, dass die einzelnen Prozesse
getrennte Dateisysteme und keine anderen Docker-Prozesse sehen.
Daher kann man in einer Linux-Instanz auch keine Windows-Applikationen
ausführen und umgekehrt.
Es kann aber übergreifende Dockerfiles geben: Diese sagen nur, welche
Docker-Images übereinandergelegt werden sollen, also z.B. "Basis-OS",
"Mysql", "Apache", ... Wie diese Images aber im Detail aussehen, ist von
Betriebssystem zu Betriebssystem unterschiedlich, und sie müssen auch
zueinander passen.
Kleiner Nachtrag:
Daniel schrieb:> zwischen verschiedenen Entwicklungsumgebungen hin und her zu> schalten,
Mehrere GUI-Anwendungen (wie IDEs) über Docker zu virtualisieren ist
nicht so ganz einfach. Üblicherweise kommt man eben nicht auf eine
Konsole etc. wie bei "echten" Virtualisierungen. Was aber möglich ist,
auf den Docker-Container über eine Netzwerkschnittstelle zuzugreifen.
Hierüber kann man dann über X11 laufen lassen.
Achim H. schrieb:> Es kann aber übergreifende Dockerfiles geben: Diese sagen nur, welche> Docker-Images übereinandergelegt werden sollen, also z.B. "Basis-OS",> "Mysql", "Apache", ... Wie diese Images aber im Detail aussehen, ist von> Betriebssystem zu Betriebssystem unterschiedlich, und sie müssen auch> zueinander passen.
Heißt dies, dass z.B. ein Basis-OS einer Docker-Installation unter
Ubuntu nicht identisch ist mit dem Basis-OS einer Docker-Installation
unter Fedora?
Worin genau besteht eigentlich der Vorteil von Docker gegenüber z.B. LXC
oder Virtualbox, wenn auch Docker jeweils ein komplettes OS benötigt?
Kranzi schrieb:> Docker benötigt einen Linux Kernel. Unter Windows laufen Container in> einer virtuellen Maschine.
Danke, das erklärt einiges meiner Verständnisperobleme.
Daniel
Docker emuliert nicht Prozessor und Chipsatz. Dadurch soll es wohl
wesentlich schneller sein. Stimmt wohl auch. Ich kann hier durchaus 10
Container laufen lassen.
Andreas R. schrieb:> Docker emuliert nicht Prozessor und Chipsatz.
LXC und Virtualbox emulieren ebenfalls nicht Prozessor oder Chipsatz.
Nur qemu emuliert andere Prozessoren.
Andreas R. schrieb:> Ich kann hier durchaus 10 Container laufen lassen.
Ich kann auch 10 LXC container oder 10 virtuelle Maschinen gelichzeitig
laufen lassen. Benchmarks zeigen im Rahmen ihrer Schwankungen dieselbe
Performance im Vergleich zu Docker.
Also, was ist nun wirklich der Vorteil von Docker? Ist es lediglich ein
Verwaltungstool und macht im Hintergrund dasselbe wie LXC?
Daniel
Daniel schrieb:> Also, was ist nun wirklich der Vorteil von Docker?
es braucht weniger Ressourcen, weil es einige dinge mit dem Hostsystem
teil. ( ich denke nicht das jeder Docker sein eigens Netzwerk hat, das
wird vom Hostsystem genutzt ).
Aber den Hype um Docker und Co kann ich auch nicht nachvollziehen.
Daniel schrieb:> Andreas R. schrieb:>> Docker emuliert nicht Prozessor und Chipsatz.>> LXC und Virtualbox emulieren ebenfalls nicht Prozessor oder Chipsatz.> Nur qemu emuliert andere Prozessoren.
Da frag ich mich doch wieso ich in Virtualbox nen Chipsatz in den
VM-Einstellungen wählen kann...
>> Andreas R. schrieb:>> Ich kann hier durchaus 10 Container laufen lassen.>> Ich kann auch 10 LXC container oder 10 virtuelle Maschinen gelichzeitig> laufen lassen. Benchmarks zeigen im Rahmen ihrer Schwankungen dieselbe> Performance im Vergleich zu Docker.
Komische Benchmarks machst du wenn du zwischen LXC/Docker und Virtualbox
keine Differenzen feststellst.
>> Also, was ist nun wirklich der Vorteil von Docker? Ist es lediglich ein> Verwaltungstool und macht im Hintergrund dasselbe wie LXC?>> Daniel
Virtualbox emuliert Hardware, Dadurch ist es Kompatibel zu vielen
Betriebsystemen, aber auch Ressourcen hungriger, Es Braucht mehr
CPU-Zeit, IO ist langsamer, ram ist fest einer vm zugewiesen.
Docker nutzt LXC als Virtualisierungs-Technik. Dort gibt es also
Tatsächlich keine Performance-Unterschiede.
Der unterschied ist aber: LXC musst du dein Root-Dateisystem
unterschieben, wenn du das Versionieren willst Versioniert du entweder
das Ganze System, oder du schreibst dir Software die dir ein System
baut.
Oder du nimmst eben Docker, das macht genau das, zusätzlich kannst du
deine Dateisysteme "Stapeln", du kannst also ein image bauen das dir
z.B. ein Ubuntu installiert.
Dein Zweites Image baut darauf auf und installiert dir nen Webserver.
Dirk D. schrieb:> Da frag ich mich doch wieso ich in Virtualbox nen Chipsatz in den> VM-Einstellungen wählen kann...
Richtig. Chipsatzemulation: ja / Prozessoremulation: nein
> Komische Benchmarks machst du wenn du zwischen LXC/Docker und Virtualbox> keine Differenzen feststellst.
Meine "Komischen Benchmarks" zeigen mir, dass für meine Zwecke kein
wesentlicher Unterschied in der Performance besteht. Dabei benchmarke
ich natürlich nicht das Erstellen einer neuen VM und auch nicht die
Bootdauer. Selbstverständlich könnte ich mir auch "Nichtkomische
Benchmarks" ausdenken, die belegen, dass LXC schneller ist, aber damit
würde ich mich selbst täuschen.
> Virtualbox emuliert Hardware, Dadurch ist es Kompatibel zu vielen> Betriebsystemen, aber auch Ressourcen hungriger,> Es Braucht mehr CPU-Zeit, IO ist langsamer
Ich sehe da <2% Unterschied in Flops, <1% Unterschied in Bandwidth,
<0.01% Unterschied in Latency. Wer das gravierend findet, kann natürlich
trotzdem Virtualbox verdammen.
> Docker nutzt LXC als Virtualisierungs-Technik.
Nicht ganz. Aber ähnliche Technik.
> Dort gibt es also> Tatsächlich keine Performance-Unterschiede.> Der unterschied ist aber: LXC musst du dein Root-Dateisystem> unterschieben, wenn du das Versionieren willst Versioniert du entweder> das Ganze System, oder du schreibst dir Software die dir ein System> baut.> Oder du nimmst eben Docker, das macht genau das, zusätzlich kannst du> deine Dateisysteme "Stapeln", du kannst also ein image bauen das dir> z.B. ein Ubuntu installiert.> Dein Zweites Image baut darauf auf und installiert dir nen Webserver.
Ok, also macht Docker genau das, was ich mir on top of LXC entwickelt
habe, und ich brauche kein Docker.
Danke
Daniel
Daniel schrieb:> Dirk D. schrieb:>> Da frag ich mich doch wieso ich in Virtualbox nen Chipsatz in den>> VM-Einstellungen wählen kann...>> Richtig. Chipsatzemulation: ja / Prozessoremulation: nein
Genau.
>>> Komische Benchmarks machst du wenn du zwischen LXC/Docker und Virtualbox>> keine Differenzen feststellst.>> Meine "Komischen Benchmarks" zeigen mir, dass für meine Zwecke kein> wesentlicher Unterschied in der Performance besteht. Dabei benchmarke> ich natürlich nicht das Erstellen einer neuen VM und auch nicht die> Bootdauer. Selbstverständlich könnte ich mir auch "Nichtkomische> Benchmarks" ausdenken, die belegen, dass LXC schneller ist, aber damit> würde ich mich selbst täuschen.
Das sind deine Zwecke. Wenn die Bootdauer und das blockieren von
ungenutzem Arbeitsspeicher für dich keine Rolle Spielen ist das
natürlich okay.
>>>> Virtualbox emuliert Hardware, Dadurch ist es Kompatibel zu vielen>> Betriebsystemen, aber auch Ressourcen hungriger,>>> Es Braucht mehr CPU-Zeit, IO ist langsamer> Ich sehe da <2% Unterschied in Flops, <1% Unterschied in Bandwidth,> <0.01% Unterschied in Latency. Wer das gravierend findet, kann natürlich> trotzdem Virtualbox verdammen.
Fahren deine Benchmarks die Hardware ans Maximum?
Wenn nicht werten sie wehnigstens cpu-last aus?
>>>> Docker nutzt LXC als Virtualisierungs-Technik.>> Nicht ganz. Aber ähnliche Technik.
Naja, vor 0.9 wars ausschliesslich lxc, ab 0.9 gibts libcontainer was
wahlweise lxc oder libvirt nutzt. Wenn du ne 1.9.1 auf nem Frischen
Debian installierst bekommste nen Paket das lxc-docker heisst mit der
Beschreibung:
Description: Linux container runtime
Docker complements LXC with a high-level API which operates at the
process
level. It runs unix processes with strong guarantees of isolation and
repeatability across servers.
Docker is a great building block for automating distributed systems:
large-scale web deployments, database clusters, continuous deployment
systems,
private PaaS, service-oriented architectures, etc.
Ich behaupte jetzt mal das Docker doch durchaus lxc benutzt.
>>> Dort gibt es also>> Tatsächlich keine Performance-Unterschiede.>> Der unterschied ist aber: LXC musst du dein Root-Dateisystem>> unterschieben, wenn du das Versionieren willst Versioniert du entweder>> das Ganze System, oder du schreibst dir Software die dir ein System>> baut.>> Oder du nimmst eben Docker, das macht genau das, zusätzlich kannst du>> deine Dateisysteme "Stapeln", du kannst also ein image bauen das dir>> z.B. ein Ubuntu installiert.>> Dein Zweites Image baut darauf auf und installiert dir nen Webserver.>> Ok, also macht Docker genau das, was ich mir on top of LXC entwickelt> habe, und ich brauche kein Docker.
Dem will ich gar nicht widersprechen, ich kenn dein Anwendungsfall ja
nicht im Detail.
Docker ist hauptsächlich Pseudohype. Pseudo deshalb, weil der Hype
nicht real aus der Masse kommt, sondern künstlich von ein paar Suits
durch massive PR-Maßnahmen vorgeteuscht wird. Wird leider erst
aufhören, wenn das Venture-Capital nicht mehr fliesst.
Um "Docker" mal etwas zu relativieren:
https://github.com/p8952/bockerBocker - Docker implemented in around 100 lines of bash.
;-)
asdfasd schrieb:> Docker ist hauptsächlich Pseudohype. Pseudo deshalb, weil der Hype> nicht real aus der Masse kommt, sondern künstlich von ein paar Suits> durch massive PR-Maßnahmen vorgeteuscht wird. Wird leider erst> aufhören, wenn das Venture-Capital nicht mehr fliesst.>> Um "Docker" mal etwas zu relativieren:>> https://github.com/p8952/bocker>> Bocker - Docker implemented in around 100 lines of bash.>> ;-)
Bocker, implementing a tiny bit of Docker in shell if your are willing
to set up your system the right way your self :)
Außerdem ist es nur der client.
Ist so nen bisschen wie: Notepad++, a light weight Eclipse.