Come eseguire Python in un Container Docker?

Ciao a tutti, futuri sviluppatori Python! Sono entusiasta di essere il tuo guida in questo emozionante viaggio nel mondo di Docker e Python. Come qualcuno che ha insegnato scienze informatiche per molti anni, posso dirti che combinare queste due potenti tecnologie può essere un cambiamento di gioco per il tuo flusso di lavoro di sviluppo. Allora, entriamo nel dettaglio e esploriamo come possiamo eseguire Python in un container Docker!

Docker Setting - Python

Cos'è Docker e Perché Dovresti Preoccuparti?

Prima di immergerci nei dettagli, prendiamo un momento per capire cos'è Docker e perché è così importante. Immagina di stare cuocendo un cake. Hai la tua ricetta (il tuo codice), i tuoi ingredienti (le tue dipendenze) e i tuoi attrezzi da cucina (il tuo ambiente di sviluppo). Ora, non sarebbe meraviglioso se potessi pacchiare tutte queste cose insieme e portarle ovunque? Questo è essenzialmente ciò che Docker fa per i tuoi progetti Python!

Docker ti permette di creare, distribuire ed eseguire applicazioni in container. Questi container sono ambienti leggeri, portatili e consistenti che possono essere eseguiti su qualsiasi macchina con Docker installato. Questo significa che puoi dire addio al temuto problema "ma funziona sul mio computer"!

Ora, mettiamo le mani sporche e impariamo come eseguire Python in un container Docker.

Come eseguire Python inside Docker utilizzando Dockerfile?

Un Dockerfile è come una ricetta per il tuo container Docker. Contiene un set di istruzioni che Docker utilizza per costruire un'immagine, che viene poi utilizzata per creare un container. Creiamo un semplice Dockerfile per un'applicazione Python:

# Usa un'immagine ufficiale di Python come immagine padre
FROM python:3.9-slim

# Imposta la directory di lavoro nel container
WORKDIR /app

# Copia il contenuto della directory corrente nel container in /app
COPY . /app

# Installa qualsiasi pacchetto necessario specificato in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Rende la porta 80 disponibile al mondo esterno a questo container
EXPOSE 80

# Definisce una variabile d'ambiente
ENV NAME World

# Esegue app.py quando il container parte
CMD ["python", "app.py"]

Ecco una spiegazione dettagliata:

  1. FROM python:3.9-slim: Questo dice a Docker di utilizzare l'immagine ufficiale di Python 3.9 come base.
  2. WORKDIR /app: Imposta la directory di lavoro all'interno del container.
  3. COPY . /app: Copia la nostra directory corrente (compreso il nostro script Python) nel container.
  4. RUN pip install --no-cache-dir -r requirements.txt: Installa qualsiasi pacchetto Python di cui abbiamo bisogno.
  5. EXPOSE 80: Rende la porta 80 disponibile all'esterno del container.
  6. ENV NAME World: Imposta una variabile d'ambiente.
  7. CMD ["python", "app.py"]: Specifica il comando da eseguire quando il container parte.

Ora, creiamo un semplice file app.py:

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

Per costruire ed eseguire questo container Docker, usa questi comandi:

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

E voilà! Dovresti vedere "Ciao, World!" stampato nella tua console.

Come eseguire Python utilizzando Docker Compose?

Docker Compose è come un direttore per il tuo orchéstra Docker. Ti permette di definire ed eseguire applicazioni multi-container Docker. Creiamo un file docker-compose.yml per la nostra applicazione Python:

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

Questo file dice a Docker Compose di:

  1. Costruire un'immagine utilizzando il nostro Dockerfile.
  2. Mappare la porta 5000 del nostro host alla porta 80 del container.
  3. Montare la nostra directory corrente su /app nel container.
  4. Impostare una variabile d'ambiente NAME a "Docker Compose".

Per eseguire questo, usa semplicemente:

docker-compose up

Come eseguire Python in un ambiente virtuale all'interno di Docker?

Eseguire Python in un ambiente virtuale all'interno di un container Docker potrebbe sembrare un eccesso, ma può essere utile in determinate situazioni. Modifichiamo il nostro Dockerfile per includere un ambiente virtuale:

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"]

Questo Dockerfile crea un ambiente virtuale in /opt/venv, lo attiva e poi installa le nostre dipendenze.

Conclusione

Complimenti! Hai appena imparato come eseguire Python in un container Docker utilizzando Dockerfile, Docker Compose e persino con un ambiente virtuale. Questa è una competenza potente che ti servirà bene nel tuo viaggio di sviluppo Python.

Ricorda, Docker è tutto incentrato sulla coerenza e la portabilità. Ti permette di pacchiare le tue applicazioni Python con tutte le loro dipendenze e di eseguirle ovunque Docker sia installato. Questo può semplificare notevolmente i processi di distribuzione e collaborazione.

Mentre chiudiamo, ecco una tabella che riassume i comandi Docker chiave che abbiamo imparato:

Comando Descrizione
docker build -t <nome-immagine> . Costruisce un'immagine Docker
docker run <nome-immagine> Esegue un container Docker
docker-compose up Avvia i servizi definiti in docker-compose.yml
docker-compose down Ferma e rimuove i container, le reti, le immagini e i volumi

Continua a praticare, continua a esplorare e, soprattutto, continua a divertirti con Python e Docker! Ricorda, ogni maestro era una volta un principiante. Il tuo viaggio è appena iniziato, e non posso aspettare per vedere le meravigliose cose che creerai. Buon coding!

Credits: Image by storyset