Skip to main content

Grundlagen

🔧 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 laufende Container
docker ps -a alle Container
docker run -it ubuntu /bin/bash interaktiver Container mit Konsole
docker run -d -p 80:80 nginx Container im Hintergrund mit Portweiterleitung
docker stop <name> Container stoppen
docker start <name> Container starten
docker rm <name> Container löschen
docker exec -it <name> bash Befehl im Container ausführen


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"]

14. 🧪 Beispiel: Docker compose mit Build

services:
  recursor:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - PDNS_RECURSOR_API_KEY
    ports:
      - "2053:53"
      - "2053:53/udp"
      - "8082:8082"