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
|
Git |
Demo | Structured Logging Demo
|
Git |
Demo | REST API
|
Git |
Lab 05 | Übungen zu Docker
|
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 | 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 | 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.
- Berücksichtige Dockerfile Best Practices
- Berücksichtige die 12 Faktor Regeln
- Halte Images klein
- Vermeide Anwendungsdaten in Image Layern
- Erzeuge Ephemeral Containers
- Ignoriere nicht erforderliche Dateien aus dem Build Context mittels
.dockerignore
- Vermeide unnötige Packages oder Libraries
- Siehe nur eine Anwendung (Concerns) pro Container vor
- Minimiere die Anzahl von Image Layern
- Nutze Command Chaining in RUN commands
- Sortiere (wenn möglich) Multiline Commands
- Nutze Multi-Stage Builds
- Nutze den Build Cache
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 | 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.