Top Docker Befehle für die Anwendungsentwicklung

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses umfassende Tutorial führt Sie durch die wichtigsten Docker-Befehle zum Erstellen und Verwalten von Anwendungen. Sie lernen, wie Sie Docker installieren und konfigurieren, grundlegende Docker-Befehle und den Container-Lebenszyklus erkunden, benutzerdefinierte Anwendungsumgebungen erstellen, Ihre Anwendungen bereitstellen und skalieren sowie Docker Compose zur Orchestrierung von Multi-Container-Anwendungen nutzen. Am Ende dieses Tutorials verfügen Sie über ein solides Verständnis der leistungsstarken Docker-Befehle zum Erstellen mit Docker.

Einführung in Docker: Verständnis von Containern und deren Vorteile

Docker ist eine leistungsstarke Plattform, die die Art und Weise, wie Anwendungen entwickelt, verpackt und bereitgestellt werden, revolutioniert hat. Im Kern nutzt Docker die Containerisierungstechnologie, um Anwendungen und ihre Abhängigkeiten in selbstkonsistente Einheiten, sogenannte Container, zu verkapseln. Dieser Ansatz bietet zahlreiche Vorteile, die Docker zu einer weit verbreiteten Lösung im Bereich Softwareentwicklung und -bereitstellung gemacht haben.

Verständnis von Containern

Container sind leichte, portablen und autarke Softwarepakete, die alle notwendigen Komponenten zum Ausführen einer Anwendung enthalten, wie z. B. den Code, die Laufzeitumgebung, Systemtools und Bibliotheken. Im Gegensatz zu traditionellen virtuellen Maschinen benötigen Container keinen vollständigen Betriebssystemkern; stattdessen teilen sie den Kernel des Hostsystems, was sie effizienter und ressourcenschonender macht.

Vorteile der Containerisierung

  1. Konsistenz und Reproduzierbarkeit: Container gewährleisten, dass Anwendungen unabhängig von der zugrundeliegenden Infrastruktur auf dieselbe Weise ausgeführt werden, wodurch eine konsistente und vorhersehbare Umgebung bereitgestellt wird.
  2. Skalierbarkeit und Flexibilität: Container lassen sich leicht skalieren, wodurch eine effiziente Ressourcennutzung und eine dynamische Skalierung von Anwendungen ermöglicht wird.
  3. Isolierung und Sicherheit: Container bieten eine sichere und isolierte Umgebung, verhindern Konflikte zwischen Anwendungen und gewährleisten, dass sie unabhängig voneinander ausgeführt werden.
  4. Verbesserte Produktivität der Entwickler: Die Containerisierung vereinfacht die Entwicklung, das Testen und die Bereitstellung von Prozessen, sodass sich Entwickler auf die Erstellung von Anwendungen konzentrieren können, anstatt sich um die Infrastruktur kümmern zu müssen.
  5. Portabilität und einfache Bereitstellung: Container können leicht verpackt, geteilt und auf verschiedenen Plattformen und Umgebungen bereitgestellt werden, was den Bereitstellungsprozess der Anwendung optimiert.

Die Rolle von Docker in der Containerisierung

Docker ist die führende Containerisierungsplattform, die ein umfassendes Ökosystem für das Erstellen, Bereitstellen und Verwalten von Containern bietet. Es bietet eine breite Palette an Tools und Funktionen, die den Containerisierungsprozess vereinfachen, darunter:

  1. Docker Engine: Der Kernbestandteil von Docker, der die Erstellung und Ausführung von Containern verwaltet.
  2. Docker Images: Standardisierte Vorlagen, die den Anwendungscode, die Abhängigkeiten und die Konfiguration enthalten und die konsistente Erstellung von Containern ermöglichen.
  3. Docker Container: Die laufenden Instanzen von Docker Images, die die Anwendung und ihre Abhängigkeiten verkapseln.
  4. Docker Registry: Ein zentraler Speicherort zum Speichern und Verteilen von Docker Images, der die gemeinsame Nutzung und Bereitstellung von Anwendungen erleichtert.

Durch die Nutzung von Docker können Entwickler und Betriebs-Teams den Lebenszyklus der Anwendungsentwicklung, -prüfung und -bereitstellung optimieren, was zu erhöhter Effizienz, Skalierbarkeit und Zuverlässigkeit führt.

graph TD A[Docker Engine] --> B[Docker Images] B --> C[Docker Container] C --> D[Docker Registry]

Installation und Konfiguration von Docker: Erste Schritte auf Ihrer Plattform

Bevor Sie Docker verwenden können, müssen Sie es auf Ihrer Plattform installieren und konfigurieren. Dieser Abschnitt führt Sie durch den Installationsvorgang unter Ubuntu 22.04.

Installation von Docker unter Ubuntu 22.04

  1. Aktualisieren Sie das Paketverzeichnis und installieren Sie die notwendigen Abhängigkeiten:
sudo apt-get update
sudo apt-get install -y \
  ca-certificates \
  curl \
  gnupg \
  lsb-release
  1. Fügen Sie den offiziellen Docker GPG-Schlüssel hinzu und richten Sie das Docker-Repository ein:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/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/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Installieren Sie Docker Engine, Docker CLI und Docker Compose:
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Überprüfung der Docker-Installation

Nach der Installation können Sie überprüfen, ob Docker korrekt installiert und ausgeführt wird:

  1. Überprüfen Sie die Docker-Version:
docker version
  1. Führen Sie einen einfachen "Hello, World!"-Container aus:
docker run hello-world

Bei erfolgreicher Installation sollten Sie die Meldung "Hello from Docker!" sehen.

Konfiguration von Docker

Standardmäßig läuft der Docker-Daemon als Benutzer root, was in manchen Umgebungen nicht wünschenswert ist. Um Nicht-Root-Benutzern die Verwaltung von Docker zu ermöglichen, können Sie sie zur Gruppe docker hinzufügen:

sudo usermod -aG docker your-username

Denken Sie daran, sich abzumelden und wieder anzumelden, damit die Änderungen wirksam werden.

Nachdem Sie Docker installiert und konfiguriert haben, können Sie mit der Erkundung der Docker-Grundlagen und der Erstellung Ihrer ersten Docker-basierten Anwendungen beginnen.

Docker-Grundlagen: Essenzielle Befehle und Container-Lebenszyklus

Um effektiv mit Docker zu arbeiten, ist es unerlässlich, die grundlegenden Befehle und den Lebenszyklus von Docker-Containern zu verstehen. Dieser Abschnitt behandelt die am häufigsten verwendeten Docker-Befehle und die verschiedenen Phasen des Lebenszyklus eines Containers.

Essenzielle Docker-Befehle

  1. docker run: Erstellt und startet einen neuen Container aus einem angegebenen Image.
  2. docker image ls: Listet alle Docker-Images auf dem System auf.
  3. docker container ls: Listet alle laufenden Container auf.
  4. docker container stop: Stoppt einen laufenden Container.
  5. docker container rm: Entfernt einen Container.
  6. docker image build: Erstellt ein neues Docker-Image aus einer Dockerfile.
  7. docker image push: Schiebt ein Docker-Image in einen Registry, wie Docker Hub.
  8. docker network create: Erstellt ein neues Docker-Netzwerk.
  9. docker volume create: Erstellt ein neues Docker-Volume.
  10. docker-compose up: Startet eine Multi-Container-Anwendung, die in einer Docker Compose-Datei definiert ist.

Docker-Container-Lebenszyklus

Der Lebenszyklus eines Docker-Containers lässt sich in folgende Phasen unterteilen:

  1. Erstellung: Ein Container wird aus einem Docker-Image mithilfe des Befehls docker run erstellt.
  2. Ausführung: Der Container wird gestartet und seine Anwendung läuft.
  3. Pause: Die Prozesse des Containers werden angehalten, aber der Container selbst bleibt im Speicher.
  4. Stopp: Die Anwendung des Containers wird gestoppt, aber der Container existiert weiterhin.
  5. Neustart: Ein gestoppter Container kann neu gestartet werden, um seine Ausführung fortzusetzen.
  6. Entfernung: Ein Container kann mithilfe des Befehls docker container rm vom System entfernt werden.
graph TD A[Container erstellen] --> B[Container ausführen] B --> C[Container pausieren] B --> D[Container stoppen] D --> E[Container neustarten] E --> B D --> F[Container entfernen]

Durch das Verständnis dieser essentiellen Befehle und des Container-Lebenszyklus können Sie Docker-Container effektiv verwalten und steuern und so die Grundlage für die Entwicklung und Bereitstellung Ihrer Anwendungen legen.

Docker-Images erstellen: Benutzerdefinierte Anwendungs-Umgebungen

Docker ermöglicht die Erstellung benutzerdefinierter Docker-Images. Diese Images dienen als Grundlage für die Ausführung von containerisierten Anwendungen und ermöglichen es Ihnen, maßgeschneiderte Umgebungen zu schaffen, die Ihren spezifischen Anforderungen entsprechen.

Docker-Images verstehen

Docker-Images sind geschichtete Dateisysteme, die den Anwendungscode, Abhängigkeiten und alle anderen notwendigen Komponenten enthalten. Sie fungieren als Vorlagen für die Erstellung von Docker-Containern und gewährleisten konsistente und reproduzierbare Umgebungen.

Docker-Images erstellen

Zur Erstellung eines Docker-Images verwenden Sie eine Dockerfile, eine textbasierte Skriptdatei, die die Schritte zur Erstellung des Images definiert. Hier ist ein Beispiel für eine Dockerfile für eine einfache Node.js-Anwendung:

## Verwenden Sie das offizielle Node.js-Image als Basis
FROM node:14

## Legen Sie das Arbeitsverzeichnis fest
WORKDIR /app

## Kopieren Sie die Dateien package.json und package-lock.json
COPY package*.json ./

## Installieren Sie die Anwendungsabhängigkeiten
RUN npm ci

## Kopieren Sie den Anwendungscode
COPY . .

## Erstellen Sie die Anwendung
RUN npm run build

## Exponieren Sie den Anwendungsport
EXPOSE 3000

## Starten Sie die Anwendung
CMD ["npm", "start"]

Um das Docker-Image mit dieser Dockerfile zu erstellen, führen Sie den folgenden Befehl aus:

docker build -t my-node-app .

Dieser Befehl erstellt ein neues Docker-Image mit dem Tag my-node-app.

Docker-Images optimieren

Um effiziente und sichere Docker-Images zu gewährleisten, können Sie die folgenden Best Practices anwenden:

  1. Geeignete Basis-Images verwenden: Wählen Sie schlanke und sichere Basis-Images wie alpine oder debian-slim.
  2. Minimierung der Image-Schichten: Konsolidieren Sie die Dockerfile-Anweisungen, um die Anzahl der Schichten im Image zu reduzieren.
  3. Mehrstufige Builds nutzen: Verwenden Sie mehrstufige Builds, um Build- und Laufzeitumgebungen zu trennen und die Größe des endgültigen Images zu reduzieren.
  4. Sicherheitslücken scannen: Verwenden Sie Tools wie Trivy oder Snyk, um Ihre Docker-Images auf bekannte Sicherheitslücken zu scannen.
  5. Caching-Strategien implementieren: Nutzen Sie den Caching-Mechanismus von Docker, um den Build-Prozess zu beschleunigen.

Durch die Beherrschung der Erstellung von Docker-Images können Sie maßgeschneiderte und optimierte Umgebungen für Ihre Anwendungen erstellen, was eine nahtlose Bereitstellung und Skalierbarkeit ermöglicht.

Running and Managing Docker Containers: Deploying and Scaling Applications

Once you have built your Docker images, the next step is to run and manage the containers based on those images. This section will cover the essential commands and techniques for deploying and scaling your containerized applications.

Running Docker Containers

To run a Docker container, you can use the docker run command. Here's an example of running a Nginx web server container:

docker run -d -p 80:80 --name my-nginx nginx

This command will:

  • -d: Run the container in detached mode (in the background)
  • -p 80:80: Map the host's port 80 to the container's port 80
  • --name my-nginx: Assign the name "my-nginx" to the container
  • nginx: Use the "nginx" Docker image to create the container

Managing Docker Containers

Once your containers are running, you can use various commands to manage them:

  • docker container ls: List all running containers
  • docker container stop <container_name>: Stop a running container
  • docker container start <container_name>: Start a stopped container
  • docker container rm <container_name>: Remove a container
  • docker container logs <container_name>: View the logs of a container
  • docker container exec -it <container_name> <command>: Execute a command inside a running container

Scaling Docker Applications

To scale your containerized applications, you can use Docker's built-in features or leverage orchestration tools like Docker Swarm or Kubernetes. Here's an example of scaling a web application using Docker Swarm:

  1. Create a Docker Swarm cluster:
docker swarm init
  1. Deploy the application as a Docker Swarm service:
docker service create --name my-web-app -p 80:80 my-web-app:latest
  1. Scale the service to multiple replicas:
docker service scale my-web-app=3

This will create three replicas of the my-web-app service, allowing you to scale your application horizontally.

By understanding how to run, manage, and scale Docker containers, you can effectively deploy and maintain your containerized applications, ensuring high availability and scalability.

Docker-Netzwerke und Volumes: Container verbinden und Daten persistent speichern

In einer containerisierten Umgebung sind Netzwerkverbindungen und die Datenpersistenz entscheidend für die Erstellung und Verwaltung komplexer Anwendungen. Docker bietet leistungsstarke Netzwerk- und Volume-Funktionen, um diese Anforderungen zu erfüllen.

Docker-Netzwerke

Docker unterstützt verschiedene Netzwerkmodi, die es Containern ermöglichen, miteinander und mit der Außenwelt zu kommunizieren:

  1. Bridge-Netzwerk: Der Standard-Netzwerkmodus, der Container auf demselben Host verbindet.
  2. Host-Netzwerk: Container teilen dieselbe Netzwerk-Stack wie der Host-Computer.
  3. Overlay-Netzwerk: Ermöglicht die Kommunikation zwischen Containern über mehrere Docker-Hosts hinweg.
  4. Macvlan-Netzwerk: Weist dem Container eine MAC-Adresse zu, sodass er wie ein physisches Netzwerkgerät erscheint.

Um ein benutzerdefiniertes Bridge-Netzwerk zu erstellen und Container daran anzuschließen, können Sie die folgenden Befehle verwenden:

## Erstellen Sie ein neues Bridge-Netzwerk
docker network create my-network

## Starten Sie einen Container und verbinden Sie ihn mit dem Netzwerk
docker run -d --name my-app --network my-network my-app:latest

Docker-Volumes

Docker-Volumes bieten eine Möglichkeit, von Containern generierte Daten persistent zu speichern, um sicherzustellen, dass diese Daten nicht verloren gehen, wenn der Container gestoppt oder entfernt wird. Es gibt verschiedene Arten von Volumes:

  1. Benannte Volumes: Volumes mit einem eindeutigen Namen, die von Docker verwaltet werden.
  2. Bind Mounts: Verzeichnisse auf dem Host-Computer, die dem Container zugeordnet sind.
  3. tmpfs Mounts: Dateisysteme im Arbeitsspeicher, die keine Daten auf dem Host persistent speichern.

Hier ist ein Beispiel für die Erstellung eines benannten Volumes und dessen Verwendung in einem Container:

## Erstellen Sie ein benanntes Volume
docker volume create my-volume

## Starten Sie einen Container und mounten Sie das Volume
docker run -d --name my-db -v my-volume:/data my-db:latest

Durch das Verständnis der Docker-Netzwerk- und Volume-Funktionen können Sie hochskalierbare und robuste Anwendungen erstellen, die miteinander kommunizieren und Daten über den gesamten Container-Lebenszyklus hinweg persistent speichern können.

Docker Compose: Orchestrierung von Multi-Container-Anwendungen

Während Docker eine leistungsstarke Plattform für die Ausführung einzelner Container bietet, kann die Verwaltung komplexer, mehrdienstlicher Anwendungen umständlich werden. Hier kommt Docker Compose ins Spiel, das es Ihnen ermöglicht, die Bereitstellung Ihrer gesamten Anwendungs-Stack zu definieren und zu orchestrieren.

Docker Compose verstehen

Docker Compose ist ein Werkzeug, mit dem Sie Multi-Container-Docker-Anwendungen definieren und ausführen können. Es verwendet eine YAML-basierte Konfigurationsdatei, um die Services, Netzwerke und Volumes anzugeben, aus denen Ihre Anwendung besteht.

Definition einer Docker Compose-Datei

Hier ist ein Beispiel für eine Docker Compose-Datei für eine einfache Webanwendung mit einer Datenbank:

version: "3"

services:
  web:
    build: .
    ports:
      - "80:8080"
    depends_on:
      - db
  db:
    image: postgres:12
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

Diese Konfiguration definiert zwei Services: web und db. Der web-Service baut ein Image aus dem aktuellen Verzeichnis und ordnet Port 80 auf dem Host Port 8080 im Container zu. Der db-Service verwendet das offizielle Postgres 12-Image und mount einen benannten Volume für die Datenpersistenz.

Verwendung von Docker Compose

Um Docker Compose zu verwenden, gehen Sie folgendermaßen vor:

  1. Erstellen Sie die Docker Compose-Datei in Ihrem Projektverzeichnis.
  2. Führen Sie die folgenden Befehle aus, um Ihre Anwendung zu verwalten:
    • docker-compose up -d: Starten Sie die Anwendung im detachierten Modus.
    • docker-compose down: Stoppen und entfernen Sie die Anwendung.
    • docker-compose ps: Listen Sie die laufenden Services auf.
    • docker-compose logs: Zeigen Sie die Logs der Anwendung an.

Docker Compose vereinfacht die Bereitstellung und Verwaltung von Multi-Container-Anwendungen, wodurch die Koordination des Lebenszyklus Ihrer Services und die Sicherstellung konsistenter Umgebungen in verschiedenen Phasen des Entwicklungs- und Bereitstellungsprozesses einfacher wird.

Best Practices für die Docker-Entwicklung: Optimierung Ihres Arbeitsablaufs

Wenn Sie mit Docker vertraut sind, ist es wichtig, Best Practices zu übernehmen, die Ihnen helfen, Ihren Entwicklungsworkflow zu optimieren und die langfristige Wartbarkeit Ihrer Docker-basierten Anwendungen sicherzustellen. Dieser Abschnitt behandelt einige wichtige Best Practices.

Eine konsistente Namensgebung einführen

Legen Sie eine konsistente Namensgebung für Ihre Docker-Images, -Container, -Netzwerke und -Volumes fest. Dies hilft Ihnen, Ihre Umgebung zu organisieren und Ihre Ressourcen einfacher zu verwalten. Beispielsweise könnten Sie ein Namenschema wie <Anwendung>-<Dienst>-<Umgebung> verwenden.

Mehrstufige Builds nutzen

Mehrstufige Builds ermöglichen es Ihnen, die Build- und Laufzeitumgebungen zu trennen, was zu kleineren und sichereren Docker-Images führt. Dieser Ansatz ist besonders nützlich für kompilierte Sprachen, bei denen der Buildprozess ressourcenintensiv sein kann und das endgültige Laufzeit-Image deutlich kleiner sein kann.

Implementierung von Continuous Integration und Deployment

Integrieren Sie Docker in Ihre Continuous Integration (CI) und Continuous Deployment (CD)-Pipelines. Dadurch können Sie Ihre Docker-basierten Anwendungen automatisch erstellen, testen und bereitstellen, was Konsistenz gewährleistet und manuelle Arbeit reduziert.

Überwachung und Sicherung Ihrer Docker-Umgebung

Verwenden Sie Tools wie Prometheus, Grafana und Sysdig, um den Zustand und die Leistung Ihrer Docker-Umgebung zu überwachen. Verwenden Sie außerdem Sicherheitsbest Practices, wie z. B. das Scannen Ihrer Images auf Sicherheitslücken, die Durchsetzung von Zugriffskontrollen und die Aktualisierung Ihres Docker-Daemons und -Engines.

Optimierung von Docker-Image-Layern

Strukturieren Sie Ihre Dockerfiles sorgfältig, um die Anzahl der Layer in Ihren Docker-Images zu minimieren. Dies kann durch die Konsolidierung von Anweisungen und die Nutzung von Caching-Strategien erreicht werden, um den Buildprozess zu beschleunigen.

Docker Compose für die lokale Entwicklung nutzen

Verwenden Sie Docker Compose, um Ihre lokale Entwicklungs-Umgebung zu definieren und zu verwalten. Dies erleichtert das Einrichten und Abbauen Ihres Anwendungs-Stacks und sorgt für Konsistenz auf verschiedenen Entwicklungsmaschinen.

Mit dem Docker-Ökosystem Schritt halten

Bleiben Sie über die neuesten Entwicklungen im Docker-Ökosystem informiert, einschließlich neuer Funktionen, Best Practices und Sicherheitsupdates. Überprüfen Sie regelmäßig die Docker-Dokumentation und beteiligen Sie sich an der Docker-Community, um auf dem Laufenden zu bleiben.

Indem Sie diese Best Practices befolgen, können Sie Ihren Docker-Entwicklungsworkflow optimieren, die Qualität und Wartbarkeit Ihrer Docker-basierten Anwendungen verbessern und ein reibungsloses und effizientes Entwicklungserlebnis gewährleisten.

Zusammenfassung

In diesem Tutorial haben Sie die essentiellen Docker-Befehle zum Erstellen und Verwalten von Anwendungen kennengelernt. Von der Installation und Konfiguration von Docker bis zum Erstellen benutzerdefinierter Images, dem Ausführen und Verwalten von Containern und der Orchestrierung von Multi-Container-Anwendungen verfügen Sie nun über das Wissen und die Werkzeuge, um die Fähigkeiten von Docker für eine effiziente und skalierbare Anwendungsentwicklung zu nutzen. Die Beherrschung dieser Docker-Befehle ermöglicht es Ihnen, Ihre Anwendungen mühelos zu erstellen, bereitzustellen und zu verwalten.