Skip to main content

Grundlagen

1. 🔧 Installation
🖥 Windows

    Installiere Docker Desktop
    👉 https://www.docker.com/products/docker-desktop/

🐧 Linux (Debian/Ubuntu)
Repository hinzufügen

sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | \
    sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/debian $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker installieren

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io \
    docker-buildx-plugin docker-compose-plugin

Benutzer zur docker-Gruppe hinzufügen

sudo usermod -aG docker $USER

    Danach ab- und wieder anmelden.

2. ⚙️ Docker Daemon konfigurieren

Erstelle oder bearbeite /etc/docker/daemon.json:

{
  "data-root": "/srv/docker",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "registry-mirrors": ["https://nexus.unternehmen.de:15000"],
  "insecure-registries": ["myregistry.local:5000"]
}

Docker danach neu starten:

sudo systemctl daemon-reexec
sudo systemctl restart docker

3. 📦 Docker-Befehle (Basics)
Befehl    Beschreibung
docker ps -a    Alle Container anzeigen
docker run -it ubuntu bash    Interaktiven Container starten
docker stop <name>    Container stoppen
docker start <name>    Container starten
docker exec -it <name> bash    Konsole im Container öffnen
docker rm <name>    Container löschen
4. 🔁 Volumes, Ports & Namen

docker run -d \
  --name meinweb \
  -p 8080:80 \
  -v /srv/www:/usr/share/nginx/html \
  nginx

    -p: Hostport:Containerport

    -v: Volume Mount

    --name: sprechbarer Name

5. 🏗 Docker Compose
Beispiel

services:
  web:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    restart: unless-stopped

Starten mit:

docker compose up -d

6. 🔐 Proxy & Netzwerk
HTTP-Proxy konfigurieren (systemd)

# /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://10.96.10.145:7070"
Environment="NO_PROXY=localhost,127.0.0.1,.mein.netz"

sudo systemctl daemon-reload
sudo systemctl restart docker

7. 💾 Import / Export von Images & Containern
🔸 Image sichern/laden

docker save mein-image:1.0 -o mein-image.tar
docker load -i mein-image.tar

🔹 Container exportieren/importieren

docker export mein-container | gzip > mein-container.tar.gz
gunzip -c mein-container.tar.gz | docker import - mein-image:from-container

Vergleich    save/load    export/import
Art    Image    Container-Dateisystem
Metadaten (CMD, ENV, Tags)    ✅ enthalten    ❌ fehlen
Typische Anwendung    Image-Transfer    Dateisystem-Snapshot
8. 🧽 Aufräumen

docker system prune -af
docker image prune -af
docker container prune -f
docker network prune -f

9. 🧑‍🔧 Eigene Registry (lokal)

docker run -d \
  -p 5000:5000 \
  --restart always \
  --name registry \
  registry:2

Image taggen & pushen:

docker tag nginx localhost:5000/nginx
docker push localhost:5000/nginx

10. 🧰 Management-Tools
📊 Portainer

docker volume create portainer_data

docker run -d \
  --name portainer \
  -p 9000:9000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  --restart=unless-stopped \
  portainer/portainer-ce

🏢 Nexus3 (Docker Registry)

services:
  nexus:
    image: sonatype/nexus3
    ports:
      - "8081:8081"
      - "15000:15000"
    volumes:
      - ./nexus-data:/nexus-data
    restart: unless-stopped

11. 🧪 Beispiel: Jenkins-Slave

services:
  jenkins_slave:
    image: mein/jenkins-slave:2.15.0
    environment:
      - JENKINS_SLAVE_NAME=jenkins01
      - JENKINS_MASTER_URL=http://jenkins:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

12. 🧪 Beispiel: MongoDB

services:
  mongodb:
    image: mongo:6.0
    ports:
      - "27017:27017"
    volumes:
      - ./data:/data/db
    restart: unless-stopped

13. 🧪 Beispiel: Apache mit PHP

FROM ubuntu:22.04

RUN apt-get update && apt-get install -y \
    apache2 php libapache2-mod-php sendmail ssmtp && \
    apt-get clean

COPY default.conf /etc/apache2/sites-available/000-default.conf
COPY ssmtp.conf /etc/ssmtp/ssmtp.conf
COPY revaliases /etc/ssmtp/revaliases

VOLUME ["/data"]
EXPOSE 80

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]