Docker für Entwickler: Images, Container und Compose
Sie haben wahrscheinlich schon von Docker und Containern gehört, sind sich aber vielleicht nicht sicher, wie sie in Ihren täglichen Entwicklungsworkflow passen. Oder Sie haben Docker ausprobiert, aber die Konzepte von Images, Containern und Compose erscheinen verwirrend. Dieser Leitfaden führt Sie mit praktischen Beispielen durch die Grundlagen, damit Sie Docker effektiv in Ihren Projekten einsetzen können.
Was sind Docker-Images und Container?
Stellen Sie sich ein Docker-Image als Bauplan für Ihre Anwendung vor. Es enthält alles, was zum Ausführen Ihres Codes benötigt wird: das Betriebssystem, die Laufzeitumgebung, Bibliotheken und Ihre Anwendungsdateien. Images sind unveränderlich und werden aus einem Dockerfile erstellt.
Ein Container ist eine laufende Instanz eines Images. Wenn Sie einen Container starten, erstellt Docker eine isolierte Umgebung aus dem Image. Sie können mehrere Container aus demselben Image ausführen, jeder mit seinem eigenen Zustand.
Hauptunterschiede
| Image | Container |
|---|---|
| Schreibgeschützte Vorlage | Ausführbare Instanz |
| Aus Dockerfile erstellt | Aus Image erstellt |
| In Registry gespeichert | Läuft auf Host |
| Unveränderlich | Flüchtig (kann gestoppt, gestartet, gelöscht werden) |
Erstellen Ihres ersten Docker-Images
Lassen Sie uns eine einfache Node.js-App erstellen und containerisieren. Beginnen Sie mit einem Dockerfile im Projektstammverzeichnis:
# Use an official Node.js runtime as a parent image
FROM node:18-alpine
# Set the working directory
WORKDIR /app
# Copy package.json and package-lock.json
COPY package*.json ./
# Install dependencies
RUN npm ci --only=production
# Copy the rest of the application code
COPY . .
# Expose the port the app runs on
EXPOSE 3000
# Define the command to run the app
CMD ["node", "server.js"]
Erstellen Sie das Image mit:
docker build -t my-node-app .
Führen Sie einen Container aus dem Image aus:
docker run -p 3000:3000 -d my-node-app
Ihre App ist jetzt unter http://localhost:3000 erreichbar.
Container verwalten
Hier sind wichtige Befehle zur Containerverwaltung:
docker ps– laufende Container auflistendocker ps -a– alle Container auflisten (einschließlich gestoppter)docker stop <container_id>– einen laufenden Container stoppendocker rm <container_id>– einen gestoppten Container entfernendocker logs <container_id>– Container-Logs anzeigendocker exec -it <container_id> sh– eine Shell in einem laufenden Container öffnen
Multi-Container-Apps mit Docker Compose vereinfachen
Reale Anwendungen benötigen oft mehrere Dienste: einen Webserver, eine Datenbank, einen Cache usw. Die Verwaltung mit einzelnen docker run-Befehlen ist mühsam. Docker Compose ermöglicht es Ihnen, Multi-Container-Anwendungen mithilfe einer YAML-Datei zu definieren und auszuführen.
Erstellen Sie eine docker-compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DB_HOST=db
depends_on:
- db
db:
image: postgres:15-alpine
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=mydb
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Starten Sie alle Dienste mit:
docker compose up -d
Stoppen und entfernen Sie sie mit:
docker compose down
Best Practices für die Entwicklung
- Verwenden Sie .dockerignore, um unnötige Dateien (node_modules, .git) aus dem Build-Kontext auszuschließen.
- Nutzen Sie Layer-Caching: Ordnen Sie Dockerfile-Anweisungen so an, dass Abhängigkeiten installiert werden, bevor der Quellcode kopiert wird.
- Verwenden Sie Multi-Stage-Builds, um Produktions-Images klein zu halten.
- Speichern Sie Daten in Volumes für Datenbanken und andere zustandsbehaftete Dienste.
- Verwenden Sie Compose für die lokale Entwicklung, um produktionsähnliche Umgebungen nachzubilden.
FAQ
Was ist der Unterschied zwischen einem Image und einem Container?
Ein Image ist eine schreibgeschützte Vorlage, die die Anwendung und ihre Abhängigkeiten definiert. Ein Container ist eine laufende Instanz eines Images mit einer beschreibbaren Ebene darüber.
Kann ich Docker Compose in der Produktion verwenden?
Docker Compose ist in erster Linie für Entwicklung und Tests konzipiert. Für die Produktion sollten Sie Orchestrierungstools wie Kubernetes oder Docker Swarm in Betracht ziehen.
Wie persistiere ich Daten in Docker?
Verwenden Sie Volumes oder Bind-Mounts. Volumes werden von Docker verwaltet und sind die bevorzugte Methode, um von Containern generierte Daten zu persistieren.
Bereit, Ihre App zu containerisieren? Wenn Sie Dokumentation oder Anleitungen für Ihr Team in PDF konvertieren müssen, probieren Sie unseren Word-zu-PDF-Konverter, um ansprechende Dokumente zu teilen.