Zum Inhalt

Kapitel 8
Container

Der Erfolg der Containerisierung hat auch damit zu tun, dass es mit Docker komfortabel möglich wurde, Anwendungen inkl. aller zur Laufzeit erforderlichen Abhängigkeiten in Form standardisierter Images bereit zu stellen. Dies löst viele Abhängigkeitsprobleme, da Container alle Abhängigkeiten beinhalten und so nicht auf einem Host installierte Bibliotheken oder Laufzeitumgebungen angewiesen sind.

Dank einer erfolgreichen Standardisierung durch die OCI hat sich ein reiches Ökosystem vielfältiger Tools zur Ausführung (Runtime), dem Bau (Build), der Bereitstellung (Registry) und der Vulnerabilitätsprüfung (Scanner) solcher Container Images gebildet.

Slides und Screencasts

Unit Screencast (YouTube) Slides
04.1 Das PaaS-Problem und das CaaS-Versprechen PDF, PPTX
04.2 Betriebssystem Virtualisierung PDF, PPTX
04.3 Container Laufzeitumgebungen (Docker) PDF, PPTX
04.4 12 Faktoren und Container (Anti-)Pattern PDF, PPTX

Labs

Inhalte Downloads
Demo Docker Demo
  • Dockerfile
  • Image Größen (Image Shrinking)
  • Abfolge von Dockeranweisungen
Git
Demo Structured Logging Demo
  • Log to stdout
  • Strukturiertes Logging mit JSON
Git
Demo REST API
  • Einfache REST-API mit Python+Docker
Git
Lab 05 Übungen zu Docker
  • Erstellung eines Docker Images
  • Image Shrinking
  • Images in Registries bereitstellen
  • Deployment-Pipeline zum Bau und Test eines Images
Git

OCI Standards

Spezifikation Beschreibung Organisation
OCI Image Format Specification Anforderungen an ein Container Image Open Container Initiative (Linux Foundation)
OCI Runtime Specification Ausführung von Container Images Open Container Initiative (Linux Foundation)
OCI Distribution Specification Verteilung von OCI Formaten Open Container Initiative (Linux Foundation)
OCI Artifacts Richtlinien zur Erstellung von OCI Formaten Open Container Initiative (Linux Foundation)

Anmerkungen sowie Ergänzungsvorschläge werden gerne über folgenden Kanal angenommen und berücksichtigt.

Laufzeitumgebungen

Neben Docker gibt es eine Vielzahl an weiteren Laufzeitumgebungen für OCI-konforme Container. Einige Ansätze fokussieren insbesondere die bessere Isolation von Containern in Multi-Tenancy Umgebungen. Die Aufstellung ist alphabetisch und ohne Anspruch auf Vollständigkeit.

Container Runtime Anbieter Anmerkung
containerd Linux Foundation
Docker Docker Der "Standard"
Firecracker Amazon Web Services Container-Isolation mittels Micro VMs
Linux Containers Canonical lxc + lxd + lxfs
gVisor Google Container-Isolation mittels Application Kernels
Kata Open Infrastructure Foundation Container-Isolation mittels Micro VMs
Nabla IBM TJ. Watson Research Center Container-Isolation mittels Unikernels
podman RedHat Daemonless "Replacement" für Docker
runc Open Containers

Anmerkungen sowie Ergänzungsvorschläge werden gerne über folgenden Kanal angenommen und berücksichtigt.

Build Tools

Die Aufstellung ist alphabetisch und ohne Anspruch auf Vollständigkeit. Alle Tools bauen OCI-konforme Images.

Build Tool Daemonless Anbieter Lizenz Anmerkung
buildah ja RedHat Apache 2.0 Oft zusammen mit podman genutzt (siehe oben)
img ja genuinetools.org MIT
kaniko ja Google Apache 2.0
k3c ja Rancher Apache 2.0 Experimenteller Status (wird nicht aktiv weiterentwickelt)
pouch Alibaba nein Apache 2.0 Ein Docker-Klon von Alibaba

Anmerkungen sowie Ergänzungsvorschläge werden gerne über folgenden Kanal angenommen und berücksichtigt.

Container Image Build Best Practices (Tipps und Tricks)

Die Aufstellung erhebt keinen Anspruch auf Vollständigkeit.

Anmerkungen sowie Ergänzungsvorschläge werden gerne über folgenden Kanal angenommen und berücksichtigt.

Image Registries

Die Aufstellung ist alphabetisch und ohne Anspruch auf Vollständigkeit.

Registry Anbieter Service Lizenz
Amazon Container Registry AWS Public Kommerziell
Azure Container Registry Microsoft Public Kommerziell
Dockerhub Docker Public Kommerziell
Gitlab Container Registry Gitlab Private Open Source
Google Container Registry Google Public Kommerziell
Harbor VMware Private Open Source
JFrog Container Registry JFrog Private Open Source
Portus Suse Private Open Source
Secure Registry Mirantis Private Open Source
Quay RedHat Public/Private Kommerziell

Kommerzielle Services beinhalten meist gewisse Freikontingente.

Anmerkungen sowie Ergänzungsvorschläge werden gerne über folgenden Kanal angenommen und berücksichtigt.

Image Layer und Vulnerability Scanner

Mittels einer ganzen Liste an Scannern kann man Container Images auf bekannte Sicherheitslücken scannen. Folgendes Beispiel nutzt exemplarisch den Scanner trivy, um das offizielle Wordpress Image von Dockerhub auf bekannte Sicherheitslücken zu analysieren.

% trivy wordpress 

Das Scanning kann zumeist von der Kommandozeile gestartet werden und ist damit auch gut in Deployment- und Build-Pipelines integrierbar. Obiges Beispiel ergibt bspw. folgende Schwachstellenanalyse.

2021-08-15T17:24:08.709+0200    INFO    Detected OS: debian
2021-08-15T17:24:08.709+0200    INFO    Detecting Debian vulnerabilities...
2021-08-15T17:24:08.765+0200    INFO    Number of PL dependency files: 0

wordpress (debian 10.10)
========================
Total: 845 (UNKNOWN: 0, LOW: 622, MEDIUM: 108, HIGH: 106, CRITICAL: 9)

[...]

Neben trivy gibt es viele weitere Produkte. Die folgende Aufstellung ist alphabetisch und ohne Anspruch auf Vollständigkeit.

Scanner/Monitor Anbieter Lizenz Anmerkungen
clair RedHat / Quay Apache 2.0 Image Scanner
dagda Elias Grande Apache 2.0 Image Scanner
dive Alex Goodman MIT Image Layer Scanner
falco Sysdig Apache 2.0 Runtime System Call Monitor
grype Anchore Apache 2.0 Image Scanner
snyk Snyk Kommerziell Image und Code Scanner
trivy Aquasec Apache 2.0 Image Scanner
Xray JFrog Kommerziell Image Scanner

Anmerkungen sowie Ergänzungsvorschläge werden gerne über folgenden Kanal angenommen und berücksichtigt.