Wie man Python in einem Docker-Container ausführt

Hallo da draußen, ambitionierte Python-Entwickler! Ich freue mich sehr, Ihr Guide auf dieser aufregenden Reise in die Welt von Docker und Python zu sein. Als jemand, der schon seit vielen Jahren Informatik unterrichtet, kann ich Ihnen sagen, dass die Kombination dieser beiden leistungsstarken Technologien ein echter Game-Changer für Ihren Entwicklungsworkflow sein kann. Lassen Sie uns eintauchen und erkunden, wie wir Python in einem Docker-Container ausführen können!

Docker Setting - Python

Was ist Docker und warum sollten Sie sich darum kümmern?

Bevor wir uns den Details zuwenden, lassen Sie uns einen Moment innehalten, um zu verstehen, was Docker ist und warum es so wichtig ist. Stellen Sie sich vor, Sie backen einen Kuchen. Sie haben Ihr Rezept (Ihr Code), Ihre Zutaten (Ihre Abhängigkeiten) und Ihre Küchenutensilien (Ihre Entwicklungsumgebung). Wär es nicht großartig, wenn Sie all diese Dinge zusammenpacken und sie überall hin mitnehmen könnten? Genau das macht Docker für Ihre Python-Projekte!

Docker ermöglicht es Ihnen, Anwendungen in Containern zu erstellen, zu bereitstellen und auszuführen. Diese Container sind leichtgewichtig, tragbar und konsistente Umgebungen, die auf jedem Rechner mit installiertem Docker ausgeführt werden können. Das bedeutet, dass Sie das gefürchtete Problem "aber es funktioniert auf meinem Rechner" endlich ad acta legen können!

Nun, lassen Sie uns die Hände schmutzig machen und lernen, wie man Python in einem Docker-Container ausführt.

Wie man Python in Docker mit Dockerfiles ausführt?

Ein Dockerfile ist wie ein Rezept für Ihren Docker-Container. Es enthält eine Reihe von Anweisungen, die Docker verwendet, um ein Image zu erstellen, das dann zur Erstellung eines Containers verwendet wird. Lassen Sie uns ein einfaches Dockerfile für eine Python-Anwendung erstellen:

# Verwenden Sie ein offizielles Python-Laufzeit-Image als Eltern-Image
FROM python:3.9-slim

# Setzen Sie das Arbeitsverzeichnis im Container
WORKDIR /app

# Kopieren Sie den Inhalt des aktuellen Verzeichnisses in den Container im Verzeichnis /app
COPY . /app

# Installieren Sie alle benötigten Pakete, die in requirements.txt angegeben sind
RUN pip install --no-cache-dir -r requirements.txt

# Machen Sie Port 80 für die Welt außerhalb dieses Containers zugänglich
EXPOSE 80

# Definieren Sie eine Umgebungsvariablen
ENV NAME World

# Führen Sie app.py aus, wenn der Container startet
CMD ["python", "app.py"]

Lassen Sie uns das einmal auseinandernehmen:

  1. FROM python:3.9-slim: Das tells Docker, das offizielle Python 3.9 Image als Basis zu verwenden.
  2. WORKDIR /app: Setzt das Arbeitsverzeichnis innerhalb des Containers.
  3. COPY . /app: Kopiert den Inhalt unseres aktuellen Verzeichnisses (einschließlich unseres Python-Skripts) in den Container.
  4. RUN pip install --no-cache-dir -r requirements.txt: Installiert alle benötigten Python-Pakete.
  5. EXPOSE 80: Macht Port 80 außerhalb des Containers zugänglich.
  6. ENV NAME World: Setzt eine Umgebungsvariablen.
  7. CMD ["python", "app.py"]: Gibt den Befehl an, der bei Start des Containers ausgeführt wird.

Nun erstellen wir eine einfache app.py Datei:

import os
name = os.environ.get('NAME', "World")
print(f"Hello, {name}!")

Um diesen Docker-Container zu erstellen und auszuführen, verwenden Sie diese Befehle:

docker build -t my-python-app .
docker run my-python-app

Und voilà! Sie sollten "Hello, World!" in Ihrer Konsole sehen.

Wie man Python mit Docker Compose ausführt?

Docker Compose ist wie ein Dirigent für Ihr Docker-Orchester. Es ermöglicht Ihnen, definierte und mehr-container Docker-Anwendungen auszuführen. Lassen Sie uns eine docker-compose.yml Datei für unsere Python-Anwendung erstellen:

version: '3'
services:
web:
build: .
ports:
- "5000:80"
volumes:
- .:/app
environment:
- NAME=Docker Compose

Diese Datei weist Docker Compose an:

  1. Ein Image mithilfe unseres Dockerfiles zu erstellen.
  2. Port 5000 auf Ihrem Host auf Port 80 im Container zu mappen.
  3. Unser aktuelles Verzeichnis auf /app im Container zu mounten.
  4. Die Umgebungsvariablen NAME auf "Docker Compose" zu setzen.

Um dies auszuführen, verwenden Sie einfach:

docker-compose up

Wie man Python in einer virtuellen Umgebung innerhalb des Docker ausführt?

Python in einer virtuellen Umgebung innerhalb eines Docker-Containers auszuführen mag übertrieben erscheinen, kann aber in bestimmten Szenarien nützlich sein. Lassen Sie uns unser Dockerfile so修改ieren, dass es eine virtuelle Umgebung enthält:

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .

RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "app.py"]

Dieses Dockerfile erstellt eine virtuelle Umgebung in /opt/venv, aktiviert sie und installiert Ihre Anforderungen.

Fazit

Glückwunsch! Sie haben gerade gelernt, wie man Python in einem Docker-Container mit Dockerfiles, Docker Compose und sogar in einer virtuellen Umgebung ausführt. Dies ist eine leistungsstarke Fähigkeit, die Ihnen auf Ihrer Python-Entwicklungsreise dienen wird.

Denken Sie daran, Docker dreht sich alles um Konsistenz und Portabilität. Es ermöglicht Ihnen, Ihre Python-Anwendungen zusammen mit allen Abhängigkeiten zu verpacken und sie überall dort auszuführen, wo Docker installiert ist. Dies kann die Deployment- und Zusammenarbeit-Prozesse erheblich vereinfachen.

Zum Abschluss hier eine Tabelle, die die wichtigsten Docker-Befehle zusammenfasst, die wir gelernt haben:

Befehl Beschreibung
docker build -t <image-name> . Erstellen eines Docker-Images
docker run <image-name> Führt einen Docker-Container aus
docker-compose up Startet die Dienste, die in docker-compose.yml definiert sind
docker-compose down Stoppt und entfernt Container, Netzwerke, Images und Volumes

Üben Sie weiter, erkunden Sie weiter und vor allem, haben Sie Spaß an Python und Docker! Denken Sie daran, jeder Meister war einmal ein Anfänger. Ihre Reise hat gerade erst begonnen, und ich kann es kaum erwarten, die erstaunlichen Dinge zu sehen, die Sie erschaffen werden. Viel Spaß beim Coden!

Credits: Image by storyset