Loading...
5 Docker Projects To Master Docker

5 Docker Projects To Master Docker

Jonas Scholz - Co-Founder von sliplane.ioJonas Scholz
4 min

Als Docker Captain und Mitgründer von einem Docker-Hosting-Unternehmen habe ich schon oft gesehen, wie Leute mit Docker kämpfen und Fehler machen.

Die meisten Entwickler "lernen" Docker, indem sie einfach ein Dockerfile von Stack Overflow kopieren und fertig. Aber wenn Du Container wirklich verstehen willst – ihre Grenzen, Macken und wie Du sie zu Deinem Vorteil biegst – dann musst Du selbst mal rumspielen. Hier sind 5 praktische Projekte, mit denen Du Deine Docker-Skills schnell deutlich verbessern kannst.

Sind das Sachen, die Du jeden Tag brauchen wirst? Nein. Werden sie Dir aber vielleicht in fünf Jahren mal in der ein oder anderen verrückten Situation den Arsch retten? Vielleicht, oder zumindest hoffe ich das

1. Baue das kleinste Docker-Image, das geht, ohne dass alles kaputtgeht

Du hast schon ein Projekt. Vielleicht ein Next.js Frontend oder eine Flask API. Deine Challenge: Krame das Image so klein wie möglich. Nicht nur die Basis ändern, sondern wirklich Dateien und Layers entfernen, bis der Container nicht mehr läuft.

Finde dann raus, warum er kaputtging. Versuch es zu umgehen. Versuch es nochmal. Geh noch kleiner.

So lernst Du, was Deine App wirklich braucht, wie Layer funktionieren und wie Abhängigkeiten sich still und heimlich einschleichen.

Hilfreich dabei sind Tools wie docker history oder dive, um zu sehen, was wirklich drinsteckt.

2. Versuch, etwas zu dockerizen, das eigentlich nicht dockerizebar sein sollte

Such Dir etwas aus, das sich einfach falsch anfühlt. Spotify. Eine grafische IDE. Deine komplette Linux-Desktop-Umgebung. Oder sogar Windows.

Versuch es trotzdem zu containerisieren. Die meisten Sachen werden scheitern.

Genau darum geht’s. Wenn es kaputtgeht, frag Dich warum. Liegt’s an Docker? Am Kernel? An Hardware-Abhängigkeiten? An Annahmen über grafische Ausgabe?

Du verstehst Docker erst richtig, wenn Du mal etwas total Absurdes ausprobiert hast und zugesehen hast, wie es scheitert.

3. Baue ein Base Image von Grund auf selbst

Die meisten machen Dockerfiles so:

FROM node

Oder

FROM ubuntu

Jetzt mach es anders. Nimm stattdessen:

FROM scratch

Und baue Dein eigenes Base Image, das Deine App zum Laufen bringt.

Du wirst sehen, wie Dateien in einen Container kommen, was eine ausführbare Datei wirklich braucht, warum manche Leute Alpine nutzen und andere nicht, was glibc überhaupt ist und wie CMD und ENTRYPOINT sich wirklich verhalten.

Das ist zwar nicht praktisch für Produktion, aber mega hilfreich, um zu verstehen, wie Container eigentlich funktionieren. (Für die Produktion: Bitte, bitte nutze normale Images!)

4. Parametrisiere Deine Docker-Builds

Open Source Projekte veröffentlichen oft viele Varianten ihres Docker Images. Ein Image auf Debian-Basis, eins auf Alpine, eins optimiert für Größe, eins fürs Debugging, eins für verschiedene CPU-Architekturen.

Versuch, sowas Ähnliches zu bauen. Lerne, wie Du Build-Argumente nutzt, wie man bedingte Logik in Dockerfiles schreibt und wie man aus einer Pipeline mehrere Outputs erzeugt.

Und vor allem: Finde raus, wie Du dieselbe lahme Logik nicht dauernd neu schreiben musst.

5. Spiel das „Was wäre wenn ich unsicheren Code ausführe“ Spiel

Stell Dir vor, Du willst unsicheren Code in einem Docker Container laufen lassen. Ein Nutzer lädt ein Script hoch und Dein Backend führt es aus. Was müsstest Du tun, damit das sicher ist?

Probier es aus. Lass unsicheren Code wirklich in einem Container laufen und fang dann an, alles abzusichern.

Schau Dir seccomp Profile an. Mach Container read-only. Nutze User Namespaces. Droppe Capabilities. Versuch Privilege Escalation. Versuch aus Deinem eigenen Sandbox zu entkommen.

Hier hört Docker auf und echtes Sandboxing fängt an.

Bonus-Projekt: Lass die Docker CLI ganz weg

Docker ist nur ein Frontend. Dahinter stecken andere Tools wie BuildKit, containerd und Image Spezifikationen.

Versuch, Docker komplett zu überspringen.

Nutze buildctl direkt. Erstelle manuell ein OCI Image. Pushe es in ein Registry ohne docker push. Lies die OCI Image Spec und versuch, nachzubauen, was Docker macht.

Das wird Dein mentales Modell von Docker zerbrechen und durch ein viel genaueres ersetzen.

Das ist der Endgegner im Container-Learning.

Cheers,
Jonas, Co-Founder von Sliplane

Willkommen in der Container-Cloud

Sliplane macht es einfach, Container in der Cloud zu deployen und bei Bedarf zu skalieren. Probier es jetzt aus!