Da leistungsstarke Hardware mehr und mehr zu einer Ware geworden ist, ist die Fähigkeit, mehrere virtuelle Maschinen auf einer einzigen Hardware zu betreiben, zur Industrienorm geworden. Von Webhosting bis Cloud Computing werden viele Dienste in virtualisierten Umgebungen ausgeführt. Neben Desktop-Virtualisierungslösungen wie VirtualBox gibt es auch schnelle Bereitstellungslösungen wie Vagrant. Das Problem mit einer virtuellen Maschine besteht darin, dass sie jeden Aspekt des Gastcomputers emulieren muss, einschließlich des gesamten Systemarbeitsspeichers, der ausschließlich der virtuellen Maschine zugewiesen wird. Daher kann Virtualisierung ressourcenhungrig sein.

Am anderen Ende des Spektrums befindet sich eine "chroot" -Umgebung, die das zugrundeliegende Root-Verzeichnis für einen Prozess so verändert, dass es in seiner eigenen Umgebung läuft und keinen Zugriff auf andere Dateien auf dem Host-Betriebssystem hat. Es gibt jedoch keine Virtualisierung, nur einen anderen Verzeichnisbaum.

Der Mittelpunkt zwischen diesen beiden Systemen ist ein Container. Container bieten viele der Vorteile einer virtualisierten Maschine, jedoch ohne den hohen Ressourcenaufwand. Container sind funktioneller als Chroot-Umgebungen, da es einige Virtualisierungen gibt. Beispielsweise werden Prozessen, die in einem Container erstellt werden, IDs (PIDs) zugewiesen, die von denen im Hostbetriebssystem getrennt sind. Technisch gesehen hat der Container seinen eigenen PID-Namespace. Tatsächlich haben Container ihren eigenen Namespace für das Netzwerksubsystem und für InterProcess Communication (IPC). Das bedeutet, dass ein Container Netzwerkdienste wie einen SSH-Server oder einen Webserver ausführen kann.

Von außen sieht der Container wie eine virtuelle Maschine mit einer eigenen IP-Adresse und eigenen Netzwerkdiensten aus, aber im Inneren des Containers wird viel mehr vom Host-Betriebssystem verwendet als von einer virtuellen Maschine, eher eine "Chroot" -Umgebung. Sie können beispielsweise einen CentOS-Container verwenden, der auf einem Ubuntu-Host ausgeführt wird. Die Befehle und Dateien stammen alle aus CentOS. Wenn Sie jedoch den Container fragen, welcher Kernel ausgeführt wird, wird gemeldet, dass der Ubuntu-Kernel ausgeführt wird, da der Container vom Host-Betriebssystem auf dem Kernel ausgeführt wird.

Docker ist ein Container-basiertes Virtualisierungsframework, mit dem Sie Container erstellen können, die alle Abhängigkeiten für eine Anwendung enthalten. Jeder Container wird von anderen isoliert gehalten und nichts wird geteilt.

Führen Sie die folgenden Befehle aus, um Docker auf einem 64-Bit-Ubuntu 14.04-System zu installieren:

 sudo apt-get Aktualisieren sudo apt-get installieren docker.io sudo ln -sf /usr/bin/docker.io / usr / local / bin / docker 

Es gibt ein vorhandenes Ubuntu-Paket namens docker, das eine Systemablage für KDE3 / GNOME2 darstellt. Um Verwechslungen zu vermeiden, heißt die Laufzeit des Containers docker.io . Der letzte Befehl erstellt eine Verknüpfung von "/ usr / local / bin / docker" zu "/usr/bin/docker.io", wodurch der Befehl docker über die Befehlszeile statt über docker.io aktiviert wird.

Hinweis : Docker.io ist auch für andere Distributionen verfügbar. Hier ist die Installationsanleitung, wenn Sie nicht Ubuntu verwenden.

Um eine Shell im Container auszuführen, führen Sie Folgendes aus:

 sudo docker run -i -t ubuntu / bin / bash 

Das Flag " -i " macht die Sitzung interaktiv, und das Flag " -t " weist docker an, eine Terminalsitzung zu emulieren. Der Parameter "ubuntu" weist docker an, einen Container auf der Basis von Ubuntu 14.04 auszuführen, und "/ bin / bash" ist der Befehl, der ausgeführt werden soll, sobald der Container geöffnet ist, dh die Bash-Shell ausführen.

Wenn Andockfenster ausgeführt wird, prüft es, ob die gewünschte Basisbilddatei zuvor heruntergeladen wurde. Ist dies nicht der Fall, wird das Bild von index.docker.io heruntergeladen. Dies ist auch die Website, die verwendet wird, um zu sehen, welche Bilder offiziell von Docker unterstützt werden.

Um andere Bilder herunterzuladen, ohne einen Container zu starten, verwenden Sie den Befehl " docker pull ". Um beispielsweise das CentOS-Basis-Image herunterzuladen, verwenden Sie:

 sudo docker pull centos 

Sie können auch einzelne Befehle in einem Container ausführen und dann den Container beenden lassen. Verwenden Sie den folgenden Befehl, um den Befehl " ps aux " im CentOS-Container auszuführen:

 sudo docker run centos ps aux 

Wenn ein Container heruntergefahren wird, gehen alle Änderungen verloren. Der Vorteil dieses Ansatzes besteht darin, dass sich ein Container beim Start in einem bekannten Zustand befindet. Dies ist wichtig für Testumgebungen und Build-Dienste, etc. Es ist auch wichtig für die Ausführung von Cloud-Diensten, da der Container schnell zurückgesetzt und in einen stabilen Zustand versetzt werden kann.

Dies bedeutet jedoch auch, dass jegliche Konfiguration oder alle im Container erstellten Dateien verloren gehen. Die Lösung besteht darin, ein neues Bild mit all Ihren Änderungen zu erstellen. Probieren Sie die folgenden Befehle aus:

 sudo docker run ubuntu apt-get installieren -y nmap sudo docker ps -l 

Der erste Befehl startet einen Container und installiert nmap. Der zweite Befehl listet den letzten (-l) erstellten Container auf, auch wenn er nicht ausgeführt wird.

Sie können jetzt einen Snapshot dieses Containers erstellen und ihn in einem neuen Image speichern:

 sudo docker commit 1b498c2d502c ubuntu-mit-nmap 

"1b498c2d502c" ist die ID des Containers, die im Befehl "docker docker ps -l " aufgelistet ist. Wenn Sie nun eine Shell für den Container ubuntu-with-nmap starten, wird der Befehl nmap vorinstalliert.

 sudo docker run -i -t ubuntu-mit-nmap / bin / bash 

Es gibt viele Informationen über docker in der Dokumentation von docker.io. Außerdem werden einige Beispiel-Setups erläutert, darunter die Durchführung häufiger Aufgaben wie das Ausführen einer Python-Web-App und das Ausführen eines SSH-Dienstes.

Wenn Sie Fragen zu Docker haben, gibt es eine starke Docker-Community, die Ihnen helfen kann. Sie können auch Fragen im Kommentarbereich stellen und wir werden sehen, ob wir Ihnen helfen können.