Was ist Docker?What is Docker?

Docker ist ein Open Source-Projekt zur Automatisierung der Bereitstellung von Apps als mobile, eigenständige Container, die in der Cloud oder lokal ausgeführt werden können.Docker is an open-source project for automating the deployment of applications as portable, self-sufficient containers that can run on the cloud or on-premises. Docker ist darüber hinaus ein Unternehmen, das diese Technologie fördert und weiterentwickelt und mit Cloud-, Linux- und Windows-Anbietern zusammenarbeitet, einschließlich Microsoft.Docker is also a company that promotes and evolves this technology, working in collaboration with cloud, Linux, and Windows vendors, including Microsoft.

Diagramm, das die Orte zeigt, an denen Docker-Container ausgeführt werden können.

Abbildung 2-2:Figure 2-2. Docker stellt Container auf allen Ebenen der Hybrid Cloud bereit.Docker deploys containers at all layers of the hybrid cloud.

Docker-Container können überall ausgeführt werden, lokal im Rechenzentrum des Kunden, bei einem externen Dienstanbieter oder in der Cloud auf Azure.Docker containers can run anywhere, on-premises in the customer datacenter, in an external service provider or in the cloud, on Azure. Docker-Imagecontainer können nativ unter Linux und Windows ausgeführt werden.Docker image containers can run natively on Linux and Windows. Allerdings können Windows-Images nur auf Windows-Hosts ausgeführt werden, während Linux-Images sowohl auf Linux-Hosts als auch auf Windows-Hosts ausgeführt werden können (bis dato mithilfe einer Hyper-V-Linux-VM), wobei Host einen Server oder eine VM bedeutet.However, Windows images can run only on Windows hosts and Linux images can run on Linux hosts and Windows hosts (using a Hyper-V Linux VM, so far), where host means a server or a VM.

Entwickler können Entwicklungsumgebungen unter Windows, Linux oder macOS verwenden.Developers can use development environments on Windows, Linux, or macOS. Der Entwickler führt auf dem Entwicklungscomputer einen Docker-Host aus, in dem Docker-Images bereitgestellt werden, einschließlich der App und ihrer Abhängigkeiten.On the development computer, the developer runs a Docker host where Docker images are deployed, including the app and its dependencies. Entwickler, die unter Linux oder macOS arbeiten, verwenden einen Linux-basierten Docker-Host und können nur Images für Linux-Container erstellen.Developers who work on Linux or on macOS use a Docker host that is Linux based, and they can create images only for Linux containers. (Entwickler, die unter macOS arbeiten, können Code bearbeiten oder die Docker-CLI unter macOS ausführen. Zum Entstehungszeitpunkt dieses Texts können Container jedoch nicht direkt unter macOS ausgeführt werden.) Entwickler, die unter Windows arbeiten, können Images wahlweise für Linux- oder für Windows-Container erstellen.(Developers working on macOS can edit code or run the Docker CLI from macOS, but as of the time of this writing, containers don't run directly on macOS.) Developers who work on Windows can create images for either Linux or Windows Containers.

Um Container in Entwicklungsumgebungen zu hosten und zusätzliche Entwicklertools bereitzustellen, vertreibt Docker die Docker Community Edition (CE) für Windows oder für macOS.To host containers in development environments and provide additional developer tools, Docker ships Docker Community Edition (CE) for Windows or for macOS. Diese Produkte installieren die erforderliche VM (den Docker-Host) zum Hosten der Container.These products install the necessary VM (the Docker host) to host the containers. Docker stellt außerdem Docker Enterprise Edition (EE) zur Verfügung, das für die Entwicklung in Unternehmen vorgesehen ist und von IT-Teams verwendet wird, die große, unternehmenswichtige Anwendungen im Produktionsbetrieb erstellen, ausliefern und ausführen.Docker also makes available Docker Enterprise Edition (EE), which is designed for enterprise development and is used by IT teams who build, ship, and run large business-critical applications in production.

Es gibt zwei Typen von Runtimes zum Ausführen von Windows-Containern:To run Windows Containers, there are two types of runtimes:

  • Windows Server-Container bieten dank der Isolation von Prozessen und Namespaces auch Anwendungsisolierung.Windows Server Containers provide application isolation through process and namespace isolation technology. Ein Windows Server-Container teilt sich einen Kernel mit dem Containerhost und allen Containern, die auf dem Host ausgeführt werden.A Windows Server Container shares a kernel with the container host and with all containers running on the host.

  • Hyper-V-Container erweitern die durch Windows Server-Container bereitgestellte Isolierung, indem jeder Container in einem hochgradig optimierten virtuellen Computer ausgeführt wird.Hyper-V Containers expand on the isolation provided by Windows Server Containers by running each container in a highly optimized virtual machine. In dieser Konfiguration wird der Kernel des Containerhosts nicht für den Hyper-V-Container freigegeben, was die Isolierung verbessert.In this configuration, the kernel of the container host isn't shared with the Hyper-V Containers, providing better isolation.

Die Images für diese Container werden auf die gleiche Weise erstellt und funktionieren auch gleich.The images for these containers are created the same way and function the same. Der Unterschied besteht darin, wie der Container aus dem Image erstellt wird: Für das Ausführen eines Hyper-V-Containers ist ein Zusatzparameter erforderlich.The difference is in how the container is created from the image running a Hyper-V Container requires an extra parameter. Weitere Informationen finden Sie unter Windows-Container.For details, see Hyper-V Containers.

Vergleichen von Docker-Containern mit virtuellen ComputernComparing Docker containers with virtual machines

In Abbildung 2-3 wird einen Vergleich zwischen virtuellen Computern und die Docker Container dargestellt.Figure 2-3 shows a comparison between VMs and Docker containers.

Virtuelle ComputerVirtual Machines Docker-ContainerDocker Containers
Diagramm, das den Hardware-/Softwarestapel eines herkömmlichen virtuellen Computers zeigt. Diagramm, das den Hardware-/Softwarestapel für Docker-Container zeigt.
Virtuelle Computer enthalten die Anwendung, die erforderlichen Bibliotheken oder Binärdateien und ein vollständiges Gastbetriebssystem.Virtual machines include the application, the required libraries or binaries, and a full guest operating system. Eine vollständige Virtualisierung erfordert mehr Ressourcen als die Containerisierung.Full virtualization requires more resources than containerization. Container enthalten die Anwendung und alle ihre Abhängigkeiten.Containers include the application and all its dependencies. Sie teilen den Betriebssystemkernel jedoch mit anderen Containern, die als isolierte Prozesse im Benutzerbereich des Hostbetriebssystems ausgeführt werden.However, they share the OS kernel with other containers, running as isolated processes in user space on the host operating system. (Die einzige Ausnahme stellen Hyper-V-Container dar, wo jeder Container auf einem speziellen virtuellen Computer pro Container ausgeführt wird.)(Except in Hyper-V containers, where each container runs inside of a special virtual machine per container.)

Abbildung 2-3:Figure 2-3. Vergleichen der herkömmlichen virtuellen Computer mit Docker-ContainernComparison of traditional virtual machines to Docker containers

Bei VMs gibt es drei Basisebenen auf dem Host-Server. Unten beginnend sind dies: Infrastruktur, Hostbetriebssystem und Hypervisor, und auf all dem aufsetzend weist jede VM ihr eigenes Betriebssystem und alle erforderlichen Bibliotheken auf.For VMs, there are three base layers in the host server, from the bottom-up: infrastructure, Host Operating System and a Hypervisor and on top of all that each VM has its own OS and all necessary libraries. Bei Docker bietet der Hostserver nur die Infrastruktur und das Betriebssystem, und darüber arbeitet das Containermodul, das die Container isoliert, aber die grundlegenden Betriebssystemdienste teilt.For Docker, the host server only has the infrastructure and the OS and on top of that, the container engine, that keeps container isolated but sharing the base OS services.

Da Container wesentlich weniger Ressourcen benötigen (z.B. keine Vollversion des Betriebssystems), lassen sie sich einfach bereitstellen und schnell hochfahren.Because containers require far fewer resources (for example, they don't need a full OS), they're easy to deploy and they start fast. Das ermöglicht eine höhere Dichte, d.h. es erlaubt Ihnen, mehr Dienste auf der gleichen Hardwareeinheit auszuführen, was geringere Kosten verursacht.This allows you to have higher density, meaning that it allows you to run more services on the same hardware unit, thereby reducing costs.

Als Nebenwirkung der Ausführung auf dem gleichen Kernel erhalten Sie weniger Isolation als bei VMs.As a side effect of running on the same kernel, you get less isolation than VMs.

Der Hauptzweck eines Images ist, die Umgebung (Abhängigkeiten) in verschiedene Bereitstellungen anzugleichen.The main goal of an image is that it makes the environment (dependencies) the same across different deployments. Das bedeutet, dass Sie sie auf Ihrem Computer debuggen und sie dann auf einem anderen Computer bereitstellen können, wenn dieselbe Umgebung gewährleistet ist.This means that you can debug it on your machine and then deploy it to another machine with the same environment guaranteed.

Mit einem Containerimage können Sie eine Anwendung oder einen Dienst packen und beides auf zuverlässige und reproduzierbare Weise bereitstellen.A container image is a way to package an app or service and deploy it in a reliable and reproducible way. Docker ist also nicht bloß eine Technologie, sondern eine Philosophie und ein Prozess.You could say that Docker isn't only a technology but also a philosophy and a process.

Wenn Docker eingesetzt wird, hören Sie von Entwicklern nie: „Es funktioniert auf meinem Computer. Warum also nicht auch in der Produktion?“When using Docker, you won't hear developers say, "It works on my machine, why not in production?" Sie können einfach sagen : „Es funktioniert in Docker“, da die verpackte Docker-Anwendung in jeder unterstützten Docker-Umgebung ausgeführt werden kann, und sie funktioniert auf allen Bereitstellungszielen (wie Dev, QA, Staging und Produktion) wie vorgesehen.They can simply say, "It runs on Docker", because the packaged Docker application can be executed on any supported Docker environment, and it runs the way it was intended to on all deployment targets (such as Dev, QA, staging, and production).

Eine einfache AnalogieA simple analogy

Vielleicht kann eine einfache Analogie beim Verständnis des Kernkonzepts von Docker hilfreich sein.Perhaps a simple analogy can help getting the grasp of the core concept of Docker.

Gehen wir einen Augenblick lang zurück in die 1950-er Jahre.Let's go back in time to the 1950s for a moment. Es gab keine Textverarbeitungsprogramme, und überall (naja, fast überall) wurden Fotokopierer benutzt.There were no word processors, and the photocopiers were used everywhere (kind of).

Angenommen, Sie wären dafür zuständig gewesen, stapelweise Briefe nach Bedarf per Post an Kunden zu verschicken, auf richtigem Papier und in Umschlägen für die physische Zustellung an die Adresse jedes einzelnen Kunden (damals gab es noch keine E-Mail).Imagine you're responsible for quickly issuing batches of letters as required, to mail them to customers, using real paper and envelopes, to be delivered physically to each customer's address (there was no email back then).

An einem bestimmten Punkt fällt Ihnen auf, dass die Briefe nur eine Zusammenstellung einer großen Sammlung von Absätzen sind, die nach Bedarf ausgewählt und angeordnet werden, je nach dem Zweck des Briefs, also denken Sie sich ein System aus, Briefe schnell fertigzustellen, und erwarten eine üppige Gehaltserhöhung.At some point, you realize the letters are just a composition of a large set of paragraphs, which are picked and arranged as needed, according to the purpose of the letter, so you devise a system to issue letters quickly, expecting to get a hefty raise.

Das System ist einfach:The system is simple:

  1. Sie beginnen mit einem Satz Transparentfolien, die jeweils einen Absatz enthalten.You begin with a deck of transparent sheets containing one paragraph each.

  2. Um einen Satz Briefe fertigzustellen, wählen Sie die Folien mit den benötigten Absätzen aus, dann stapeln Sie sie und richten sie aus, so dass sie gut aussehen und sich einwandfrei lesen lassen.To issue a set of letters, you pick the sheets with the paragraphs you need, then you stack and align them so they look and read fine.

  3. Schließlich platzieren Sie den Stapel im Fotokopierer und drücken den Startknopf, um so viele Briefe wie nötig zu erstellen.Finally, you place the set in the photocopier and press start to produce as many letters as required.

Vereinfacht ist das der Kerngedanke von Docker.So, simplifying, that's the core idea of Docker.

In Docker ist jede Schicht die sich ergebende Menge von Änderungen, die im Dateisystem nach dem Ausführen eines Befehls auftreten, etwa beim Installieren eines Programms.In Docker, each layer is the resulting set of changes that happen to the filesystem after executing a command, such as, installing a program.

Wenn Sie sich das Dateisystem nach dem Kopieren der Schicht „ansehen“, sehen Sie alle Dateien, einschließlich der Schicht, auf der das Programm installiert wurde.So, when you "look" at the filesystem after the layer has been copied, you see all the files, included the layer when the program was installed.

Sie können sich ein Image als eine schreibgeschützte Behelfsfestplatte vorstellen, die zur Installation auf einem „Computer“ bereit ist, der bereits ein Betriebssystem enthält.You can think of an image as an auxiliary read-only hard disk ready to be installed in a "computer" where the operating system is already installed.

In ähnlicher Weise stellt ein Container diesen „Computer“ dar, mit angeschlossener Image-„Festplatte“.Similarly, you can think of a container as the "computer" with the image hard disk installed. Der Container kann ein- und ausgeschaltet werden, ganz wie ein Computer.The container, just like a computer, can be powered on or off.