Lösung: Ubuntu Server
Vollständige docker-compose.yml
Abschnitt betitelt „Vollständige docker-compose.yml“services: ubuntu: image: ubuntu:24.04 container_name: ubuntu-lab hostname: ubuntu-server restart: unless-stopped stdin_open: true tty: true ports: - "2222:22" volumes: - ubuntu_home:/home - ./shared:/shared command: > bash -c " apt-get update && apt-get install -y openssh-server sudo nano vim curl wget htop net-tools && useradd -m -s /bin/bash student && echo 'student:student123' | chpasswd && usermod -aG sudo student && mkdir -p /run/sshd && echo 'PermitRootLogin no' >> /etc/ssh/sshd_config && echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config && /usr/sbin/sshd -D "
volumes: ubuntu_home:Erwartete Ausgaben
Abschnitt betitelt „Erwartete Ausgaben“Container starten
Abschnitt betitelt „Container starten“$ docker compose up -d[+] Running 2/2 ✔ Network ubuntu-lab_default Created ✔ Container ubuntu-lab StartedLogs während Installation
Abschnitt betitelt „Logs während Installation“$ docker compose logs -f ubuntuubuntu-lab | Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]ubuntu-lab | ...ubuntu-lab | Setting up openssh-server (1:9.6p1-3ubuntu13) ...ubuntu-lab | ...ubuntu-lab | Server listening on 0.0.0.0 port 22.ubuntu-lab | Server listening on :: port 22.SSH-Verbindung
Abschnitt betitelt „SSH-Verbindung“$ ssh student@localhost -p 2222The authenticity of host '[localhost]:2222' can't be established.ED25519 key fingerprint is SHA256:xxxxx.Are you sure you want to continue connecting (yes/no)? yes
student@ubuntu-server:~$ whoamistudent
student@ubuntu-server:~$ uname -aLinux ubuntu-server 6.x.x-linuxkit #1 SMP ... x86_64 GNU/LinuxAntworten auf Reflexionsfragen
Abschnitt betitelt „Antworten auf Reflexionsfragen“1. Warum Port 2222 statt 22?
Abschnitt betitelt „1. Warum Port 2222 statt 22?“- Port 22 ist auf vielen Systemen bereits belegt (lokaler SSH-Server)
- Ports unter 1024 benötigen auf Linux Root-Rechte
- Best Practice: Nicht-Standard-Ports für Container verwenden
- Mehrere SSH-Server können parallel laufen (verschiedene Ports)
2. Unterschied docker exec vs. SSH
Abschnitt betitelt „2. Unterschied docker exec vs. SSH“| Aspekt | docker exec | SSH |
|---|---|---|
| Netzwerk | Direkt über Docker | Über TCP/IP |
| Authentifizierung | Docker-Rechte | User/Password oder Key |
| Logging | Nur Docker-Logs | SSH-Logs + Auth-Logs |
| Realitätsnähe | Docker-spezifisch | Wie echter Server |
| Geschwindigkeit | Schneller | Etwas langsamer |
Wann was?
docker exec: Schnelles Debugging, Administration- SSH: Realistische Übung, Remote-Zugriff simulieren
3. Warum PermitRootLogin no?
Abschnitt betitelt „3. Warum PermitRootLogin no?“- Sicherheit: Root-Account ist bekannt → Brute-Force-Ziel
- Best Practice: Normaler User +
sudostatt direkter Root-Login - Audit: Nachvollziehbar wer was gemacht hat
- Prinzip der geringsten Rechte: Nur Root wenn nötig
4. Was passiert mit /home nach docker compose down?
Abschnitt betitelt „4. Was passiert mit /home nach docker compose down?“Die Daten bleiben erhalten, weil wir ein named Volume verwenden:
volumes: - ubuntu_home:/homedocker compose down→ Volume bleibtdocker compose down -v→ Volume wird gelöscht
Prüfen:
docker volume ls | grep ubuntuBonus: SSH-Key statt Passwort
Abschnitt betitelt „Bonus: SSH-Key statt Passwort“Auf dem Host (einmalig)
Abschnitt betitelt „Auf dem Host (einmalig)“# Key generieren (falls nicht vorhanden)ssh-keygen -t ed25519 -f ~/.ssh/docker_ubuntu
# Public Key anzeigencat ~/.ssh/docker_ubuntu.pubIm Container
Abschnitt betitelt „Im Container“# Als student einloggenssh student@localhost -p 2222
# SSH-Verzeichnis erstellenmkdir -p ~/.sshchmod 700 ~/.ssh
# Public Key hinzufügen (den Output von oben einfügen)echo "ssh-ed25519 AAAA... your@email" >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keysVerbinden mit Key
Abschnitt betitelt „Verbinden mit Key“ssh -i ~/.ssh/docker_ubuntu student@localhost -p 2222Alternative: Dockerfile für persistentes Setup
Abschnitt betitelt „Alternative: Dockerfile für persistentes Setup“Statt jedes Mal Pakete zu installieren:
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \ openssh-server sudo nano vim curl wget htop net-tools \ && rm -rf /var/lib/apt/lists/*
RUN useradd -m -s /bin/bash student \ && echo 'student:student123' | chpasswd \ && usermod -aG sudo student
RUN mkdir -p /run/sshd \ && echo 'PermitRootLogin no' >> /etc/ssh/sshd_config \ && echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]services: ubuntu: build: . container_name: ubuntu-lab hostname: ubuntu-server restart: unless-stopped ports: - "2222:22" volumes: - ubuntu_home:/home - ./shared:/shared
volumes: ubuntu_home:Vorteil: Schnellerer Start, da Pakete bereits im Image sind.