Was ist Docker?

06/03/2015 - 16:26 von Tim Ritberg | Report spam
Hallo!

Tja, was ist Docker? Also ich halte es erst mal für einen Hype.
Das ist so eine Aussage wie, Schokolade ist lecker.

Und technisch? Da bin ich mir nicht ganz sicher.
Es basiert auf verschiedenen Kernelfeatures. Es kann einen Prozess
abkapseln und wie in einer VM laufen lassen.
Nach einige Tests kommt mir das so vor, als würde (das) Docker(prinzip)
den Hauptaugenmerk auf Prozesse legen, nicht aber auf Daten.
Anwendungen und die darauf erzeugten Prozesse werden isoliert
ausführbar, wie eine VM, aber losgelöst von OS.

Der Workflow sieht dann wohl so aus: man erstellt ein Dockerimage,
bereitet darauf seine Software vor. Docker erzeugt dann durch Starten
aus dem Image einen Container, mit der dort abgelegten Software, die
sich dann als Prozess darstellt. Den Container könnte man wohl auch
Instanz nennen?
Solche Dockerinstanzen legen keine Daten in dem Image zur Laufzeit ab,
dafür ist ein Volume da. Sehe ich das richtig?
Im Netz steht vielfach, dann man von einem Image mehrere Instanzen
starten kann. Wie ist das dann mit dem Volume, überschreiben die
Instanzen die Daten gegenseitig?
Applikationen werden so austauschbar, aber was ist mit den Daten?
Apache liefert Webseiten aus, MYSQL schreibt in Datenbanken.
Wie sieht das in der Dockerwelt aus?

Dann habe ich noch eine Frage zum Dockerimage. Es wird öfter als
gestapeltes Image erwàhnt. Kann man Teile aus dem Image exportieren und
in andere Images importieren?
Macht das überhaupt Sinn?



Tim
 

Lesen sie die antworten

#1 Bernd Waterkamp
06/03/2015 - 17:31 | Warnen spam
Moin,

Tim Ritberg schrieb:

Tja, was ist Docker? Also ich halte es erst mal für einen Hype.



Ist es inzwischen definitiv. Es wird als Allzweckwaffe gepriesen, ohne IMHO
eine zu sein. Disclaimer zum Rest der Antwort: Bisher habe ich auch nur ein
wenig mit Docker "gespielt" und mir ansonsten das Konzept nàher angeschaut.

Solche Dockerinstanzen legen keine Daten in dem Image zur Laufzeit ab,
dafür ist ein Volume da. Sehe ich das richtig?



Yep. Logs kannst du alternativ direkt woanders hinschicken, z.B. rsylog
oder logstash/graylog. Alle sonstigen Daten im Container sind statisch bzw.
sollten es sein.

Im Netz steht vielfach, dann man von einem Image mehrere Instanzen
starten kann. Wie ist das dann mit dem Volume, überschreiben die
Instanzen die Daten gegenseitig?



Nur, wenn du es darauf anlegen würdest. :-) Siehe Beschreibung zu Data
Volumes: https://docs.docker.com/userguide/dockervolumes/
Wenn jede Instanz versucht in eine Datei gleichen Namens zu schreiben, gibt
das natürlich Durcheinander. Entweder also die Dateinamen variieren, oder
unterschiedliche Volumes pro Instanz.

Applikationen werden so austauschbar, aber was ist mit den Daten?
Apache liefert Webseiten aus, MYSQL schreibt in Datenbanken.
Wie sieht das in der Dockerwelt aus?



Siehe oben. Bei dynamischen Daten packt man die in data volumes - oder man
benutzt eben kein Docker. ;-) Statische Daten kannst du wenn du willst mit
in den Container packen.

Dann habe ich noch eine Frage zum Dockerimage. Es wird öfter als
gestapeltes Image erwàhnt. Kann man Teile aus dem Image exportieren und
in andere Images importieren?



Du nimmst dir entweder einen bestehenden Container und konfigurierst
solange im Container an dem Inhalt herum bis du zufrieden bist und
commitest das dann. Dabei entsteht ein neues Image. Da Docker ein Union
File System verwendet, speichert es nur die Änderungen gegenüber der
Vorlage. Schau' dir mal die Grafik bei Docker an:
https://docs.docker.com/terms/layer/
Das funktioniert wie das Speichern von Änderungen bei Knoppix - nur das
Docker bei einem commit ein neues Image baut.

Oder die zweite und IMHO bessere Variante - ein Dockerfile. Das beschreibt
als Textdatei, welches Image die Basis ist und was daran geàndert werden
soll. Vorteil gegenüber der ersten Variante: Du kannst nachlesen, was
passiert. Schau' dir mal ein Beispiel an.
https://docs.docker.com/examples/nodejs_web_app/

HTH,
Bernd

Ähnliche fragen