Erstellung von Docker Containern unter Linux

DockerDockerBeginner
Jetzt üben

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

Einführung

Dieses umfassende Docker-Tutorial bietet Entwicklern und Systemadministratoren eine praktische Anleitung zum Verständnis und zur Implementierung der Containerisierungstechnologie. Durch die Erkundung der Kernkonzepte von Docker, der Installationsverfahren und grundlegender Befehle erwerben die Lernenden essentielle Fähigkeiten zur Erstellung leichter, portabler Anwendungsumgebungen.

Docker-Grundlagen

Einführung in die Containerisierungstechnologie

Docker ist eine leistungsstarke Containerisierungsplattform, die die Softwareentwicklung und -bereitstellung revolutioniert. Sie ermöglicht es Entwicklern, Anwendungen mit allen Abhängigkeiten in standardisierte Einheiten, sogenannte Container, zu verpacken, um eine konsistente Leistung in verschiedenen Computernumgebungen sicherzustellen.

Kernkonzepte von Docker

Was ist Docker?

Docker ist eine Open-Source-Plattform für Containerisierungstechnologie, die es Entwicklern ermöglicht, die Bereitstellung, Skalierung und Verwaltung von Anwendungen zu automatisieren. Im Gegensatz zu traditionellen virtuellen Maschinen teilen Docker-Container den Kernel des Hostsystems, was sie leicht und effizient macht.

graph TD A[Anwendungscode] --> B[Docker-Container] B --> C[Konsistente Bereitstellung] B --> D[Isolierte Umgebung]

Wichtige Docker-Komponenten

Komponente Beschreibung Zweck
Docker Engine Kerndienstprogramm Erstellt und führt Container aus
Docker Image Nur-Leseversion Definiert die Containerkonfiguration
Docker Container Ausführbare Instanz Führt die Anwendung aus

Installation unter Ubuntu 22.04

## Paketindex aktualisieren
sudo apt update

## Abhängigkeiten installieren
sudo apt install apt-transport-https ca-certificates curl software-properties-common

## Offiziellen Docker-GPG-Schlüssel hinzufügen
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## Stable-Repository einrichten
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Docker Engine installieren
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Grundlegende Docker-Befehle

## Docker-Version überprüfen
docker --version

## Ein Image ziehen
docker pull ubuntu:latest

## Images auflisten
docker images

## Einen Container starten
docker run -it ubuntu:latest /bin/bash

Anwendungsfälle für Docker-Containerisierung

Docker wird häufig in folgenden Bereichen eingesetzt:

  • Microservices-Architektur
  • Continuous Integration/Continuous Deployment (CI/CD)
  • Cloud-native Anwendungsentwicklung
  • Konsistente Entwicklungs- und Produktionsumgebungen

Docker-Images erstellen

Docker-Images verstehen

Docker-Images sind schreibgeschützte Vorlagen, die alles enthalten, was zum Ausführen einer Anwendung benötigt wird: Code, Laufzeitumgebung, Bibliotheken, Umgebungsvariablen und Konfigurationsdateien. Sie dienen als Blaupausen für die Erstellung von Containern.

graph LR A[Dockerfile] --> B[Docker-Image] B --> C[Docker-Container]

Dockerfile-Grundlagen

Ein Dockerfile ist eine Textdatei, die Anweisungen zum Erstellen eines Docker-Images enthält. Jede Anweisung erstellt eine neue Schicht im Image.

Dockerfile-Anweisungstypen

Anweisung Zweck Beispiel
FROM Basis-Image festlegen FROM ubuntu:22.04
RUN Befehle ausführen RUN apt-get update
COPY Dateien kopieren COPY app.py /app/
WORKDIR Arbeitsverzeichnis festlegen WORKDIR /app
CMD Standardbefehl CMD ["python", "app.py"]

Erstellen eines Beispiel-Python-Anwendungsimage

Projektstruktur

/project
├── Dockerfile
└── app.py

app.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Docker World!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Dockerfile

## Verwendung des offiziellen Python-Laufzeitumgebungs-Basis-Images
FROM python:3.9-slim

## Arbeitsverzeichnis festlegen
WORKDIR /app

## Projektdateien kopieren
COPY app.py requirements.txt ./

## Abhängigkeiten installieren
RUN pip install --no-cache-dir -r requirements.txt

## Port freigeben
EXPOSE 5000

## Standardbefehl definieren
CMD ["python", "app.py"]

Docker-Images erstellen und verwalten

## requirements.txt erstellen
echo "flask" > requirements.txt

## Docker-Image erstellen
docker build -t my-flask-app .

## Images auflisten
docker images

## Container aus dem Image starten
docker run -p 5000:5000 my-flask-app

Optimierungsstrategien für Images

  • Verwendung von mehrstufigen Builds
  • Minimierung der Schichtanzahl
  • Nutzung des Build-Cache
  • Verwendung spezifischer Image-Tags
  • Entfernen unnötiger Dateien

Container-Management

Überblick über den Container-Lebenszyklus

Docker-Container haben einen komplexen Lebenszyklus mit mehreren Zuständen, von der Erstellung bis zur Beendigung. Das Verständnis dieser Zustände ist entscheidend für ein effektives Container-Management und die Orchestrierung.

stateDiagram-v2 [*] --> Created Created --> Running Running --> Paused Paused --> Running Running --> Stopped Stopped --> Removed Removed --> [*]

Wesentliche Docker-Container-Befehle

Befehl Funktion Beispiel
docker create Container erstellen docker create nginx
docker start Container starten docker start container_id
docker stop Laufenden Container stoppen docker stop container_id
docker restart Container neu starten docker restart container_id
docker rm Container entfernen docker rm container_id

Container-Inspektion und -Überwachung

## Laufende Container auflisten
docker ps

## Alle Container auflisten
docker ps -a

## Containerdetails inspizieren
docker inspect container_id

## Container-Logs anzeigen
docker logs container_id

## Container-Ressourcenverbrauch überwachen
docker stats

Container-Ressourcenverwaltung

## Container mit CPU- und Speicherlimits ausführen
docker run -d \
  --cpus="1.5" \
  --memory="512m" \
  --name limited-container \
  nginx

Erweiterte Container-Netzwerkfunktionen

## Benutzerdefiniertes Netzwerk erstellen
docker network create mynetwork

## Container in einem bestimmten Netzwerk ausführen
docker run -d \
  --network=mynetwork \
  --name web-container \
  nginx

Container-Skalierungsstrategien

## Skalieren Sie mehrere Container-Instanzen
docker-compose up -d --scale web=3

Verwaltung persistenter Daten

## Volume erstellen
docker volume create myvolume

## Volume an Container mounten
docker run -v myvolume:/app/data \
  --name data-container \
  ubuntu

Best Practices

  • Verwenden Sie leichte Basis-Images.
  • Implementieren Sie Health Checks.
  • Minimieren Sie die Containergröße.
  • Verwenden Sie mehrstufige Builds.
  • Implementieren Sie eine angemessene Protokollierung.
  • Sichern Sie Containerkonfigurationen.

Zusammenfassung

Docker stellt einen revolutionären Ansatz für die Softwarebereitstellung dar und bietet Entwicklern eine leistungsstarke Plattform zur Erstellung konsistenter, isolierter und skalierbarer Anwendungscontainer. Durch die Beherrschung der grundlegenden Docker-Techniken können Fachkräfte die Entwicklungsworkflows optimieren, die Systemeffizienz verbessern und die Verwaltung komplexer Anwendungen über verschiedene Computing-Infrastrukturen hinweg vereinfachen.