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"