Docker Update
This commit is contained in:
@@ -47,6 +47,7 @@ Jede **Crumbpage** behandelt ein Kernthema und baut auf dem vorherigen auf. Du l
|
||||
| **21** | Backup, RAID & Cron | `#backup #3-2-1 #raid #rsync #cron` | 🆕 Neu |
|
||||
| **22** | Hallo Nullfeld | `#philosophie #crew #resonanz #nullfeld` | 🆕 Neu |
|
||||
| **23** | AI, Vektor & Philosophie | `#ai #ki #vektor #emergenz #samurai-shaolin` | 🆕 Neu |
|
||||
| **24** | **Docker - Der Wal** | `#container #compose #images #tupperware` | 🆕 Neu |
|
||||
|
||||
---
|
||||
|
||||
@@ -604,6 +605,31 @@ Warum Resonanz vor Regel kommt?
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 24: Docker - Der Wal im Wald
|
||||
|
||||
**Was du lernst:**
|
||||
- Was sind Container? (Tupperware für Code)
|
||||
- Wie installiere ich Docker?
|
||||
- Docker Compose (Kochen mit Rezept)
|
||||
- Wichtige Befehle (ps, logs, exec)
|
||||
|
||||
**Warum das wichtig ist:**
|
||||
- "It works on my machine" gilt nicht mehr.
|
||||
- Du willst Dienste sauber trennen, ohne für jeden eine eigene VM zu bauen.
|
||||
- Moderne Admin-Arbeit ist ohne Container kaum denkbar.
|
||||
|
||||
**Tupperware-Theorie:**
|
||||
```
|
||||
VM = Ein ganzes Haus für eine Pizza.
|
||||
Container = Eine Tupperdose für die Pizza.
|
||||
```
|
||||
|
||||
**→ [Zur Crumbpage: Docker](crumbpage-24-docker.md)**
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
## 🎯 Wie du den Vektor durchläufst
|
||||
|
||||
### Empfohlene Reihenfolge
|
||||
@@ -655,7 +681,10 @@ START: Absolute Basics
|
||||
│ │
|
||||
├─ Pfad 22: Nullfeld ──────────────┤ (Reflexion)
|
||||
│ │
|
||||
└─ Pfad 23: AI & Philosophie ──────→ SAMURAI ⟡ SHAOLIN
|
||||
├─ Pfad 23: AI & Philosophie ──────→ SAMURAI ⟡ SHAOLIN
|
||||
│
|
||||
└─ Pfad 24: Docker ────────────────→ MODERN ERA
|
||||
|
||||
```
|
||||
|
||||
### Zeitaufwand (circa)
|
||||
@@ -671,6 +700,7 @@ Pfad 20: ~2-3 Stunden (Kernel Deep Dive - DANGER ZONE!)
|
||||
Pfad 21: ~3-4 Stunden (Backup & Automatisierung)
|
||||
Pfad 22: ~1 Stunde (Reflexion & Philosophie)
|
||||
Pfad 23: ~2-3 Stunden (AI, Vektor & Philosophie - oder ein Leben lang?)
|
||||
Pfad 24: ~2-3 Stunden (Docker Basics)
|
||||
|
||||
Total: ~34-42 Stunden aktives Lernen
|
||||
```
|
||||
@@ -734,7 +764,9 @@ wsl --install
|
||||
├── ... (04-20)
|
||||
├── 21-backup-raid-cron.md
|
||||
├── 22-nullfeld-willkommen.md
|
||||
└── 23-ai-vektor-philosophie.md
|
||||
├── 22-nullfeld-willkommen.md
|
||||
├── 23-ai-vektor-philosophie.md
|
||||
└── 24-docker.md
|
||||
```
|
||||
|
||||
### Externe Ressourcen
|
||||
|
||||
267
crumbpage-24-docker.md
Normal file
267
crumbpage-24-docker.md
Normal file
@@ -0,0 +1,267 @@
|
||||
# 🧭 Crumbpage 24: Docker - Der Wal im Wald
|
||||
|
||||
**Subtitle:** *Warum Tupperware dein Leben verändert*
|
||||
**Pfad:** 24 von X (Der neue Horizont)
|
||||
**Schwierigkeit:** ⭐⭐⭐ (3/5)
|
||||
**Zeit:** ~2-3 Stunden
|
||||
**Voraussetzungen:** [Pfad 10: Services](crumbpage-10-services-ports.md), [Pfad 17: Workstation](crumbpage-17-workstation.md)
|
||||
|
||||
> *"Es läuft auf meinem Rechner!" - "Dann liefern wir deinen Rechner mit aus!"* - Die Geburtsstunde von Docker 🐳
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ Was ist ein Container? (Tupperware-Theorie)
|
||||
✓ Unterschied: VM vs. Container
|
||||
✓ Installation auf Linux (Der Server-Weg)
|
||||
✓ Docker Desktop (Der bequeme Mac/Windows-Weg)
|
||||
✓ Hello World (Der erste Wal)
|
||||
✓ Wichtige Befehle (ps, logs, exec)
|
||||
✓ Docker Compose (Das Rezeptbuch)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Verstehen, warum wir Dinge in Boxen packen
|
||||
- [ ] Einen Webserver starten, ohne ihn zu installieren
|
||||
- [ ] Container debuggen, wenn sie "Ups" machen
|
||||
- [ ] Eine komplette Umgebung mit einem Befehl starten (`docker compose up`)
|
||||
|
||||
---
|
||||
|
||||
## 🍱 Die Tupperware-Theorie (Konzepte)
|
||||
|
||||
Stell dir vor, du kochst Lasagne.
|
||||
|
||||
**Ohne Docker (Bare Metal):**
|
||||
Du schmierst die Lasagne direkt in den Rucksack. Wenn du danach Kuchen transportieren willst, schmeckt der nach Lasagne. Und der Rucksack ist ruiniert.
|
||||
|
||||
**Mit Docker (Container):**
|
||||
Du packst die Lasagne in eine Tupperdose. Den Kuchen in eine andere.
|
||||
- Beide sind im gleichen Rucksack (Server).
|
||||
- Sie berühren sich nicht.
|
||||
- Du kannst die Dosen stapeln.
|
||||
- Du kannst die Dose einfach jemand anderem geben, und die Lasagne bleibt Lasagne.
|
||||
|
||||
**Das ist Docker.**
|
||||
- **Image:** Das Rezept & die Zutaten (Read-only).
|
||||
- **Container:** Die gefüllte Tupperdose (Running instance).
|
||||
- **Volume:** Der Teller, auf dem du isst (Daten, die bleiben, wenn die Dose weg ist).
|
||||
|
||||
---
|
||||
|
||||
## 🐳 Installation
|
||||
|
||||
### Auf dem Server (Linux / Debian / Ubuntu)
|
||||
|
||||
Der "echte" Weg für dein Rechenzentrum.
|
||||
|
||||
```bash
|
||||
# 1. Alte Versionen entfernen (Hausputz)
|
||||
sudo apt remove docker docker-engine docker.io containerd runc
|
||||
|
||||
# 2. Repo hinzufügen & Installieren (Faulheits-Script von Docker)
|
||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
sudo sh get-docker.sh
|
||||
|
||||
# 3. User zur Docker-Gruppe (WICHTIG!)
|
||||
# Sonst musst du immer 'sudo' tippen. Das nervt.
|
||||
sudo usermod -aG docker $USER
|
||||
|
||||
# 4. Neu einloggen!
|
||||
logout
|
||||
# (Und wieder rein ssh-en)
|
||||
```
|
||||
|
||||
### Auf dem Mac (Docker Desktop)
|
||||
|
||||
Der "bequeme" Weg für deine Workstation.
|
||||
|
||||
Wir sind im Wald, aber manchmal darf man auch gemütlich auf der Veranda sitzen.
|
||||
**Docker Desktop** ist eine App. Sie startet eine kleine Linux-VM im Hintergrund und gibt dir eine schicke GUI.
|
||||
|
||||
1. Lade **Docker Desktop for Mac** herunter.
|
||||
2. Installiere es (Drag to Applications).
|
||||
3. Starte es.
|
||||
4. Warte, bis der Wal sich beruhigt hat.
|
||||
|
||||
**Vorteil:** Du siehst deine Container bunt und klickbar.
|
||||
**Nachteil:** Es zieht Akku wie ein hungriger Bär.
|
||||
|
||||
---
|
||||
|
||||
## 👋 Hello World
|
||||
|
||||
Der erste Test. Ob Linux oder Mac, ab hier ist alles gleich (dank Tupperware!).
|
||||
|
||||
```bash
|
||||
$ docker run hello-world
|
||||
```
|
||||
|
||||
**Was passiert hier?**
|
||||
1. Docker sucht das Image `hello-world` lokal.
|
||||
2. Findet es nicht ("Unable to find image...").
|
||||
3. Lädt es aus dem Internet (Docker Hub).
|
||||
4. Startet einen Container daraus.
|
||||
5. Der Container sagt "Hallo!", gibt Text aus und beendet sich.
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Grundbefehle (Deine Werkzeuge)
|
||||
|
||||
### 1. Was läuft hier eigentlich? (`ps`)
|
||||
|
||||
```bash
|
||||
docker ps # Zeigt NUR laufende Container
|
||||
docker ps -a # Zeigt ALLE (auch die toten)
|
||||
```
|
||||
|
||||
### 2. Der Container lebt, aber was tut er? (`logs`)
|
||||
|
||||
Wenn dein Webserver schweigt, schau in sein Tagebuch.
|
||||
|
||||
```bash
|
||||
docker logs <container_id_oder_name>
|
||||
docker logs -f my-web-server # -f wie "follow" (live zuschauen)
|
||||
```
|
||||
|
||||
### 3. Ich muss da rein! (`exec`)
|
||||
|
||||
Manchmal musst du in die Tupperdose klettern.
|
||||
|
||||
```bash
|
||||
# Öffnet eine Shell IM Container
|
||||
docker exec -it <container_name> /bin/bash
|
||||
# Oder wenn es minimal ist:
|
||||
docker exec -it <container_name> /bin/sh
|
||||
```
|
||||
*Tipp: `exit` bringt dich wieder raus. Keine Sorge, du warst nur zu Besuch.*
|
||||
|
||||
### 4. Weg damit! (`stop`, `rm`, `rmi`)
|
||||
|
||||
```bash
|
||||
docker stop <name> # Halt an!
|
||||
docker rm <name> # Wirf die Dose weg (Daten sind weg!)
|
||||
docker rmi <image_name> # Wirf das Rezept weg (Platz sparen)
|
||||
|
||||
# Der "Alles muss raus" Befehl (VORSICHT!):
|
||||
docker system prune -a
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎼 Docker Compose - Das Orchester
|
||||
|
||||
Einzelne Container starten (`docker run ...`) ist wie Kochen mit nur einer Hand. Mühsam.
|
||||
Wir wollen **Infrastruktur als Code**.
|
||||
|
||||
Dafür gibt es `docker-compose.yml` (oder `compose.yaml`).
|
||||
|
||||
**Beispiel: Ein Webserver**
|
||||
|
||||
Erstelle eine Datei `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
version: '3.8' # Egal, nimm einfach was aktuelles
|
||||
|
||||
services:
|
||||
webseite:
|
||||
image: nginx:alpine
|
||||
ports:
|
||||
- "8080:80" # Außen 8080 -> Innen 80
|
||||
volumes:
|
||||
- ./html:/usr/share/nginx/html # Mein Ordner -> Server Ordner
|
||||
restart: always
|
||||
```
|
||||
|
||||
**Erstelle eine index.html:**
|
||||
```bash
|
||||
mkdir html
|
||||
echo "<h1>Hallo aus der Dose!</h1>" > html/index.html
|
||||
```
|
||||
|
||||
**Starte das Orchester:**
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
*(`-d` heißt Detached: "Lauf im Hintergrund, nerv mich nicht")*
|
||||
|
||||
**Besuche:** http://localhost:8080
|
||||
|
||||
**Stoppe alles:**
|
||||
```bash
|
||||
docker compose down
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übung: Dein eigener kleiner Dienst
|
||||
|
||||
**Aufgabe:** Starte einen Python-Webserver, der dir Dateien serviert.
|
||||
|
||||
1. Erstelle ein Verzeichnis `mein-fileserver`.
|
||||
2. Erstelle eine `docker-compose.yml`.
|
||||
3. Nutze das Image `python:3.9-slim`.
|
||||
4. Der Befehl (`command`) soll sein: `python -m http.server 8000`.
|
||||
5. Mappe Port 9000 (außen) auf 8000 (innen).
|
||||
6. Mappe das aktuelle Verzeichnis als Volume.
|
||||
|
||||
<details>
|
||||
<summary>Lösung (Nicht spicken!)</summary>
|
||||
|
||||
```yaml
|
||||
services:
|
||||
files:
|
||||
image: python:3.9-slim
|
||||
ports:
|
||||
- "9000:8000"
|
||||
volumes:
|
||||
- .:/data
|
||||
working_dir: /data
|
||||
command: python -m http.server 8000
|
||||
```
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Troubleshooting
|
||||
|
||||
**Problem: "Permission denied"**
|
||||
*Lösung:* Hast du `sudo` vergessen? Oder bist du nicht in der `docker` Gruppe? (siehe Installation)
|
||||
|
||||
**Problem: "Port already in use"**
|
||||
*Lösung:* Irgendwas blockiert den Port. `docker ps` checken, oder laufen alte Dienste nativ?
|
||||
Ändere den Port in der Config (z.B. `"9999:80"`).
|
||||
|
||||
**Problem: Docker Desktop startet nicht**
|
||||
*Lösung:* Neustart. Ernsthaft. Manchmal verschluckt sich der Wal an einem Apfel.
|
||||
|
||||
---
|
||||
|
||||
## 📚 Weiterführende Links
|
||||
|
||||
- [Docker Hub](https://hub.docker.com/) (Der Supermarkt für Images)
|
||||
- [Compose File Reference](https://docs.docker.com/compose/compose-file/) (Die Bibel)
|
||||
- [Portainer](https://www.portainer.io/) (Eine GUI für den Browser, wenn du kein Desktop hast)
|
||||
|
||||
---
|
||||
|
||||
## 💭 Reflexion
|
||||
|
||||
Container ändern alles.
|
||||
Früher: "Installiere PHP, dann Apache, dann MySQL, oh Konflikt mit Version X..."
|
||||
Heute: `docker compose up`.
|
||||
|
||||
Du hast jetzt die Macht, komplexe Software in Sekunden zu starten und wieder rückstandsfrei zu entfernen.
|
||||
Nutze sie weise.
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: Philosophie](crumbpage-23-ai-vektor-philosophie.md) | [Zurück zur Übersicht](crumbforest-admin-vektor.md)
|
||||
Reference in New Issue
Block a user