Docker Basics & Power Snippets für Ubuntu 24.04 Teil 1

Docker Basics & Power Snippets für Ubuntu 24.04 Teil 1

Docker ist heute das Herzstück vieler moderner Software- und Entwicklungsumgebungen – auch auf Ubuntu 24.04. Mit Containern lässt sich Software unabhängig, schnell, sicher und flexibel bereitstellen und verwalten. Gerade für Entwickler, Admins und DevOps-Teams ist das Wissen um die wichtigsten Docker-Befehle Gold wert.
Neben den bekannten Kommandos gibt es viele Power-Snippets und clevere One-Liner, die den Alltag enorm erleichtern – ob beim Starten, Stoppen, Debuggen, Überwachen oder Aufräumen von Containern und Images.
Im folgenden Abschnitt findest du eine Zusammenstellung der wichtigsten und nützlichsten Docker-Befehle für Ubuntu 24.04, inklusive hilfreicher Tipps für die tägliche Arbeit.

1. Images & Container verwalten

# Liste aller laufenden Container
docker ps

# Liste aller Container (auch gestoppte)
docker ps -a

# Liste aller lokalen Images
docker images

# Image herunterladen (pull)
docker pull ubuntu:24.04

# Container starten (im Hintergrund, mit Name)
docker run -d --name mein-nginx nginx:latest

# Container mit Shell starten (interaktiv)
docker run -it --rm ubuntu:24.04 bash

2. Container steuern

# Einen Container stoppen
docker stop <containername>

# Einen Container starten (der gestoppt wurde)
docker start <containername>

# Einen Container entfernen (löschen)
docker rm <containername>

# Ein Image entfernen
docker rmi <imagename>

3. In laufende Container einsteigen

# Shell in einen laufenden Container bekommen
docker exec -it <containername> bash
# (oder sh, wenn bash nicht installiert ist)

4. Logs & Ressourcen

# Logs eines Containers live verfolgen
docker logs -f <containername>

# Nur die letzten 100 Zeilen anzeigen
docker logs --tail 100 <containername>

# Ressourcenverbrauch aller Container anzeigen
docker stats

5. Dateien kopieren

# Datei vom Host in den Container kopieren
docker cp /pfad/zur/datei <containername>:/pfad/im/container

# Datei aus dem Container auf den Host kopieren
docker cp <containername>:/pfad/im/container /ziel/pfad/auf/dem/host

6. Netzwerk & Ports

# Alle Docker-Netzwerke anzeigen
docker network ls

# Ins Netzwerk eines Containers „eintreten“ (z. B. für Troubleshooting)
docker run -it --network container:<containername> alpine sh

7. Volumes

# Alle Volumes anzeigen
docker volume ls

# Ein Volume inspizieren
docker volume inspect <volumename>

# Ungenutzte Volumes löschen
docker volume prune

8. Clean-Up & Platz sparen

# Alle gestoppten Container löschen
docker container prune

# Nicht mehr verwendete Images löschen
docker image prune

# ALLES Unbenutzte löschen (Container, Images, Volumes, Netzwerke)
docker system prune -a

9. Docker Compose

# Container aus docker-compose.yml starten
docker compose up -d

# Logs aller Dienste anzeigen
docker compose logs -f

# Services stoppen und entfernen
docker compose down

# Ein einzelnes Service neustarten
docker compose restart <servicename>

10. Weniger bekannt, aber nützlich

# Prozessliste eines Containers ansehen (wie top)
docker top <containername>

# Umgebungsvariablen eines Containers inspizieren
docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' <containername>

# Änderungen am Dateisystem eines laufenden Containers anzeigen
docker diff <containername>

# Einen neuen Image-Tag vergeben (taggen)
docker tag <image_id> meinrepo/meinimage:neuer-tag

# Ein Image exportieren (z. B. für Backup oder Transfer)
docker save -o image.tar <imagename>
# Importieren
docker load -i image.tar

# Einen Befehl ausführen, wenn der Container startet (override entrypoint)
docker run --entrypoint /bin/sh -it <image>

11. Troubleshooting

# Container Netzwerk-Probleme debuggen
docker exec -it <containername> ping 8.8.8.8

# Health-Status von Containern sehen
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}\t{{.Image}}'

# Aufräumen, alles was nicht genutzt wird
docker system prune -a --volumes

12. Extra: Shell-Tools für Vielnutzer

# Bash-Completion für Docker aktivieren (sehr nützlich!)
sudo apt install bash-completion
echo "source /usr/share/bash-completion/completions/docker" >> ~/.bashrc

# Fuzzy-Auswahl für Container/Images mit fzf (bei vielen Containern/Images mega hilfreich!)
docker ps -a --format '{{.Names}}' | fzf | xargs -I {} docker logs -f {}
13. Quick-One-Liner: „Alle Container löschen“ (mit Vorsicht!)
bash
Kopieren
Bearbeiten
docker rm -f $(docker ps -aq)
(Löscht ALLE Container, auch laufende!)

 

 

Bilder für das Web aufbereiten

Bilder für das Web aufbereiten

Tools installieren

Die wichtigsten Tools:

  • ImageMagick (mächtig, wandelt/skalieren/umbenennen/etc.)

  • jpegoptim (optimiert JPEGs)

  • optipng (optimiert PNGs)

  • mogrify (Teil von ImageMagick, arbeitet auf Stapel)

Installiere alles (Ubuntu/Debian):

sudo apt update
sudo apt install imagemagick jpegoptim optipng

Bilder skalieren und konvertieren (ImageMagick)

Beispiel: Alle Bilder auf maximale Breite 1200px bringen (Höhe automatisch, Verhältnis bleibt)

mogrify -resize 1200x1200\> -path ./output/ *.jpg *.jpeg *.png
  • Alle Bilder werden kopiert und skaliert ins Verzeichnis output/.

  • Nur Bilder, die größer sind, werden verkleinert.

  • *.jpg *.jpeg *.png funktioniert mit Bash, ansonsten einzeln laufen lassen.

Komprimieren / Optimieren

JPEG:

jpegoptim --max=80 --strip-all ./output/*.jpg
  • Qualität auf 80% (guter Standardwert)

  • Entfernt EXIF-Daten und Kommentare

PNG:

  • Starke Kompression (verlustfrei bei PNG)
optipng -o7 ./output/*.png

Optional: In WebP konvertieren

WebP bietet noch bessere Kompression für’s Web:

  • Erzeugt WebP-Bilder mit Qualität 80
sudo apt install webp
cd output/
for i in *.jpg *.jpeg *.png; do
  cwebp -q 80 "$i" -o "${i%.*}.webp"
done

Dateinamen anpassen (optional)

Um Leerzeichen zu vermeiden oder Kleinschreibung zu erzwingen:

rename 'y/A-Z/a-z/' *.JPG
rename 's/ /_/g' *

Kurzes Komplett-Beispiel (als Script):

Speichere das Folgende z. B. als bilder-weboptimieren.sh im Bilder-Ordner und mache es mit chmod +x bilder-weboptimieren.sh ausführbar:
#!/bin/bash

# --- Variablen und Hilfetext ---
SRC="$1"
DST="${2:-output}"

if [ -z "$SRC" ] || [ ! -d "$SRC" ]; then
  echo "Nutzung: $0 QUELLORDNER [ZIELORDNER]"
  echo "Beispiel: $0 ./meine_bilder ./fertig_fürs_web"
  exit 1
fi

mkdir -p "$DST"

# --- Skalieren ---
echo "Skaliere Bilder aus '$SRC' nach '$DST' (max 1200px)..."
mogrify -resize 1200x1200\> -path "$DST" "$SRC"/*.jpg "$SRC"/*.jpeg "$SRC"/*.png

# --- JPEG optimieren ---
echo "Optimiere JPEGs..."
jpegoptim --max=80 --strip-all "$DST"/*.jpg "$DST"/*.jpeg

# --- PNG optimieren ---
echo "Optimiere PNGs..."
optipng -o7 "$DST"/*.png

# --- WebP optional (auskommentieren, falls nicht benötigt) ---
# echo "Konvertiere nach WebP..."
# for i in "$DST"/*.jpg "$DST"/*.jpeg "$DST"/*.png; do
#   [ -e "$i" ] || continue
#   cwebp -q 80 "$i" -o "${i%.*}.webp"
# done

echo "Fertig! Optimierte Bilder liegen in: $DST"

Aufrufen mit Quell- und Zielordner:

./bilder-weboptimieren.sh ./mein_bilderordner ./fertig_fürs_web
  • Quellordner: Pflicht

  • Zielordner: Optional, sonst wird output verwendet.

Code-Snipptes für Vim

Code-Snipptes für Vim

Spezielle und weniger bekannte Code-Snippets für Vim

Fügt die Zahlen von 1 bis 10 in aufeinanderfolgenden Zeilen ein.

:put =range(1, 10)

HTML-Tags automatisch um Text herum einfügen

Markiere einen Textbereich, drücke <leader>t und gib einen HTML-Tag ein, um den markierten Bereich in diesen Tag einzuschließen.

vnoremap <leader>t <Esc>`<i<<C-r>=input("Tag: ")<CR>><Esc>`>a</<C-r>=input("Tag: ")<CR>><Esc>

Schnelle Dateinavigation mit Register

Zeigt alle geöffneten Buffers an und erlaubt schnelles Umschalten zwischen ihnen.

nnoremap <leader>b :ls<CR>:b<Space>

Zeilen in alphabetischer Reihenfolge sortieren

Markiere die gewünschten Zeilen im visuellen Modus und führe den Befehl aus, um sie alphabetisch zu sortieren.

:'<,'>sort

Zeilen innerhalb eines Blocks kommentieren

Markiere einen Block und drücke <leader>c, um alle Zeilen zu kommentieren (hier mit //).

xnoremap <leader>c :s/^/\/\/ /<CR>

Wörter umkehren

Dieser Befehl kehrt jedes Wort in der Datei um.

:%s/\w\+/\=join(reverse(split(submatch(0), '.\zs')), '')/g

Umschalten zwischen relativen und absoluten Zeilennummern

Drücke <leader>n, um zwischen absoluten und relativen Zeilennummern zu wechseln.

nnoremap <leader>n :set invnumber invrelativenumber<CR>

Nur Zahlen in einem Text extrahieren

Löscht alle Zeilen, die keine Zahlen enthalten.

:g/[^0-9]/d

Anpassen der .vimrc mit zusätzlichen Funktionen

" Grundlegende Einstellungen
set nocompatible         " Deaktiviert Kompatibilität mit Vi
set number               " Zeilennummern anzeigen
set relativenumber       " Relative Zeilennummern anzeigen
set showcmd              " Zeigt eingegebene Befehle unten an
set cursorline           " Hervorheben der aktuellen Zeile
set wildmenu             " Bessere Autovervollständigung im Befehlsmodus
set hlsearch             " Suchergebnisse hervorheben
set incsearch            " Inkrementelle Suche aktivieren
set ignorecase           " Suche ohne Berücksichtigung der Groß-/Kleinschreibung
set smartcase            " Berücksichtigt Groß-/Kleinschreibung, wenn Großbuchstaben verwendet werden
set clipboard=unnamedplus " Zwischenablage mit System teilen
 
" Tab- und Einrückungseinstellungen
set expandtab            " Tabs in Spaces umwandeln
set tabstop=4            " Tabweite auf 4 Spaces setzen
set shiftwidth=4         " Einrückung auf 4 Spaces setzen
set autoindent           " Automatische Einrückung aktivieren
 
" Statuszeile immer anzeigen
set laststatus=2
 
" Dateitypabhängige Einstellungen
autocmd FileType python setlocal expandtab tabstop=4 shiftwidth=4
autocmd FileType make setlocal noexpandtab
 
" Entfernen von Leerzeichen am Zeilenende beim Speichern
autocmd BufWritePre * %s/\s\+$//e
 
" Automatische Speicherung bei Fokusverlust
autocmd FocusLost * :wa
 
" Cursorposition beim erneuten Öffnen einer Datei wiederherstellen
autocmd BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
 
" Schnelles Umschalten zwischen letzten zwei Buffern
nnoremap <leader><leader> <C-^>
 
" Hintergrundfarbe je nach Tageszeit wechseln
autocmd VimEnter * if strftime("%H") < 18 | colorscheme morning | else | colorscheme evening | endif
 
" Bessere Navigation für lange Zeilen
nnoremap j gj
nnoremap k gk
 
" Highlight der aktuellen Zeile im Einfügemodus deaktivieren
autocmd InsertEnter * set nocursorline
autocmd InsertLeave * set cursorline
 
" Zahlenreihen einfügen
command! -nargs=1 NumberSeq put =range(1, <args>)

.vimrc speichern

Füge den obigen Inhalt ein und speichere die Datei mit :wq

Lade die Konfiguration neu, indem du :source ~/.vimrc in Vim ausführst, oder starte Vim neu.

vim ~/.vimrc