Docker-Grundlagen für Entwickler: Flask-Anwendungen auf Ubuntu containerisieren

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 eine praktische Anleitung zum Verständnis der Grundlagen der Containerisierung, der Docker-Installation und der Containerverwaltung, speziell zugeschnitten auf Python Flask-Anwendungen unter Ubuntu. Durch die Erkundung zentraler Docker-Konzepte, Installationsverfahren und essentieller Befehle erwerben die Lernenden praktische Fähigkeiten, um Anwendungsentwicklungs- und -bereitstellungsprozesse zu optimieren.

Docker-Grundlagen

Einführung in Docker-Grundlagen

Docker ist eine leistungsstarke Containerisierungsplattform, die die Softwareentwicklung und -bereitstellung revolutioniert. Als Containertechnologie ermöglicht Docker Entwicklern, Anwendungen mit allen Abhängigkeiten zu verpacken und so eine konsistente Leistung in verschiedenen Computernumgebungen sicherzustellen.

Kernkonzepte der Containerisierung

graph TD A[Docker Image] --> B[Container] A --> C[Dockerfile] B --> D[Isolierte Laufzeitumgebung]
Konzept Beschreibung
Docker Image Nur-Leseversion der Vorlage, die Anwendungscode und Abhängigkeiten enthält
Container Leichte, ausführbare Instanz eines Images
Dockerfile Textdatei, die die Schritte zur Erstellung des Images definiert

Docker-Installation unter Ubuntu 22.04

## Systempakete aktualisieren
sudo apt update

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

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

## Docker-Repository einrichten
echo "deb [arch=$(dpkg --print-architecture) 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

## Image von Docker Hub ziehen

## Lokale Images auflisten

## Container starten

## Laufende Container auflisten

## Container stoppen

Verständnis der Docker-Architektur

Docker verwendet eine Client-Server-Architektur, bei der der Docker-Client mit dem Docker-Daemon kommuniziert, der Container, Images, Netzwerke und Speichervolumina verwaltet.

Containerlebenszyklusverwaltung

Container bieten eine isolierte, reproduzierbare Umgebung für Anwendungen. Sie können einfach erstellt, gestartet, gestoppt, verschoben und gelöscht werden und bieten eine beispiellose Flexibilität bei der Softwarebereitstellung.

Flask-Anwendungen erstellen

Containerisierung von Flask-Webanwendungen

Flask ist ein leichtgewichtiges Python-Webframework, ideal für die Containerisierung von Webanwendungen. Docker bietet eine effiziente Methode, um Flask-Projekte mit konsistenten Umgebungen zu verpacken und bereitzustellen.

Projektstruktur und Vorbereitung

graph TD A[Projektverzeichnis] --> B[app.py] A --> C[requirements.txt] A --> D[Dockerfile] A --> E[templates/]
Datei Zweck
app.py Haupt-Flask-Anwendungsskripte
requirements.txt Python-Paket-Abhängigkeiten
Dockerfile Container-Erstellungsanweisungen
templates/ HTML-Templateverzeichnis

Beispiel-Flask-Anwendung

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

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

Dockerfile erstellen

## Offizielles Python-Laufzeitumgebung verwenden
FROM python:3.9-slim

## Arbeitsverzeichnis setzen
WORKDIR /app

## Projektdateien kopieren
COPY . /app

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

## Anwendungsport freigeben
EXPOSE 5000

## Anwendung ausführen
CMD ["python", "app.py"]

Docker Compose-Konfiguration

version: "3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app

Container erstellen und ausführen

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

## Container ausführen
docker run -p 5000:5000 flask-app

## Alternativ mit docker-compose
docker-compose up

Vorteile der Containerisierung

Docker ermöglicht es Flask-Entwicklern, reproduzierbare, portierbare Webanwendungen mit isolierten Abhängigkeiten und konsistenten Laufzeitumgebungen auf verschiedenen Systemen zu erstellen.

Docker in der Produktion

Container-Orchestrierung mit Kubernetes

graph TD A[Docker-Cluster] --> B[Master-Knoten] A --> C[Worker-Knoten] B --> D[API-Server] B --> E[Scheduler] C --> F[Container-Pods]

Produktionsbereitstellungsstrategien

Strategie Beschreibung
Rollende Updates Bereitstellungen ohne Ausfallzeiten
Blue-Green-Bereitstellung Sofortiger Umstieg des Traffics
Canary-Releases Graduelle Migration des Traffics

Ubuntu-Serverkonfiguration

## Systempakete aktualisieren
sudo apt update && sudo apt upgrade -y

## Docker installieren
sudo apt install docker.io kubernetes-cli -y

## Docker-Daemon konfigurieren
sudo systemctl enable docker
sudo systemctl start docker

Docker Compose für Skalierbarkeit

version: "3"
services:
  web:
    image: myapp:latest
    deploy:
      replicas: 4
      update_config:
        parallelism: 2
    ports:
      - "80:8000"

Container-Überwachungskonfiguration

## Prometheus installieren
docker run -d \
  -p 9090:9090 \
  -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus

## Grafana installieren
docker run -d \
  -p 3000:3000 \
  grafana/grafana

Sicherheitsbest Practices

## Container mit eingeschränkten Rechten ausführen
docker run --read-only \
  --tmpfs /tmp \
  --tmpfs /run \
  -d myimage

## Docker-Secrets-Management verwenden
echo "mysecretpassword" | docker secret create db_password -

Performanceoptimierung

## Containerressourcen begrenzen
docker run -d \
  --cpus=2 \
  --memory=4g \
  myapplication

Netzwerkkonfiguration

## Benutzerdefiniertes Bridge-Netzwerk erstellen
docker network create \
  --driver bridge \
  --subnet 192.168.0.0/24 \
  production_network

Zusammenfassung

Docker revolutioniert die Softwareentwicklung, indem es durch Containerisierung konsistente und portierbare Anwendungsumgebungen ermöglicht. Dieses Tutorial hat Entwickler mit wichtigen Fähigkeiten in den Docker-Grundlagen ausgestattet, einschließlich der Erstellung von Images, der Containerverwaltung und Bereitstellungsstrategien. Durch die Beherrschung dieser Techniken können Entwickler Flask-Anwendungen effizient verpacken, verteilen und auf verschiedenen Computing-Plattformen mit erhöhter Zuverlässigkeit und Leistung ausführen.