Forum: PC Hard- und Software Docker Container Verständnisfrage


von Daniel (Gast)


Lesenswert?

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

von Achim H. (anymouse)


Lesenswert?

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.

von Kranzi (Gast)


Lesenswert?

Docker benötigt einen Linux Kernel. Unter Windows laufen Container in 
einer virtuellen Maschine.

von Achim H. (anymouse)


Lesenswert?

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.

von Daniel (Gast)


Lesenswert?

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

von Andreas R. (daybyter)


Lesenswert?

Docker emuliert nicht Prozessor und Chipsatz. Dadurch soll es wohl 
wesentlich schneller sein. Stimmt wohl auch. Ich kann hier durchaus 10 
Container laufen lassen.

von Daniel (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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.

von Dirk D. (dicky_d)


Lesenswert?

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.

von Daniel (Gast)


Lesenswert?

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

von Dirk D. (dicky_d)


Lesenswert?

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.

von Andreas R. (daybyter)


Lesenswert?


von asdfasd (Gast)


Lesenswert?

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.

;-)

von Dirk D. (dicky_d)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.