Ein Container ist einfach eine ausführbare Binärdatei, die vom Hostbetriebssystem unter einer Reihe von Einschränkungen ausgeführt werden soll, die mithilfe einer Anwendung (z.B. Docker) voreingestellt sind und dem Betriebssystem mitteilen, welche Einschränkungen anzuwenden sind.
Die typischen Einschränkungen beziehen sich auf die Prozessisolierung, die Sicherheit (wie die Verwendung von SELinux Schutz) und die Systemressourcen (Speicher, Festplatte, CPU und Netzwerk).
Bis vor kurzem unterstützten nur Kernel in Unix-basierten Systemen die Möglichkeit, ausführbare Dateien unter strengen Einschränkungen auszuführen. Deshalb dreht sich der Großteil der Containerdiskussionen heute hauptsächlich um Linux oder andere Unix-Distributionen.
Docker ist eine dieser Anwendungen, die wissen, wie sie dem Betriebssystem (meist Linux) mitteilen müssen, unter welchen Einschränkungen eine ausführbare Datei ausgeführt werden soll. Die ausführbare Datei befindet sich im Docker-Image, das einfach eine Tar-Datei ist. Diese ausführbare Datei ist in der Regel eine abgespeckte Version des Benutzerbereichs einer Linux-Distribution (Ubuntu, CentOS, Debian usw.), die vorkonfiguriert ist, um eine oder mehrere Anwendungen auszuführen.
Obwohl die meisten Menschen einen Linux-Kern als die ausführbare Datei verwenden, kann es sich um jede andere Binäranwendung handeln, solange der Kernel des Hostbetriebssystems sie ausführen kann (siehe Erstellen eines einfachen Basissystems mit Scratch). Ob die Binärdatei im Docker-Image ein Betriebssystem-Benutzerbereich oder nur eine Anwendung ist, für das Betriebssystem des Hosts ist es nur ein weiterer Prozess, ein eingeschränkter Prozess, der von voreingestellten Betriebssystemgrenzen regiert wird.
Weitere Anwendungen, die dem Hostbetriebssystem wie Docker mitteilen können, welche Grenzen auf einen Prozess angewendet werden sollen, während er läuft, sind LXC, libvirt und systemd. Docker hat früher diese Anwendungen verwendet, um indirekt mit dem Linux-Betriebssystem zu interagieren, aber jetzt interagiert Docker direkt mit Linux mithilfe seiner eigenen Bibliothek namens "libcontainer".
Container sind also nur Prozesse, die im eingeschränkten Modus laufen, ähnlich wie das, was chroot früher getan hat.
Meiner Meinung nach zeichnet sich Docker durch seine Repository (Docker Hub) und deren Verwaltungstools aus, die die Arbeit mit Containern äußerst einfach machen.
Siehe [Docker (Software)](https://en.wikipedia.org/wiki/Docker(software))_.