• Inter-Container Dependencies

    Container unter Kontrolle

    TLDR;

    docker-compose health-checks container-dependencies
    Gerade beim Deployment von ganzen Stacks mit Docker-Compose kommt es vor, dass Container untereinander Abhängigkeiten haben. Simples Beispiel - ein einfacher Service mit einer Abhängigkeit auf eine Datenbank oder einen KV-Store. Werden beide Container gleichzeitig gestartet könnte der Service Probleme bekommen, wenn die Datenbank beim Startup noch nicht da ist. Man kann das über einen halbwegs stabilen Retry lösen, indem man versucht, sich immer wieder gegen die Datenbank zu verbinden bis es klappt. Zusätzlich macht es aber Sinn, eines der neuen Features in Docker zu verwenden - depends on mit healthchecks.

  • Docker Logging

    Docker Logging mit ELK in 5 Minutes

    TLDR;

    Spätestens im Cluster mit mehreren Knoten wird es schwierig, den Überblick über die Logs aller Container auf allen Hosts zu behalten. Es ist einfach nicht mehr praktikabel und zeitgemäß, sich auf einem Knoten einzuloggen, um dort die Logfiles in /var/log/ manuell mit less und tail zu durchforsten.
    Besser ist der Einsatz eines zentralel Logging-Servers. Hierfür gibt es viele Beispiele und wir werden uns noch einige genauer betrachten. Für den Anfang nehmen wir den kampferprobten ELK-Stack. Elk kennt mittlerweile wahrscheinlich beinahe jeder, und steht für E - ElasticSearch, L - Logstash, K - Kibana.
    Tipp
    Unten finden Sie die Kommandos die sie direkt in einem Swarm Cluster ausführen können für ein 1 Copy / Paste Setup des Elk-Stacks inkl. Logspout.
    Achtung
    Mit Boot2Docker auf MacOS werden Sie typischerweise das hier sehen: # Native memory allocation (mmap) failed to map 2060255232 bytes for committing reserved memory. ElasticSearch braucht mindestens 2GB daher empfiehlt es sich für dieses Experiment den Memory zu erhöhen (es reicht beispielsweise über die VirtualBox UI)
  • Daily Docker inspect

    Daily Docker Inspect

    TLDR;

    Docker inspect erlaubt es uns, einen Blick in die Tiefen und Untiefen eines Containers zu werfen.
    Hierfür starten wir zunächst einen einfachen Container im eigenen Netzwerk, der nichts tut außer warten.
    docker network create -d bridge test-bridge
    docker volume create test
    
    docker run -d -p 8080:8080 -v test:/test -v /tmp:/tmp/test --network test-bridge --name runner effectivetrainings/runner
    # das Portmapping ist völlig unnötig, dient uns nur zur Veranschaulichung von Ports in der inspect-Ausgabe.
    Inspizieren wir den laufenden Container, bekommen wir eine ganze Menge Informationen, für die wir üblicherweise gar keine Verwendung haben. Das geht besser.
  • Effective Docker Cheatsheet

    Docker Cheat Sheet

    Ich habe das Docker Handout erstellt. Eigentlich sollte hier alles drauf sein, was man braucht um effektiv mit Docker arbeiten zu können.
  • Chaos Tests

    Chaos Testing

    In verteilten Systemen können wir Fehler niemals ausschließen. Die möglichen Fehlerquellen sind fast unendlich.
    • partieller oder totaler Netzwerkausfall
    • Datenbankprobleme
    • Anwendungen / Services sind kurzfristig / langfristig nicht verfügbar
    • Lastprobleme
    • Sicherheit / Firewall / ungültige Zertifkate
    Resilient Software sollte so geschrieben sein, dass Fehler akzeptiert werden und der Aufrufer noch zumindest teilweise das System bedienen kann.
    Netflix hat mit seiner Werkzeug-Box SimianArmy Tools für das Chaos-Testing erstellt und damit Chaos-Testing salonfähig gemacht. Chaos-Testing folgt den Prinzipien des Chaos. Beispielsweise fährt Chaos-Monkey durch Zufall ausgewählte Server-Instanzen herunter, genau wie ein Affe, der wahllos Kabel zieht.
    Warum macht Netflix das? Weil nur dann sichergestellt ist, dass ein System auch dann funktioniert, wenn Upstream-Services nicht verfügbar* sind. Ein Entwickler kann sich niemals darauf verlassen, dass der Service, den er gerade aufruft auch verfügbar ist - Chaos.
  • Docker Swarm Health Checks

    Docker Swarm Mode Health Checks

    TLDR;

    • Die Sourcen sind unter : https://github.com/effective-docker/docker-healthcheck.git
    • Swarm Scheduler arbeitet mit den Container Health Checks
    • Nur healthy Container werden geroutet.
    • Nach drei fehlgeschlagenen Health-Checks wird ein Container neu gestartet (ggf. auch auf einem anderen Knoten)

    Docker Swarm Mode

    Im letzten Eintrag haben wir uns mit Health Checks in Containern beschäftigt. Das alleine ist schon eine sehr wichtige Funktionalität, entwickelt ihr Potential allerdings erst in Zusammenarbeit mit einem Scheduler der das aktiv unterstützt. In diesem Artikel konzentrieren wir uns auf Docker Swarm im Swarm Mode (ab 1.12)
  • Docker Health Checks

    Docker Health Checks

    TLDR;


    Docker Container Health Checks

    Anwendungen zu deployen ist einfach, und Docker Container zu starten ist noch einfacher. Ein einfaches docker run und schon sind wir live. Das funktioniert auch eine ganze Zeit bis zum ersten Problem - sei es nun eine Lastspitze, ein Bug, ein Amoklaufender Prozess oder einfach ein temporäres Netzwerkproblem. Die Anwendung ist nicht erreichbar, unsere E-Commerce-Plattform ist für die Kunden nichts weiter als eine 500 - Wir arbeiten an einer Lösung und bis wir diese gefunden haben ist die Bestellung meistens schon bei der Konkurrenz gelandet.