1. Willkommen

Manche meiner RST-Unterlagen sind im Laufe der Jahre zu kleinen Büchern gewachsen. Das möchte ich mit dieser Unterlage nicht (er)schaffen. Und die Autoren haben mir/uns die Arbeit „Buch“ ja auch schon abgenommen!

Diese Unterlage sollte eher als „Cheat Sheet“ / „Roter Faden“ verstanden und genutzt werden!

Und jetzt viel Spaß mit Docker…

1.1. Docker Versionen

Docker Software gibt es für nahezu alle Betriebssysteme. Und in unseren Seminaren wollen wir die OS-Implementierungen versuchen in Gänze zu erfassen - aber: aktuell ist Docker einfach heimisch auf Linux-Plattformen!

1.1.1. Linux

geplante Installationen:

Hinweis

Bitte überprüfen, ob der Docker Daemon läuft und enabled ist für Standard-Target/Runlevel!

Alle Aufrufe (hier folgend) und dann auch für docker müssen mit root-Rechten durchgeführt werden.

systemctl status docker.Service
systemctl start docker.Service
systemctl enable docker.Service
docker version

Im letzten Aufruf müssen Client und Server aufgelistet sein.

Im Seminar wird auch der Standarduser für docker berechtigt werden, um die tägliche Seminar- und Schulungsarbeit zu erleichtern.

Hierfür muss manchmal die Gruppe docker neu erstellt werden

groupadd docker    # falls noch nicht vorhanden und nicht mit dockerroot (CentOS) verwechseln
usermod -aG docker standarduser

Gefahr

Docker mit Standarduser kann ein großes Sicherheits darstellen! Darstellungen hierzu folgen!

1.1.2. Windows

Anm.: im 1400 Seiten zweiten Container-Werk von O. Liebel ist Docker für Windows komplett heraus! Und der Nano-Server findet ebenfalls nicht statt!

Aber so ginge es los… wir bnenötigen Windows 10 Pro oder Enterprise - siehe Hyper-V mit MobyLinuxVM!

Installarchiv für die Docker für Windows (Hyper-V) Technik am Besten über Umweg docs.docker.com

Docker für Windows

oder über

Portal zu Docker für Windows

Hinweis

Legacy Tech: Docker Toolbox

Alte Alternative (LegacyTech): Docker Toolbox für Windows (dann arbeitet man mit VirtualBox zusammen!)

https://docs.docker.com/toolbox/overview/#ready-to-get-started

https://docs.docker.com/toolbox/toolbox_install_windows/

1.1.3. macOS

(noch mehr außer Konkurrenz als Docker für Windows ;-)

Die Installationsdatei (DMG) für macOS finden Sie unter folgender Adresse:

Docker für Mac

1.2. Fachbegriffe

Basis-Begriffe:

  • Images - unveränderlich / ro

  • Container - basieren auf Images, nutzen ein Overlay-Dateisystem

    Container basiert auf Image; Container-Instanz ist R/W (Read/Write) Layer

    maximale Anzahl Layer: 128 (bei overlay2, devicemapper; s.u.)

    Container-Hosts: physikalische/reale oder virtuelle Maschine

  • Volumes - vom Container getrennte Verzeichnisse im Docker-Host-System

Vertiefung:

  • Services - Dienst/Aufgabe

    Um diese kümmert sich Docker selbst! Sogar auf welchem Docker-Host!

  • Stacks - Administration von Service-Gruppen

  • Cluster - Vorraussetzung für Services und Stacks;

    Docker Nomenklatur: Swarm; s.a. Python-Skriptool docker-compose

  • Kubernetes - Google Open Source für Container-Verwaltungen;

    läuft Docker Swarm den Rang ab!

Virtuelle Layers

Virtuelle Layers (Bild: Liebel - Skalierbare Container-Infrastrukturen für Ihr Unternehmen)

  • Continouus Delivery / Continous Integration (CD/CI)

    Versuch der Eklärung: (semi-)automatisierte Verfahren (CI) von kleinteiligen Releases mit ebenfalls möglichst automatischen Deployment-Test (CD) ;siehe: Liebel Kap. 2.3ff

1.3. Technik

Weitere Fachbgegriffe und kurze Erläuterungen:

docker Client-Server-Modell

Linux: docker /dockerd; bei Windows/MacOS „komplizierter“

Docker-Client und Server kommunizieren über eine HTTP-RESTful API (für eine sichere Kommunikation siehe Docker Security HTTPS

Einfacher Test der HTTP-Technik:

curl -s --unix-socket /var/run/docker.sock http://localhost/images/json

Das erzeugt einen einen unleserlichen (serialisierten) Infostrom, der sich mit dem Tool jq besser analysieren lässt:

curl -s --unix-socket /var/run/docker.sock http://localhost/images/json | jq

Tipp

Paket jq nachinstallieren! Anm.: für CentOS benötigt man EPEL-Repo!

Bei diesen Ausgaben gleich auch die Syntax der JSON-Files beachten (Klammerungen, Aufzählungen mit Kommata).

Docker Images Windows

siehe Windows Server Core, Nano Server, IIS, ASP.NET; Anm.: Nano Server nur für Windows Server Instanz!

Registry

Image-Datenbank mit Service zum pullen und pushen von Images

Im Produktionsbetrieb müsssen aus Sicherheitaspekten vertrauenswürdige und daher firmeninterne Registries genutzt werden.

Docker Registry: https://index.docker.io/v1/

Registry finden: docker info | grep -i registry

Alternative Registries:

Anm.: Werden im Seminar - bis auf Weiteres - keine Rolle spielen (siehe auch nötige Accounts, ggfs. Kosten, …)

Repository

Logische Unterteilung einer Registry; Fundus mit mehreren Images (siehe Tags); siehe ubuntu:* (beliebige Ubuntu-Varianten)

keine init/systemd Techniken

Was passiert bei mehr als einem Dienst pro Container?

Virtuelle VMs vs. Container

die Container als „Leichtgewichte“ und ohne Prozesse-Lasten; und Nutzung von VMs für Docker-Hosts!

Virtuelle Maschinen und Container

Virtuelle Maschinen und Container (Bild: Liebel - Skalierbare Container-Infrastrukturen für Ihr Unternehmen)

Container Lösungen (Wikipedia Containervirtualisierung )

  • Klassiker:

    FreeBSD Jails (ca. 2000), Solaris Zones (ca. 2005), OpenVZ (ca. 2005; siehe Virtuozzo von Parallels)

  • LXD für LXC (ca. 2008; Linux Containers oder Lightweight Linux Container) - Ausgangsbasis für Docker

  • rkt (sprich: Rocket) - von CoreOS (bzw. Produkt Container Linux)

  • VMware Photon

  • Docker

    März 2013 Fa. dotCloud - dann Oktober 2013 umbenannt in Docker Inc. mit Sitz in Berlin

    Neue Componenten (ab Version >= 1.11): containerd, runc,

    aus „Docker Daemon“ wurde Docker Engine;

    ab Version 1.12 mit eingebauter Swarm Technik: Swarm Mode

    Schwerpunkt auf Applikationsvirtualisierung und nicht auf abgespeckte VMs

Tipp

Darstellung runc als eigenständiges Container-Tool bei Liebel (S. 85ff.)

Container Formate

  • Docker, CoreOS/rkt, LXD/LXC, Photon, …

  • OCF (Open Container Format) der OCI (Open Container Initiative - www.opencontainers.org

Namespaces

Ressourcen von Kernel lassen sich isolieren - Prozesse erhalten quasi eigene Umgebung

Tipp

Übung mit uname -r und grep -i pretty_name /etc/os-release Aufrufen in Host und Containern!

1.4. Sicherheit

Faktoren für die Sicherheit der Container-Techniken:

  • Herkunft der genutzten Images

  • Wegen der Kernel-syscall Techniken (siehe namespaces) problematisch!

Tipp

Bitte seccomp >= Version 2.2.1

Anm./Empfehlung zu Thema namespaces:

# cat /boot/config-$(uname -r) | grep CONFIG_SECCOMP=
CONFIG_SECCOMP=y
# rpm -qa | grep seccomp
libseccomp2-2.3.2-lp150.1.9.x86_64
joeb@opensuse:~/rst/docker>

Links:

Empfehlungen:

  • Implementierungen mittels cgroups (Control Groups für Nutzung von Limits)

  • Applikationen in Container möglichst nicht mit root

  • Fähigkeiten der Images einschränken

  • User-Namespace aktiv

  • seccomp/SELinux/Apparmor

  • keine SUID im Container

  • aktuelle Kernel

  • Container-Host härten, aktualisieren, patchen

  • Container-Host Zugriffe einschränken

  • Netzwerk sichern / konfigurieren

Hinweis

Also: SELinux und auch Firewalltechnken (Netfilter/iptables, firewalld, …) bedenken.

Zu diesen vertiefenden Themen in Produktionsumgebungen an dieser Stelle keine weiteren Ausführungen.