Zum Inhalt springen

Aufgabe 4: Ubuntu Server

Du startest einen Ubuntu-Server als Container und verbindest dich via SSH – ideal zum Testen von Linux-Befehlen in einer isolierten Umgebung.

Terminal-Fenster
mkdir ubuntu-lab
cd ubuntu-lab
docker-compose.yml
services:
ubuntu:
image: ubuntu:24.04
container_name: ubuntu-lab
hostname: ubuntu-server
restart: unless-stopped
stdin_open: true # Hält Container am Laufen
tty: true # Terminal-Unterstützung
ports:
- "2222:22" # SSH auf Port 2222
volumes:
- ubuntu_home:/home
- ./shared:/shared # Geteilter Ordner mit Host
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:
Terminal-Fenster
mkdir shared
echo "Hallo vom Host!" > shared/test.txt
Terminal-Fenster
docker compose up -d

Warte bis du in den Logs siehst:

Server listening on 0.0.0.0 port 22.
Terminal-Fenster
ssh student@localhost -p 2222

Passwort: student123

Bei der Frage “Are you sure you want to continue connecting?” → yes eingeben.

Nach dem Login:

Terminal-Fenster
# Wer bin ich?
whoami
# System-Info
uname -a
cat /etc/os-release
# Installierte Tools testen
htop # Prozess-Monitor (q zum Beenden)
curl ifconfig.me # Externe IP
# Geteilten Ordner prüfen
cat /shared/test.txt
# Datei erstellen (bleibt nach Neustart)
echo "Hallo aus dem Container!" > ~/meine-datei.txt
Terminal-Fenster
# Als root arbeiten
sudo su -
# Paket installieren
apt install -y neofetch
neofetch
# Zurück zum normalen User
exit

Alternative ohne SSH:

Terminal-Fenster
# Als student
docker exec -it -u student ubuntu-lab bash
# Als root
docker exec -it ubuntu-lab bash
Terminal-Fenster
# Stoppen (Daten bleiben)
docker compose stop
# Entfernen (Daten im Volume bleiben)
docker compose down
# Alles löschen inkl. Daten
docker compose down -v

Falls du nur schnell eine Ubuntu-Shell brauchst:

docker-compose.yml
services:
ubuntu:
image: ubuntu:24.04
container_name: ubuntu-quick
stdin_open: true
tty: true
volumes:
- ./shared:/shared
Terminal-Fenster
docker compose up -d
docker exec -it ubuntu-quick bash
  1. Warum verwenden wir Port 2222 statt 22?
  2. Was ist der Unterschied zwischen docker exec und SSH-Verbindung?
  3. Warum sollte man PermitRootLogin no setzen?
  4. Was passiert mit den Daten in /home nach docker compose down?

Container noch nicht bereit. Warte und prüfe Logs:

Terminal-Fenster
docker compose logs -f ubuntu

Falsches Passwort. Default: student123

Terminal-Fenster
# Alten Key entfernen
ssh-keygen -R "[localhost]:2222"

Zurück zur Lab-Übersicht →