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-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: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
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:p: Hostport:Containerport
-v:v: Volume Mount
--name:name: sprechbarer Name
5. 🏗 Docker Compose
Beispiel
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"]