Docker 0.7

Docker ist in der Version 0.7 erschienen. Vorzüge:

  • Standard Linux-Kernel (kein Patch mehr nötig)
  • AUFS erlaubt durch copy-on-write schnell Erstellung von Kopien der Umgebung
  • Links erlauben es den Containern, miteinander zu kommunizieren.
  • Offline-Transfer erlaubt es, Container nach lokal zu kopieren und wieder ein zu hängen. Gut für Software-Verteilung.
  • Container können nun endlich auch mit Namen versehen werden.

(docker-blog, golem)

Docker

Docker erlaubt es, Anwendungen in Container zu verpacken. Dabei wird alles was die Anwendung an (lokalen) Abhängigkeiten benötigt, in dem Container bereit gestellt. Damit kann der Container auch beliebig transportiert und überall ausgeführt werden. Man nennt hier gern den Zusammenhang, das ein Entwickler seine Software im Container testen kann, und exakt denselben Container dann auf dem Server ausführt.

https://www.docker.io/

Docker-Dokumentation: Hello World

Das ganze ähnelt einer Virtuellen Maschine, ist aber eben ein Container, und nutzt wesentlich besser das Host-System. Jeder Container läuft dabei auf dem gleichen Kernel, verfügt aber über ein eigenes Dateisystem. In diesem Dateisystem kann die Software über alle ihre Abhängigkeiten verfügen, während die System-Ressourcen über den Kernel genutzt werden. Durch das Layer-basierte Dateisystem können sich die Aufzeichnungen auf Änderungen beschränken (jeder muss nur speichern was er selber schreibt, gelesen wird gemeinsam). Wenn man also viele Container verwendet, die sich untereinander nur wenig unterscheiden bzw. ein weitgehend gleiches Dateisystem verwenden, benötigen sie nur die Differenzen an zusätzlichem Speicherplatz. Virtuelle Maschinen trennen vollständig, benötigen dafür aber auch komplett eigene Ressourcen und den vollständigen Speicherplatz.

Im Grunde ist Docker eine Kombination aus LXC und AUFS.:

http://linuxcontainers.org/

LXC is a userspace interface for the Linux kernel containment features.
Through a powerful API and simple tools, it lets Linux users easily create and manage system or application containers.

Current LXC uses the following kernel features to contain processes:

  • Kernel namespaces (ipc, uts, mount, pid, network and user)
  • Apparmor and SELinux profiles
  • Seccomp policies
  • Chroots (using pivot_root)
  • Kernel capabilities
  • Control groups (cgroups)

As such, LXC is often considered as something in the middle between a chroot on steroids and a full fledged virtual machine. The goal of LXC is to create an environment as close as possible as a standard Linux installation but without the need for a separate kernel.

http://de.wikipedia.org/wiki/Aufs

Dazu werden mindestens zwei Dateisysteme übereinander gelegt. Dabei wird ein beschreibbares Dateisystem über das nicht beschreibbare gelegt. Soll nun eine Datei gelesen werden, wird zunächst versucht, sie auf dem beschreibbaren Dateisystem zu lesen. Ist sie dort nicht vorhanden, wird sie aus dem darunter liegenden, nicht beschreibbaren Dateisystem gelesen. Ein Schreibzugriff erfolgt immer auf das beschreibbare Dateisystem.

Eine kleine Erklärungsdiskussion findet sich auf stackoverflow: How is Docker.io different from a normal virtual machine?