Docker

Docker ist eine Software, mit der Anwendungen in Container verpackt und auf jedem Rechner gleich gestartet werden. Sie erschien im März 2013 als Open Source, entwickelt bei dem Unternehmen dotCloud, das sich kurz darauf in Docker, Inc. umbenannte. Container gab es schon vorher; Docker machte sie mit einem einfachen Befehlszeilenwerkzeug, einem Format für Images und einem öffentlichen Verzeichnis dafür massentauglich.

Die Grundlagen beschreibt das Lemma Container-Virtualisierung. Hier geht es um Docker selbst.

Bestandteile

BestandteilAufgabe
Docker Engineder Hintergrunddienst (dockerd), der Images baut und Container startet
dockerdas Befehlszeilenwerkzeug, mit dem man die Engine steuert
DockerfileTextdatei mit der Bauanleitung für ein Image
Docker Huböffentliche Registry, aus der Docker Images standardmäßig lädt
Docker Composestartet mehrere zusammengehörige Container aus einer Beschreibung in YAML
Docker DesktopPaket für Windows und macOS, mit einer Linux-VM im Hintergrund und grafischer Oberfläche

Dockerfile

Ein Image entsteht aus einem Dockerfile: Schritt für Schritt, ausgehend von einem Basis-Image. Jeder Schritt erzeugt eine Schicht.

FROM debian:12-slim
RUN apt-get update && apt-get install -y nginx
COPY website/ /var/www/html/
EXPOSE 80
CMD nginx -g 'daemon off;'

Das Beispiel nimmt ein schlankes Debian, installiert einen Webserver, kopiert die eigenen Dateien hinein und legt fest, was beim Start des Containers läuft.

Docker Compose

Eine Anwendung besteht oft aus mehreren Diensten, etwa Webserver, Anwendung und Datenbank. Docker Compose beschreibt sie in einer Datei und startet sie gemeinsam, samt Netz zwischen ihnen und dauerhaftem Speicher für die Datenbank:

services:
  web:
    image: nginx
    ports:
      - 80:80
  db:
    image: postgres:16
    volumes:
      - daten:/var/lib/postgresql/data
volumes:
  daten:

Für einzelne Server und Entwicklungsumgebungen ist Compose oft alles, was man braucht.

Grundbefehle

BefehlWirkung
docker runContainer aus einem Image starten, das Image bei Bedarf herunterladen
docker pslaufende Container anzeigen
docker buildImage aus einem Dockerfile bauen
docker pull, docker pushImage aus einer Registry laden oder dorthin hochladen
docker logsAusgaben eines Containers anzeigen
docker compose upalle Dienste aus der Compose-Datei starten

Docker und Kubernetes

Die beiden werden oft verglichen, lösen aber verschiedene Aufgaben:

DockerKubernetes
AufgabeContainer bauen und auf einem Rechner startenviele Container auf vielen Rechnern verteilen und am Laufen halten
Maßstabein Server, ein Entwicklerrechnerein Verbund aus vielen Servern (Cluster)
Ausfall eines ServersContainer sind wegwerden auf anderen Servern neu gestartet

Kubernetes nutzte früher Docker als Laufzeitumgebung. Seit Version 1.24 im Mai 2022 spricht Kubernetes direkt mit Laufzeitumgebungen wie containerd. Mit Docker gebaute Images laufen dort weiterhin, weil sie dem gemeinsamen Format der Open Container Initiative entsprechen.

Docker hat mit Docker Swarm eine eigene, einfachere Orchestrierung. Gegen Kubernetes hat sie sich nicht durchgesetzt.

Sicherheit

Root-Rechte. Der Docker-Dienst läuft standardmäßig mit Administratorrechten. Wer Docker-Befehle ausführen darf, hat damit faktisch Root-Zugriff auf den Host. Die Mitgliedschaft in der Gruppe docker ist entsprechend zu vergeben. Docker kennt inzwischen einen Betrieb ohne Root-Rechte; Podman setzt von vornherein darauf.

Images aus fremder Hand. Ein Image aus dem Docker Hub enthält, was sein Ersteller hineingelegt hat. Offizielle und verifizierte Images sind gekennzeichnet; bei allen anderen ist Vorsicht angebracht.

Ports und Firewall. Unter Linux trägt Docker eigene Regeln in die Paketfilter des Systems ein. Freigegebene Ports eines Containers sind dadurch auch dann erreichbar, wenn die Firewall des Hosts sie eigentlich sperrt — eine häufige Überraschung auf Servern im Internet.

Verwandte Werkzeuge

WerkzeugVerhältnis zu Docker
Podmanweitgehend befehlskompatibel, ohne zentralen Dienst, startet Container ohne Root-Rechte
Portainergrafische Weboberfläche zur Verwaltung von Docker- und Kubernetes-Umgebungen
containerdLaufzeitumgebung, die auch in Docker selbst steckt

Weblinks

Erstellt: