Eine sanfte Einführung in Docker für Python -EntwicklerEine sanfte Einführung in Docker für Python -Entwickler
Bild von Autor | Ideogramm

# Einführung

Sie haben gerade Ihre Python -App in die Produktion gebracht und plötzlich bricht alles. Die App hat perfekt an Ihrem Laptop computer gearbeitet und alle Assessments in CI bestanden, aber jetzt wirft sie mysteriöse Importfehler in der Produktion. Klingt vertraut? Oder Sie haben einen neuen Entwickler, der drei Tage damit verbringt, nur zu versuchen, Ihr Projekt lokal zum Laufen zu bringen. Sie sind unter Home windows, Sie haben auf Mac entwickelt, der Produktionsserver führt Ubuntu aus, und irgendwie hat jeder verschiedene Python -Versionen und widersprüchliche Paketinstallationen.

Wir waren alle dort und debuggen verzweifelt umweltspezifische Probleme, anstatt Merkmale aufzubauen. Docker Löst dieses Durcheinander, indem Sie Ihre gesamte Anwendungsumgebung in einen Container verpacken, der überall identisch ausgeführt wird. Nicht mehr „funktioniert auf meiner Maschine“ Ausreden. Keine Ausgaben mehr ausgeben Wochenenden Debugging -Bereitstellungsfragen. In diesem Artikel werden Sie Docker vorgestellt und wie Sie Docker verwenden können, um die Anwendungsentwicklung zu vereinfachen. Sie lernen auch, wie Sie eine einfache Python -Anwendung mit Docker containern.

🔗 Hyperlink zum Code auf GitHub

# Wie Docker funktioniert und warum Sie es brauchen

Stellen Sie sich Docker als analog zu Versandcontainern vor, aber für Ihren Code. Wenn Sie eine Python -App containieren, verpacken Sie nicht nur Ihren Code. Sie verpacken die gesamte Laufzeitumgebung: Die spezifische Python -Model, alle Ihre Abhängigkeiten, Systembibliotheken, Umgebungsvariablen und sogar das Betriebssystem, das Ihre App erwartet.

Das Ergebnis? Ihre App läuft genauso auf Ihrem Laptop computer, dem Home windows -Laptop Ihres Kollegen, dem Staging -Server und der Produktion. Jedes Mal. Aber wie machst du das?

Nun, wenn Sie Python -Apps mit Docker Containering Containering machen, machen Sie Folgendes. Sie verpacken Ihre App in ein tragbares Artefakt namens „Bild“. Dann starten Sie „Container“ – Ausführungsinstanzen von Bildern – und führen Ihre Anwendungen in der Container -Umgebung aus.

# Aufbau einer Python -Net -API

Anstatt mit Spielzeugbeispielen zu beginnen, containieren wir eine realistische Python -Anwendung. Wir werden ein einfaches bauen Fastapi-basierte Todo -API (mit Uvicorn als ASGI -Server), der die Muster demonstriert, die Sie in realen Projekten verwenden, und verwenden Pydantisch zur Datenvalidierung.

Erstellen Sie in Ihrem Projektverzeichnis eine Anforderungen.txt -Datei:

fastapi==0.116.1
uvicorn(commonplace)==0.35.0
pydantic==2.11.7

Erstellen wir nun die grundlegende App -Struktur:

# app.py
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Record
import os

app = FastAPI(title="Todo API")
todos = ()
next_id = 1

Datenmodelle hinzufügen:

class TodoCreate(BaseModel):
    title: str
    accomplished: bool = False

class Todo(BaseModel):
    id: int
    title: str
    accomplished: bool

Erstellen Sie einen Endpunkt der Gesundheitscheck:

@app.get("https://www.kdnuggets.com/")
def health_check():
    return {
        "standing": "wholesome",
        "atmosphere": os.getenv("ENVIRONMENT", "improvement"),
        "python_version": os.getenv("PYTHON_VERSION", "unknown")
    }

Fügen Sie die Kernfunktionalität hinzu:

@app.get("/todos", response_model=Record(Todo))
def list_todos():
    return todos

@app.submit("/todos", response_model=Todo)
def create_todo(todo_data: TodoCreate):
    world next_id
    new_todo = Todo(
        id=next_id,
        title=todo_data.title,
        accomplished=todo_data.accomplished
    )
    todos.append(new_todo)
    next_id += 1
    return new_todo

@app.delete("/todos/{todo_id}")
def delete_todo(todo_id: int):
    world todos
    todos = (t for t in todos if t.id != todo_id)
    return {"message": "Todo deleted"}

Fügen Sie schließlich den Server -Startcode hinzu:

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

Wenn Sie dies lokal mit laufen lassen pip set up -r necessities.txt && python app.pySie werden eine API vor Ort laufen lassen. Lassen Sie uns nun die Anwendung Containerisieren.

# Schreiben Sie Ihre erste Dockerfile

Sie haben Ihre App, eine Liste mit Anforderungen und die spezifische Umgebung, in der Ihre App ausgeführt werden kann. Wie gehen Sie von diesen unterschiedlichen Komponenten in ein Docker -Bild, das sowohl Ihren Code als auch Ihre Abhängigkeiten enthält? Sie können dies angeben, indem Sie eine Dockerfile für Ihre Bewerbung schreiben.

Stellen Sie sich es als ein Rezept vor, um ein Bild aus den verschiedenen Komponenten Ihres Projekts zu erstellen. Erstellen Sie eine Dockerfile in Ihrem Projektverzeichnis (keine Erweiterung).

# Begin with a base Python picture:
FROM python:3.11-slim

# Set atmosphere variables:
ENV PYTHONDONTWRITEBYTECODE=1 
    PYTHONUNBUFFERED=1 
    ENVIRONMENT=manufacturing 
    PYTHON_VERSION=3.11

# Arrange the working listing:
WORKDIR /app

# Set up dependencies (this order is necessary for caching):
COPY necessities.txt .
RUN pip set up --no-cache-dir -r necessities.txt

# Copy your software code:
COPY . .

# Expose the port and set the startup command:
EXPOSE 8000
CMD ("python", "app.py")

Diese Dockerfile erstellt einen Python -Webanwendungscontainer. Es verwendet das Python 3.11 (Slim Model) -Abbild als Foundation, setzt ein Arbeitsverzeichnis ein, installiert Abhängigkeiten von den Anforderungen. python app.py. Die Struktur folgt den Finest Practices, indem sie Abhängigkeiten vor dem Kopieren von Code für die Verwendung installieren Docker’s Layer Caching.

# Erstellen und Ausführen Ihres ersten Containers

Lassen Sie uns nun unsere Container -Anwendung erstellen und ausführen:

# Construct the Docker picture
docker construct -t my-todo-app .

# Run the container
docker run -p 8000:8000 my-todo-app

Wenn du rennst docker constructSie werden sehen, dass jede Zeile in Ihrer Dockerfile als Ebene erstellt wird. Der erste Construct kann ein wenig dauern, da Docker das Foundation -Python -Bild herunterlädt und Ihre Abhängigkeiten installiert.

⚠️ Verwendung docker buildx construct Erstellen eines Bildes aus den Anweisungen in der Dockerfile mit BuildKit.

Der -t my-todo-app FLAG -MAGS Ihr Bild mit einem besseren Namen anstelle eines zufälligen Hashs. Der -p 8000:8000 Teilen Sie den Port 8000 in den Container in Port 8000 auf Ihrem Host -Laptop.

Sie können besuchen http://localhost:8000 Um zu sehen, ob Ihre API in einem Container läuft. Der gleiche Container wird identisch auf jedem Laptop ausgeführt, der Docker installiert hat.

# Essentielle Docker -Befehle für den täglichen Gebrauch

Hier sind die Docker -Befehle, die Sie am häufigsten verwenden:

# Construct a picture
docker construct -t myapp .

# Run a container within the background
docker run -d -p 8000:8000 --name myapp-container myapp

# View working containers
docker ps

# View container logs
docker logs myapp-container

# Get a shell inside a working container
docker exec -it myapp-container /bin/sh

# Cease and take away containers
docker cease myapp-container
docker rm myapp-container

# Clear up unused containers, networks, pictures
docker system prune

# Einige Docker Finest Practices, die wichtig sind

Nachdem sie mit Docker in der Produktion gearbeitet haben, finden Sie hier die Praktiken, die tatsächlich einen Unterschied machen.

Verwenden Sie immer bestimmte Versionstags für Basisbilder:

# As an alternative of this
FROM python:3.11

# Use this
FROM python:3.11.7-slim

Erstellen Sie eine .Dockerignore -Datei, um unnötige Dateien auszuschließen:

__pycache__
*.pyc
.git
.pytest_cache
node_modules
.venv
.env
README.md

Halten Sie Ihre Bilder schlank, indem Sie Paketmanager aufräumen:

RUN apt-get replace && apt-get set up -y --no-install-recommends 
    build-essential 
    && rm -rf /var/lib/apt/lists/*

Führen Sie immer Container als Nicht-Root-Benutzer in der Produktion aus.

# Einpacken

Dieses Tutorial umfasste die Grundlagen, aber Dockers Ökosystem ist groß. Hier sind die nächsten Bereiche zu erkunden. Erfahren Sie für Produktionsbereitstellungen über Container -Orchestrierungsplattformen wie Kubernetes oder Cloud-spezifische Dienste wie AWS Elastic Container Service (ECS)Anwesend Google Cloud Runoder Azure Container Cases.

Entdecken Sie die Sicherheitsfunktionen von Docker, einschließlich Geheimnisverwaltung, Bildscannen und rootloser Docker. Erfahren Sie mehr über die Optimierung von Docker -Bildern für schnellere Builds und kleinere Größen. Richten Github -Aktionen Und Gitlab CI.

Viel Spaß beim Lernen!

Bala Priya c ist ein Entwickler und technischer Schriftsteller aus Indien. Sie arbeitet gern an der Schnittstelle zwischen Mathematik, Programmierung, Datenwissenschaft und Inhaltserstellung. Ihre Interessensgebiete und Fachgebiete umfassen DevOps, Information Science und natürliche Sprachverarbeitung. Sie liest gerne, schreibt, codieren und Kaffee! Derzeit arbeitet sie daran, ihr Wissen mit der Entwicklergemeinschaft zu lernen und zu teilen, indem sie Tutorials, Anleitungen, Meinungsstücke und vieles mehr autorisiert. Bala erstellt auch ansprechende Ressourcenübersichten und Codierungs -Tutorials.



Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert